如何克服“设备或资源繁忙”?

rip*_*234 326 lock files

我试图找到rm -rf一个文件夹,并得到“设备或资源繁忙”。

在 Windows 中,我会使用 LockHunter 来解决这个问题。什么是 linux 等价物?(请给出一个简单的“解锁此”方法作为答案,而不是像这样的完整文章。虽然它们很有用,但我目前只对 ASimpleMethodThatWorks™ 感兴趣)

cam*_*amh 327

您想要的工具是lsof,它代表list open files

它有很多选项,因此请查看手册页,但是如果您想查看某个目录下所有打开的文件:

lsof +D /path
Run Code Online (Sandbox Code Playgroud)

这将在 下的文件系统中递归/path,因此请注意在大型目录树上执行此操作。

一旦你知道哪些进程打开了文件,你就可以退出这些应用程序,或者使用kill(1)命令杀死它们。

  • 如果没有结果怎么办? (73认同)
  • @marines:检查是否在`/path` 下安装了另一个文件系统。这是隐藏“打开文件”的原因之一。 (31认同)
  • `lsof` 似乎对我没有任何作用:`lsof storage/logs/laravel.log` 没有返回任何内容,`lsof +D storage/logs/` 也没有返回任何内容。`umount` 响应为 `notmounted`。 (4认同)
  • 只是为了详细说明@camh 答案:使用`mount | grep <路径>`。这表明任何`/dev/<abc>` 都可能安装在`<path>` 上。使用 `sudo umount -lf /dev/<abc>` 然后尝试删除 `<path>`。为我工作。谢谢@camh (4认同)
  • lsof 命令直接到路径行不通。所以基本上需要进入路径位置然后运行lsof busy_file然后kill掉所有进程 (3认同)

小智 161

有时这是挂载问题的结果,所以我会卸载您尝试删除的文件系统或目录:

卸载/路径

  • 现在是四点半。谢谢伙计,你拯救了我的夜晚。好笑。在单行上-浪费了太多时间-.-' (15认同)
  • 就我而言,我无法卸载_因为_设备正忙。 (3认同)
  • 我加入这个社区只是为了标记这个答案! (2认同)

Bil*_*hor 17

fuser用于这种事情。它将列出哪个进程正在使用安装中的一个或多个文件。

  • `lsof` 不在我的路径中,而 `fuser` 在我的路径中,允许我找到要杀死的违规进程 ID,所以 +1+谢谢。 (2认同)

小智 17

这是解决方案:

  1. 进入目录并输入 ls -a
  2. 你会找到一个.xyz文件
  3. vi .xyz 并查看文件的内容是什么
  4. ps -ef | grep username
  5. 您将在第 8 列(最后一行)中看到 .xyz 内容
  6. kill -9 job_ids - 其中job_ids为第8列对应错误导致内容的第2列值
  7. 现在尝试删除文件夹或文件。

  • 知道这些神秘文件的来源会很有趣。 (6认同)

Cho*_*tom 15

我遇到了同样的问题,从@camh 推荐开始构建了一个单行:

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs -r kill -9
Run Code Online (Sandbox Code Playgroud)
  • awk 抓取PID。
  • tail 摆脱讨厌的第一个条目:“PID”。
  • xargskill -9在 PID 上执行。的-r/ --no-run-if-empty,防止kill命令失败,如果lsof没有返回任何PID。


use*_*531 12

我在具有 NFS 网络文件系统的服务器上经常遇到这种情况。我假设它与文件系统有关,因为文件通常命名为.nfs000000123089abcxyz.

我的典型解决方案是重命名或移动文件的父目录,然后在一两天后回来,该文件将被自动删除,此时我可以自由删除该目录。

这通常发生在我安装或编译软件库的目录中。


小智 7

如果您可以访问服务器,请尝试

从服务器中删除该目录

或者,执行umount并再次挂载umount -l如果在正常 umount 上遇到任何问题,请尝试:lazy umount。

我也遇到这个问题在哪里

lsof +D path: 没有输出

ps -ef: 没有提供相关信息


小智 7

从上面的 Prabhat 的问题中取笑,当我搁浅一个 encfs 进程时,我在 macos high sierra 中遇到了这个问题,重新启动解决了它,但是这个

ps -ef | grep name-of-busy-dir
Run Code Online (Sandbox Code Playgroud)

向我展示了进程和 PID(第二列)。

sudo kill -15 pid-here
Run Code Online (Sandbox Code Playgroud)

修复。


小智 5

当自动化测试创建 ramdisk 时,我遇到了这个问题。其他答案中建议的命令lsoffuser, 没有帮助。测试后,我尝试卸载它,然后删除该文件夹。我真的很困惑多年,因为我无法摆脱它 - 我一直收到“设备或资源繁忙”

偶然地,我发现了如何摆脱 ramdisk。我必须卸载它的次数与运行mount命令的次数相同,即 sudo umount path

由于它是使用自动化测试创建的,因此它被挂载了很多次,因此我无法通过在测试后简单地卸载一次来摆脱它。所以,在我手动卸载它很多次之后,它终于又变成了一个普通文件夹,我可以删除它。