Linux 如何卸载忙碌的设备
我有一些samba驱动器,每天都有多个用户访问。我已经有了识别共享驱动器(来自SQL表)的代码,并将它们装载到一个所有用户都可以访问的特殊目录中 我想知道,如果我从我的SQL表中删除了一个驱动器(实际上是使其脱机),如何,甚至是否有办法卸载一个繁忙的设备?到目前为止,我发现任何形式的Linux 如何卸载忙碌的设备,linux,umount,Linux,Umount,我有一些samba驱动器,每天都有多个用户访问。我已经有了识别共享驱动器(来自SQL表)的代码,并将它们装载到一个所有用户都可以访问的特殊目录中 我想知道,如果我从我的SQL表中删除了一个驱动器(实际上是使其脱机),如何,甚至是否有办法卸载一个繁忙的设备?到目前为止,我发现任何形式的umount都不起作用 忽略破坏数据的可能性-是否可以卸载当前正在读取的设备 查看: Linux 2.1.116添加了umount2()系统调用,与umount()一样, 卸载目标,但允许附加标志控制 操作行为: M
umount
都不起作用
忽略破坏数据的可能性-是否可以卸载当前正在读取的设备 查看:
Linux 2.1.116添加了umount2()系统调用,与umount()一样,
卸载目标,但允许附加标志控制
操作行为:
MNT_FORCE(自Linux 2.1.116以来)强制卸载,即使很忙。(只适用于
NFS挂载。)MNT_DETACH(自Linux 2.4.11以来)执行延迟卸载:
使装载点不可用于新的访问
在装载点停止忙碌时执行卸载。MNT_到期
(自Linux 2.6.8起)将装载点标记为过期。如果安装点
当前未使用,则使用此
标志失败,错误为EAGAIN,但将装载点标记为
期满。只要装载点未被访问,它就会一直过期
通过任何过程。第二个umount2()调用指定MNT_EXPIRE unmounts
已过期的装载点。此标志不能与任何一个一起指定
MNT_强制或MNT_分离。返回值
成功时,返回零。出现错误时,返回-1,返回errno
适当地设置
如果可能,让我们定位/识别繁忙的进程,杀死该进程,然后
卸载
samba共享/驱动器,以尽量减少损坏:
(或任何安装的设备)lsof | grep'
(按名称终止繁忙进程|pkill target_进程
|终止PID
)终止所有目标_进程
(或安装的任何设备)umount/dev/sda1
- 是!!有一种方法可以立即分离繁忙的设备,即使它繁忙且无法强制卸载。您可以在以后清理所有文件:
umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)
注意/小心
umount
命令。首先,您可以使用pwd
命令验证当前目录路径(不应为装入的路径),然后使用cd
命令退出装入的路径-稍后使用上述命令将其卸载使用exportfs-v检查导出的NFS文件系统。如果找到,请使用exportfs-d share:/directory删除。这些不会显示在fuser/lsof列表中,并且会阻止umount成功。尝试以下操作,但在运行之前请注意,
-k
标志将终止任何使设备忙碌的运行进程。
-i
标志使fuser
在终止前询问
fuser -kim /address # kill any processes accessing file
unmount /address
当您尝试umount时,请确保您没有仍在已安装的设备中。另一种可行的方法是编辑
/etc/fstab
,添加noauto
标志并重新启动机器。设备将不会安装,当您完成任何操作后,请删除标志并重新启动。避免umount-l
在撰写本文时,得票最多的答案建议使用umount-l
。总之:
- 它实际上并没有卸载设备,只是从名称空间中删除了文件系统。可以继续写入打开的文件
- 它可能导致btrfs文件系统损坏
umount-l
的有用行为是通过绝对路径名隐藏文件系统,从而最大限度地减少moutpoint的进一步使用
通过在要卸载的目录上装载具有权限000
的空目录,可以实现相同的行为
然后,对装载点下方的文件名的任何新访问都将以零权限命中新覆盖的目录-从而阻止卸载的新阻止程序
首先尝试重新安装,ro
要解锁的主要卸载成就是只读重新装载。当您获得重新装载,ro
徽章时,您知道:
挂载-o重新挂载,ro/dev/device
,所以请直接尝试。你可能觉得很幸运,朋克
如果你运气不好,只关注:
lsof+f--/dev/|awk'NR==1 | |$4~/[0-9]+[uw-]/'
然后,您应该能够以只读方式重新安装设备,并确保状态一致
如果此时无法重新安装只读,请调查列出的其他一些可能原因
只读重新装载有人提到,如果您正在使用终端,并且当前目录位于要卸载的路径内,则会出现错误。
作为补充,在这种情况下,要卸载的
lsof | grep路径必须具有以下输出:
bash ... path-to-be-unmounted
小众回答:
如果该设备上有zfs池,至少当它是基于文件的池时,lsof
不会显示使用情况。但你可以直接跑
sudo zpool导出mypool
然后卸载。在文件夹中多次装载
另一个原因可能是主装载文件夹中存在辅助装载,例如,在为嵌入式设备使用SD卡之后:<
bash ... path-to-be-unmounted
# mount /dev/sdb2 /mnt # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot # boot partition
# umount /mnt
umount: /mnt: target is busy.
# umount /mnt/boot
# umount /mnt
$ sudo lsof | grep /dev/sda1
$ sudo lsof | grep /media