HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
File: //etc.defaults/rc.check_device_busy
#!/bin/sh
# Copyright (c) 2000-2015 Synology Inc. All rights reserved.
#
# After all services down and before umount,
# check which process does not release device(volume, lun)

SZF_DEVICE_BUSY_LIST="/var/log/DeviceBusyList"

dump_D_process_call_stack()
{
	PIDS=$(ps -e -T -o stat,tid | grep ^D | awk '{print $2}')
	for i in ${PIDS[@]}; do
		echo "==========="
		cmd=$(tr -d '\0' </proc/${i}/cmdline)
		echo "PID: ${i}  cmdline:${cmd}"
		cat /proc/${i}/stack
	done
}

PROC_OCCUPY_VOL=`find /proc/*/fd -type l \
	| xargs ls -l 2>&1 \
	| grep -v 'No such file or directory' \
	| grep '/volume[0-9]*/'
`

VOL_DEV_LIST=`cat /proc/mounts \
	| grep " /volume[0-9]* " | cut -d' ' -f1 \
	| xargs -r ls -lL | awk '{print $5 $6}' | tr ',' ' ' | xargs -r printf "-e '%02x:%02x' "
`

if [ -n "$VOL_DEV_LIST" ]; then
	SO_OCCUPY_VOL=`cat /proc/*/maps | sh -c "grep $VOL_DEV_LIST"`
fi

ISCSI_BLK_LUN=`cat /sys/kernel/config/target/core/iblock_*/*/udev_path 2>/dev/null`

if [ -n "$PROC_OCCUPY_VOL" ] || [ -n "$SO_OCCUPY_VOL" ] || [ -n "$ISCSI_BLK_LUN" ]; then
	rm -f $SZF_DEVICE_BUSY_LIST
	echo "$PROC_OCCUPY_VOL" >> $SZF_DEVICE_BUSY_LIST
	echo "$SO_OCCUPY_VOL" >> $SZF_DEVICE_BUSY_LIST
	echo "$ISCSI_BLK_LUN" >> $SZF_DEVICE_BUSY_LIST
	echo >> $SZF_DEVICE_BUSY_LIST
	ps axjfw >> $SZF_DEVICE_BUSY_LIST
	dump_D_process_call_stack >> $SZF_DEVICE_BUSY_LIST
	/usr/bin/logger -p err "Check device busy: error, refer: ${SZF_DEVICE_BUSY_LIST}"
else
	/usr/bin/logger -p err "Check device busy: passed"
fi

exit 0