sshfs设备正忙


30

我使用sshfs(版本2.8.4)安装了远程文件系统

sshfs -o allow_root joeuser@example.com: ./example

但是卸载失败

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

关于什么可能导致此错误以及如何解决该错误的任何想法?

Answers:


14

某些程序正在使用您要卸载的文件系统中的文件。它可能是为读取或写入而打开的文件,当前目录或其他一些晦涩的情况。甚至可能是由于文件系统上的目录是挂载点。

要调查,请运行lsof +f -- example。它将告知正在使用文件系统的进程。请自行决定是否关闭文件,杀死文件或推迟卸载操作。


奇怪的是,lsof没有显示gvfsd归档过程,该过程是从文件管理器GUI打开(和关闭?)归档文件后遗留下来的。因此,还要检查ps aux | grep gvfsd-archive
alexei

发出警告,提示lstat无法执行,并且信息可能不完整,并且未列出罪魁祸首。就我而言,我打开了一个终端,其中的工作目录位于已安装的终端中。
贾尼斯·埃默里斯(JānisElmeris)

36

我认为您想要一个懒惰的卸载:

sudo umount -l example

1
我认为您的建议不正确。根据手册页的懒惰Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore。因此,它将无法解决原始问题。同意@Gilles,lsof在这里应该有所帮助。

2
实际上,这对我有用。lsof找不到任何打开的文件,但可以umount -l工作。
gerrit 2014年

1
此解决方案也对我有用!

1
在sshfs中遇到了同样的问题,这对我也起作用。
奥伦

4

我只是遇到了这个问题,无法kill -9从已挂载的文件系统读取进程。kill -9即使在fusermount -zu /mount/pointumount -l /mount/point(有效)后仍无法正常工作。唯一起作用的是pkill -9 sshfs


1
fusermount -zu /mount/point为我工作。谢谢!
ostrokach

3

运行Ubuntu,将man fusermount介绍一个-z选项,该选项记录为“惰性卸载”。它似乎相关,但是需要确认,这是由另一个手册页给出的:fusermount(man.he.net),它说“惰性卸载(即使资源仍然很忙也可以工作)”。我们必须用它-u,在-z单独选项,会产生一个错误。我尝试了该-z选项,并且可以确认它能解决问题,但这恰恰看起来像是一个把戏:它到底能做什么?是否在目录不再繁忙时自动将其卸载?我不知道,没有记录,所以不安全。

因此,这是另一个选择,更详细,但更安全:尝试卸载,直到成功循环执行,直到需要的次数为止。

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

进度反馈很少,因此人们知道发生了什么并且不相信它挂了。

Shell脚本可以接受此选项。对于命令行交互,使用该-z选项更为方便,但您可能必须知道手册页没有对此文档进行记录,并且可能对其确切功能有所怀疑。


2

当终端窗口打开到sshfs共享上的目录时,我经常看到sshfs处于“设备繁忙”状态。退出终端或将目录更改为本地共享,然后运行fusermount -u解决了我的问题。



1

如果您已经确保尝试“常规”卸载之前没有进程仍在使用文件系统:

  • fuser -vm /mount/point 和/或
  • lsof /mount/point 找到他们,
  • 退出/ kill / do_something_with_them,这样他们就不再使用/mount/point了,

尝试:

  • pkill -KILL sshfs 然后
  • fusermount -u /mount/point

当我失去网络连接并且无法卸载无响应的sshfs挂载点时,它对我有所帮助。

另外,如果您希望sshfs在失去网络连接时自动卸载,并向sshfs 通知应用程序I / O错误(以免它们被无限卡住),请使用以下命令挂载:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

如果没有数据交换,ssh客户端将每15秒检查一次,是否可以从服务器获得响应。如果3次检查失败,它将断开并卸载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.