我已经安装/dev
并立即尝试卸载:
$ sudo mount -o rbind /dev m
$ sudo umount m
umount: /tmp/m: target is busy.
$ sudo lsof m
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kdevtmpfs 55 root cwd DIR 0,6 4420 2 m
kdevtmpfs 55 root rtd DIR 0,6 4420 2 m
我读过fuser
可以杀死访问挂载点的进程,但我想了解在这个简单的情况下发生了什么。根据lsof
输出,是否有人使用挂载点作为当前工作目录(cwd)?
我不想使用延迟卸载。
答案1
您曾经rbind
挂载文件系统和子挂载。为了卸载文件系统,必须首先卸载其子安装(其子安装也是如此,递归地)。但要小心!
mount --make-rslave m
umount -R m
如果没有第一个命令,您将面临卸载所有子安装的风险来源,由于安装传播。在这种情况下,这意味着 的所有子安装/dev
,这会对您正在运行的系统产生不良影响;-)。
基本上,挂载传播是一个巨大的陷阱,等着你掉进去:-)。如果默认情况下绑定安装禁用它,似乎会更好。
kdevtmpfs
是维护devtmpfs的内核线程。它不会阻止卸载 devtmpfs。这是因为内核线程在单独的安装上运行(如绑定安装)。你看不到原来的坐骑;它位于单独的安装命名空间中。如果您想尝试找出为什么kdevtmpfs
出现在 中lsof
,我不知道,也许可以将其视为一个单独的问题。