Still not working. The issue is due to the use of umount -f -d. The previous patch basically skipped the mountpoints (as opposed to skipping devices). But umount -f -d also affects the underlying devices (e.g. in bindmounts). The proposed solutions skips the mountpoints listed at the top of /proc/mounts (as before) and for the rest it changes the flags whenever the affected device is in the top of /proc/mounts.
--- /etc/init.d/umountfs 2007-10-04 12:17:31.000000000 +0100 +++ umountfs 2008-01-25 11:14:42.770493000 +0000 @@ -60,18 +60,20 @@ do_stop () { exec 9<&0 </proc/mounts - + PROTECTED_MOUNTS="$(sed -n '0,/^\/[^ ]* \/ /p' /proc/mounts)" + PROTECTED_MTPTS="" REG_MTPTS="" TMPFS_MTPTS="" while read DEV MTPT FSTYPE REST do + echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV $MTPT " && continue case "$MTPT" in /|/proc|/dev|/.dev|/dev/pts|/dev/shm|/proc/*|/sys|/var/run|/var/lock) continue ;; esac - case "$FSTYPE" in - proc|procfs|linprocfs|devfs|sysfs|usbfs|usbdevfs|devpts) + case "$FSTYPE" in + proc|procfs|linprocfs|devfs|sysfs|usbfs|usbdevfs|devpts|securityfs) continue ;; tmpfs) @@ -81,12 +83,15 @@ ;; *) REG_MTPTS="$REG_MTPTS $MTPT" + if echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV "; then + PROTECTED_MTPTS="$PROTECTED_MTPTS $MTPT " + fi ;; esac done exec 0<&9 9<&- - + # # Make sure tmpfs file systems are umounted before turning off # swap, to avoid running out of memory if the tmpfs filesystems @@ -140,19 +145,31 @@ REG_MTPTS="$(pioodl $REG_MTPTS)" if [ "$VERBOSE" = no ] then - log_action_begin_msg "Unmounting local filesystems" - umount -f -r -d $REG_MTPTS - log_action_end_msg $? + for MTPT in $REG_MTPTS; do + log_action_begin_msg "Unmounting local filesystem $MTPT" + if echo "PROTECTED_MTPTS" | grep -qs " $MTPT "; then + umount -r $MTPT + else + umount -f -r -d $MTPT + fi + log_action_end_msg $? + done else - log_action_msg "Will now unmount local filesystems" - umount -f -v -r -d $REG_MTPTS - ES=$? - if [ "$ES" = 0 ] - then - log_success_msg "Done unmounting local filesystems." - else - log_failure_msg "Unmounting local filesystems failed with error code ${ES}." - fi + for MTPT in $REG_MTPTS; do + log_action_begin_msg "Will now unmount local filesystem $MTPT" + if echo "PROTECTED_MTPTS" | grep -qs " $MTPT "; then + umount -r -v $MTPT + else + umount -f -r -d -v $MTPT + fi + ES=$? + if [ "$ES" = 0 ] + then + log_success_msg "Done unmounting local filesystem $MTPT." + else + log_failure_msg "Unmounting local filesystem $MTPT failed with error code ${ES}." + fi + done fi fi } ** Changed in: sysvinit (Ubuntu) Status: Fix Released => In Progress ** Changed in: wubi Status: Fix Released => In Progress -- umountfs must check whether a mountpoint contains a loopmounted root file https://bugs.launchpad.net/bugs/151579 You received this bug notification because you are a member of Ubuntu Bugs, which is the bug contact for Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs