卸下一个繁忙的设备
我有一些每天都有多个用户访问的samba驱动器。 我已经有了识别共享驱动器(来自SQL表)的代码,并将它们挂载到一个特殊的目录中,所有的用户都可以访问它们。
我想知道,如果我从我的SQL表中删除一个驱动器(有效地使其脱机)如何,甚至是有办法卸载一个繁忙的设备? 到目前为止,我发现任何forms的umount都不起作用。
忽略破坏数据的可能性 – 是否可以卸载当前正在读取的设备?
是的,有一种方法可以立即分离繁忙的设备(即使它很繁忙,也无法强制卸载)。 您可以稍后清理:
umount -l /PATH/OF/BUSY-DEVICE umount -f /PATH/OF/BUSY-NFS(NETWORK-FILE-SYSTEM)
注 :这些命令可能会中断正在运行的进程,导致数据丢失或损坏打开的文件。 访问目标设备/ NFS文件的程序可能会抛出错误,或者在强制卸载后无法正常工作。
如果可能,让我们find/确定繁忙的进程,杀死进程,然后卸载桑巴共享,以尽量减less损害。
-
lsof | grep '/dev/sda1'
lsof | grep '/dev/sda1'
(或者挂载设备的目标进程) -
pkill target_process
(杀死繁忙进程,按名称|kill PID
|killall target_process
) -
umount /dev/sda1
(或任何挂载的设备)
请尝试以下操作,但在运行之前请注意, -k
标志将会终止正在运行的进程,从而保持设备繁忙。
杀死之前-i
标志使fuser
问。
fuser -kim /address # kill any processes accessing file unmount /address
退房umount2
:
Linux 2.1.116添加了umount2()系统调用,它像umount()一样卸载一个目标,但允许附加的标志来控制操作的行为:
MNT_FORCE(自Linux 2.1.116起)即使忙,也强制卸载。 (仅适用于NFS挂载)。MNT_DETACH(从Linux 2.4.11开始)执行懒卸载:使挂载点不可用于新访问,并在挂载点停止繁忙时实际执行卸载。 MNT_EXPIRE(从Linux 2.6.8开始)将挂载点标记为已过期。 如果挂载点当前不在使用中,则使用此标志对umount2()进行初始调用将失败,并显示错误EAGAIN,但会将挂载点标记为已过期。 只要不被任何进程访问,挂载点就会保持过期。 指定MNT_EXPIRE的第二个umount2()调用将卸载已过期的装入点。 该标志不能用MNT_FORCE或MNT_DETACH指定。 返回值
成功时返回零。 出错时,返回-1,并适当地设置errno。
使用exportfs -v检查导出的NFS文件系统。 如果find,请使用exportfs -d share:/目录删除。 这些不在fuser / lsof列表中显示,并且可以防止umount成功。
当您尝试卸载时,请确保您不在安装的设备中。