initscripts-8.35/rc.d/init.d/halt: # Try all file systems other than root and RAM disks, one last time. mount | awk '!/( \/ |^\/dev\/root|^\/dev\/ram| \/proc )/ { print $3 }' | sort -r | \ while read line; do fstab-decode umount -f $line done I think the output from mount command should be replaced with /proc/mounts. The /etc/mtab doesn't contain mountpoints from the "mount --rbind" command. It means this script doesn't umount all pointpoins. # mkdir -p /mnt/foo/bar # mount /dev/dm-1 /mnt/foo/bar # mkdir -p /mnt/foo2 # mount --rbind /mnt/foo /mnt/foo2 # umount /mnt/foo2 umount: /mnt/foo2: device is busy umount: /mnt/foo2: device is busy because: # mount | grep foo /dev/dm-1 on /mnt/foo/bar type ext3 (rw) /mnt/foo on /mnt/foo2 type none (rw,bind) (note: there is no info about /mnt/foo2/bar in mtab) # cat /proc/mounts | grep foo /dev/dm-1 /mnt/foo/bar ext3 rw,data=ordered 0 0 /dev/root /mnt/foo2 ext3 rw,data=ordered 0 0 /dev/dm-1 /mnt/foo2/bar ext3 rw,data=ordered 0 0 ^^^^^^^^^^^^ you have to umount recursive: # umount /mnt/foo2/bar # umount /mnt/foo2 For more datails see bug #194342.
Thanks, changed in CVS.