Linux:在执行umount时哪个进程导致"设备忙"?

fly*_*ire 71 linux shell mount device umount

Linux:在执行umount时哪个进程导致"设备忙"?

Mar*_*usQ 98

查看lsof命令(列出打开的文件) - 它可以告诉您哪些进程正在保持打开状态.有时这很棘手,但往往是sudo lsof | grep (your device name here)为你做的那么简单.

  • 在我的情况下,grepping设备名称没有显示任何结果.然而,掠过设备实际安装到的路径; 最后,通过杀死该过程,我能够成功卸载设备. (12认同)
  • 在尝试卸下它时,你可能正朝着那个方向前进. (4认同)
  • `lsof/mountpoint`而不是`lsof/mountpoint /` (3认同)
  • [使用“lsof +f /dev/device”而不是挂载点有一个优点](/sf/answers/3204752841/)。对于具有匿名 inode 的内核进程,请参阅相同的内容,即使在该列表中也可能不会显示。 (2认同)

alv*_*tar 43

以防万一...有时会发生从终端调用umount,而当前目录属于挂载的文件系统.

  • 也有我.如果lsof列出"bash"进程(debian),你可以认识到这一点 (4认同)

Ben*_*Ben 23

您应该使用该fuser /dev/cdrom命令.

例如./dev/cdrom将使用返回进程的pid -k.

如果您尝试卸载,可以使用该man fuser开关终止该过程(请参阅参考资料fuser /dev/cdrom).

  • 仅供参考,`fuser` 有时会显示 `lsof` 没有的东西,反之亦然。所以你不能只做一个或另一个! (2认同)

小智 18

使用"losetup -a"检查映射到文件系统上文件的开环设备.它们不会出现lsof或fuser.


Mal*_*ous 15

还检查一下/etc/exports.如果您是通过NFS挂载点内出口的路径,它会试图卸载时,给这个错误,没有什么会出现fuserlsof.


mas*_*mas 9

lsof +f -- /mountpoint
Run Code Online (Sandbox Code Playgroud)

(列出使用挂载在/ mountpoint上的文件的进程.特别适用于查找使用已安装的USB记忆棒或CD/DVD的进程.


Ano*_*ous 7

lsof和fuser确实是找到保持某个文件打开的进程的两种方法.如果您只是想让umount成功,那么您应该调查它的-f和-l选项.

  • 我最近遇到了这个问题,fuser 或 lsof 都不会显示使用该设备的任何内容,但 umount -l 允许我卸载它。至少,它似乎是(-l 表示延迟卸载,立即从文件系统层次结构中分离文件系统,并在文件系统不再繁忙时立即清除对文件系统的所有引用。) (2认同)

Tom*_*ale 7

打开文件

打开文件的进程是常见的罪魁祸首。显示它们:

lsof +f -- <mountpoint or device>
Run Code Online (Sandbox Code Playgroud)

/dev/<device>使用而不是使用有一个优点 /mountpoint:挂载点将在 后消失umount -l,或者它可能被覆盖的挂载隐藏。

fuser也可以使用,但我认为lsof有一个更有用的输出。然而,fuser当涉及到杀死导致你的戏剧性的进程时,它很有用,这样你就可以继续你的生活。

列出文件<mountpoint>(请参阅上面的警告):

fuser -vmM <mountpoint>
Run Code Online (Sandbox Code Playgroud)

仅以交互方式终止打开文件以供写入的进程:

fuser -vmMkiw <mountpoint>
Run Code Online (Sandbox Code Playgroud)

以只读方式重新挂载 ( mount -o remount,ro <mountpoint>) 后,可以安全地终止所有剩余进程:

fuser -vmMk <mountpoint>
Run Code Online (Sandbox Code Playgroud)

挂载点

罪魁祸首可能是内核本身。在您尝试安装的文件系统上安装另一个文件系统umount会造成麻烦。检查:

mount | grep <mountpoint>/
Run Code Online (Sandbox Code Playgroud)

对于环回安装,还请检查以下输出:

losetup -la
Run Code Online (Sandbox Code Playgroud)

匿名索引节点 (Linux)

匿名 inode可以通过以下方式创建:

  • 临时文件(openO_TMPFILE
  • inotify手表
  • [事件fd]
  • [事件调查]
  • [计时器]

这些是最难以捉摸的神奇宝贝类型,并出现在lsofTYPE专栏中(手册页a_inode中未记录 )。lsof

它们不会出现在 中lsof +f -- /dev/<device>,因此您需要:

lsof | grep a_inode
Run Code Online (Sandbox Code Playgroud)

要杀死持有匿名 inode 的进程,请参阅:列出当前 inotify 监视(路径名,PID)


小智 5

这就是为什么存在“ fuser -m / mount / point”的原因。

顺便说一句,我不认为“ fuser”或“ lsof”将指示内核模块何时拥有资源,尽管我通常没有这个问题。

  • 但这正是我似乎遇到的问题。一个如何调试呢? (8认同)