我有一些samba驱动器,每天都有多个用户访问。我已经有了识别共享驱动器(从SQL表)的代码,并将它们挂载到所有用户都可以访问它们的特殊目录中。

我想知道,如果我从我的SQL表中删除驱动器(有效地使其脱机)如何,甚至是,有一种方法来卸载繁忙的设备?到目前为止,我发现任何形式的umount都不起作用。

忽略破坏数据的可能性-是否有可能卸载当前正在读取的设备?


当前回答

文件夹内的多个挂载

另一个原因可能是在你的主挂载文件夹中有一个副挂载,例如,在你为嵌入式设备使用SD卡后:

# mount /dev/sdb2 /mnt       # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot  # boot partition

卸载/mnt将失败:

# umount /mnt
umount: /mnt: target is busy.

首先我们必须卸载引导文件夹,然后卸载根目录:

# umount /mnt/boot
# umount /mnt

其他回答

以防有人和你一样。:

我无法卸载chroot监狱的挂载点(here /mnt)。

下面是我输入的命令:

$ umount /mnt
umount: /mnt: target is busy.
$ df -h | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
$ fuser -vm /mnt/
                     USER        PID ACCESS COMMAND
/mnt:                root     kernel mount /mnt
$ lsof +f -- /dev/mapper/VGTout-rootFS
$

您可以注意到,即使lsof也没有返回任何内容。

然后我有了这样的想法:

$ df -ah | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
dev                        2.9G     0  2.9G   0% /mnt/dev
$ umount /mnt/dev
$ umount /mnt
$ df -ah | grep /mnt
$

这里是一个/mnt/dev绑定到/dev,我创建它是为了能够从chroot监狱中修复我的系统。

在umounting之后,我的pb。现在解决了。

sudo fusermount -u -z <mounted path>

注意:不要对路径使用补全,因为这也会冻结终端。

文件夹内的多个挂载

另一个原因可能是在你的主挂载文件夹中有一个副挂载,例如,在你为嵌入式设备使用SD卡后:

# mount /dev/sdb2 /mnt       # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot  # boot partition

卸载/mnt将失败:

# umount /mnt
umount: /mnt: target is busy.

首先我们必须卸载引导文件夹,然后卸载根目录:

# umount /mnt/boot
# umount /mnt

众答:

如果该设备上有一个zfs池,至少当它是一个基于文件的池时,lsof将不会显示使用情况。但你可以简单地跑步

sudo zpool export mypool

然后卸载。

有人提到过,如果你正在使用终端,而你的当前目录在你想要卸载的路径中,你会得到错误。 作为补充,在这种情况下,你的lsof | grep path-to-be unmounted必须有以下输出:

bash ... path-to-be-unmounted