如何卸载以前是chroot的文件系统?


17

我正在使用救援实时系统(类似于实时CD)来修复Debian服务器的某些问题,例如:

# mkdir -p /mnt/rescue
# mount /dev/md2 /mnt/rescue
# mount --bind /dev /mnt/rescue/dev/
# mount --bind /proc /mnt/rescue/proc/
# mount --bind /sys /mnt/rescue/sys/

现在,我可以chroot到/mnt/rescue-但完成后,如何再次卸载文件系统?

umount: /mnt/rescue: target is busy.
    (In some cases useful info about processes that use
     the device is found by lsof(8) or fuser(1))

我猜这是因为devproc并且sys绑定到已挂载的文件系统。但是也无法卸载它们...


尝试卸载时会发生什么/mnt/rescue/proc?您确定还没有在其中运行进程chroot吗?

尝试lsof /mnt/rescue查看正在使用该文件夹的进程。
马丁·卡纳瓦尔

在关闭之前,您需要离开chrooted shell。
vonbrand

Answers:


14
  1. 您必须首先退出chroot会话,通常一个简单的exit操作即可:

    exit
    
  2. 然后卸载所有绑定目录:

    umount /mnt/rescue/dev/
    umount /mnt/rescue/proc/
    umount /mnt/rescue/sys/
    
  3. 然后:

    umount /mnt/rescue
    

如果您担心sync此处未使用它,请注意,它对是否可以卸载没有影响。无论如何,卸载都会刷新挂起的写操作(必须这样做,因为在卸载之后它们无处可去)。chroot进程的存在是无关紧要的(除非它阻止卸载)。在正常的系统操作中,同步没有明显的影响。仅当在未卸载的情况下物理断开设备连接或在安装设备时系统崩溃时,sync才有所不同。


1
谢谢,就是这样...我的错误是试图卸载/ sys /而不是/ mnt / rescue / sys / ...
2013年

2
sync完全没有用处。
吉尔斯(Gilles)'所以

@Gilles您能再详细说明为什么sync没用吗?它在当前内核中变得无用了吗?还是仅在这种情况下(救援模式)?我把它放在那儿,以防万一有大量挂起的磁盘写操作可以退出chroot后阻止umount。
John Siu

4
@JohnSiu sync对是否可以卸载没有影响。无论如何,卸载都将刷新挂起的写操作(必须这样做,因为卸载之后它们无处可去)。chroot进程的存在是无关紧要的(除非它可以防止卸载)。在正常的系统操作中,sync没有可观察到的效果。sync仅当设备在没有卸载的情况下物理断开连接或在安装设备时系统崩溃时,情况才有所不同。
吉尔(Gilles)'所以

@吉尔斯,我明白你的意思了。谢谢!!
John Siu

14

执行以下命令从文件系统层次结构中强制删除文件系统,并在不再繁忙时清除对文件系统的所有引用。

umount -lf /mnt/rescue

4

您得到“目标忙”的原因。出现此消息的原因是,挂载点(/mnt/rescue)在文件浏览器或终端会话中处于打开状态,并且还涉及到卸载过程的顺序(此处我的意思是dev/pts应在之前卸载dev/

好吧,为了成功卸载那里的所有fs:

  • 确保未在文件浏览器中打开安装点!
  • 退出chroot后,将目录从chroot dir(cd)移出!
  • 遵守命令的数量dev/pts => dev/ => proc/ => sys/

    sudo umount / mnt / rescue / dev / pts
    sudo umount / mnt / rescue / dev
    sudo umount / mnt / rescue / proc
    sudo umount / mnt / rescue / sys
    sudo umount / mnt / rescue


2

这是我schroot在Ubuntu 10.04以上版本上使用命令的方式:

# list all sessions:
schroot --list --all-sessions
# if the above command does not work, just type `mount`. The bind mount
# points with something like this in the mount path is the session name you want to get:
precise-a4aac8e0-663c-4fec-8fb2-16e4b06557e3 (<chroot_name>-<id>)

# now run this to properly end the session:
schroot -e -c precise-ca6c72e4-0e9f-4721-8a0e-cca359e2c2fd

0

退出chroot。在主机系统中,命令“ mount”将显示所有已安装的路径。(包括安装在chroot中的路径。)例如:

binfmt_misc on /home/user/projects/jsroot/proc/sys/fs/binfmt_misc

然后进入chroot环境。在chroot环境中,运行unmount可以依次卸载所有路径。(必须先卸载子路径,然后再卸载父路径。)

unmount /proc/sys/fs/binfmt_misc
unmount /proc/sys
unmount /proc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.