umount - 设备正忙

umount - 设备正忙

有时当我想卸载设备时,例如

sudo umount /dev/loop0

我会收到消息

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

我通常通过关闭控制台窗口(在我的例子中是 xfce4-terminal)然后关闭umount.

这个问题意味着什么?有更聪明的解决方案吗?

答案1

这意味着某个进程在挂载点下有一个工作目录或一个打开的文件句柄。最好的办法是结束有问题的进程,更改其工作目录或在卸载之前关闭文件句柄。

不过 Linux 上还有一个替代方案。使用调用umount -l“惰性”卸载。文件系统仍将被挂载,但您将无法看到或使用它,除非已经在使用它的进程。当有问题的程序退出(通过任何方式)时,系统将“完成”卸载文件系统。

答案2

您还可以使用fuser已安装的文件系统来终止所有进程。

fuser -cuk /mnt

选项:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

请自行检查解释shell

答案3

我发现了一种可能会干扰卸载设备的情况,尽管这个问题已经很老了,但我将分享它作为答案。

如果您的计算机上托管有 NFS 共享,并且这些 NFS 共享中的任何一个都由您尝试卸载的设备支持,则您将必须停止共享它们(最好通过停止 NFS 服务来完成,例如sudo service nfs-kernel-server stop在最新版本的 Ubuntu 上) )。 NFS 服务器可能不会显示在 lsof 或 fusionr 中,这会使问题难以识别。

答案4

给定您的“通常解决方案”,这意味着您在控制台窗口中运行的 shell 将该设备上的文件系统中的一个目录作为其当前工作目录。

Linux 和一般的 Unix 系统,如果进程在该文件系统中拥有当前工作目录,则非常希望保持该文件系统的挂载状态。

您可以只cd在控制台窗口中使用来退出其中或之下的目录,/mnt而不是杀死控制台窗口以及在其中运行的 shell。

相关内容