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

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

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


当前回答

如果可能的话,让我们定位/识别繁忙的进程,终止该进程,然后卸载samba共享/驱动器,以最大限度地减少损害:

Lsof | grep '< /dev/sda1的挂载点>'(或任何被挂载的设备) kill target_process(将busy proc.按名称| kill PID | killall target_process) Umount /dev/sda1(或任何已挂载的设备)

其他回答

众答:

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

sudo zpool export mypool

然后卸载。

在我的例子中,我无法卸载挂载到AFP共享目录的分区。(分享到Apple bonjour/avahi mdns世界) 我把服务器上的所有登录都移动到它们的主目录;我把所有远程连接的mac电脑都移到了其他目录下。 即使使用umount -f,我仍然无法卸载分区 所以我重启了服务器上的netatalk守护进程。 (/etc/netatalk/afp.conf中有共享分配) 日志含义重启netatalk后,不带-f参数,umount成功。

使用exportfs -v检查导出的NFS文件系统。如果发现,使用exportfs -d share:/directory删除。这些不会在fuser/lsof列表中显示,并且会阻止umount成功。

是的! !有一种方法可以立即分离繁忙的设备-即使它繁忙且不能强制卸载。你可以稍后清理:

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)

注意/警告

这些命令可能会中断正在运行的进程,导致数据丢失或损坏打开的文件。在强制卸载后,访问目标DEVICE/NFS文件的程序可能会抛出错误或无法正常工作。 不要在挂载路径(文件夹/驱动器/设备)内部执行以上umount命令。首先,您可以使用pwd命令验证您的当前目录路径(不应该是挂载路径),然后使用cd命令退出挂载路径-稍后使用上述命令卸载它。

如果可能的话,让我们定位/识别繁忙的进程,终止该进程,然后卸载samba共享/驱动器,以最大限度地减少损害:

Lsof | grep '< /dev/sda1的挂载点>'(或任何被挂载的设备) kill target_process(将busy proc.按名称| kill PID | killall target_process) Umount /dev/sda1(或任何已挂载的设备)