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


229

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

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


5
谢谢,这很方便-我是从Linux到Windows,正在寻找与lsof类似的产品-LockHunter。
索尼娅·汉密尔顿

3
我勒个去?Unix的并不会阻止您删除打开的文件,像Windows一样。这就是为什么您可以通过运行来删除整个系统的原因rm -rf /……它将愉快地删除每个文件,包括/ bin / rm。
psusi 2014年

1
@psusi,那是不正确的。您或者信息来源很差,或者只是在编造东西。像Windows一样,Linux具有文件和设备锁定功能。但是,这有点坏。0pointer.de/blog/projects/locking.html
foob​​arbecue 2015年

1
@foobarbecue,通常这些只是顾问锁,手册页至少似乎表明它们仅用于读/写,而不用于取消链接。
psusi 2015年

Answers:


232

您需要的工具是lsof代表打开文件列表的工具

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

lsof +D /path

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

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


46
如果没有结果怎么办?
海军陆战队

22
@marines:检查是否在下面安装了另一个文件系统/path。这是隐藏的“打开文件”的原因之一。
camh 2014年

2
lsof命令直接到路径不起作用。因此,基本上需要进入路径位置,然后运行lsof busy_file,然后
终止

4
lsof似乎对我无能为力:lsof storage/logs/laravel.log什么也没退,所以也没做lsof +D storage/logs/umount回应not mounted
瑞安

1
只是为了详细说明@camh答案:使用mount | grep <path>。这表明任何/dev/<abc>可能已安装在上<path>。使用sudo umount -lf /dev/<abc>,然后尝试将其删除<path>。为我工作。感谢@camh
Vikas Goel

107

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

umount /路径


5
四分之一到四分之一。谢谢你,我救了我一晚。搞笑 在一行上-浪费了很多时间
-.

1
我的问题是一个挂载为/ dev / mapper / vg00-root的日志目录
Spikolynn

1
帮助我摆脱绕线机的类似堵塞。
2016年

1
就我而言,詹金斯没有在任务中止后卸载chroot目录
zarkone

1
就我而言,使用ubuntu桌面进行卸载是可行的!!感谢
JRichardsz

14

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


fuser仅在要卸载文件系统时才有帮助。这里的问题是找到正在使用特定文件的文件。
Gilles

@Gilles:也适用于文件。
BillThor 2011年

抱歉,错误的异议:fuser此处无济于事,因为问题在于在目录树中找到所有打开的文件。您可以告诉lsof显示所有文件和过滤器,或者使其递归;fuser没有这种模式,需要在每个文件上调用。
吉尔斯

@Giles:fuser作品将列出。试试看fuser /var/log/*,如果有任何日志打开,它将告诉哪些日志以及谁打开了。如果使用简单的通配符,find不管有没有,都不会起作用xargs
BillThor

1
lsof当时不在我的路上fuser,允许我找到要杀死的有问题的进程ID,因此+1+表示感谢。
stevesliva,2015年

12

解决方法如下:

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

4
知道那些神秘文件来自何处会很有趣。
约翰·史密斯

9

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

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9

awk命令获取PIDS。该tail命令将删除讨厌的第一个条目:“ PID”。我用-9杀了,其他人可能有更安全的选择。


1
为了使它更通用,您可以在当前目录中使用./代替log /
user2589273 17-11-22

好点,@ user2589273。更新。
Choylton B. Higginbottom

5

当自动测试创建虚拟磁盘时,我遇到了这个问题。其他答案lsof和中建议的命令fuser没有帮助。测试后,我尝试将其卸载,然后删除该文件夹。很久以来我一直感到困惑,因为我无法摆脱它-我一直都在“设备或资源繁忙”

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

由于它是使用自动测试创建的,因此它已多次安装,因此为什么我不能在测试后简单地将其卸载一次就摆脱掉它。因此,在我多次手动卸载它之后,它终于又变成了常规文件夹,可以删除它。

希望这可以帮助遇到此问题的其他人!


5

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

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

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


4

绕过Prabhat的上述问题,当我搁浅一个encfs进程,重新启动后就解决了,在macos high sierra中存在此问题,但这

ps -ef | grep name-of-busy-dir

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

sudo kill -15 pid-here

修复。


这也对我有用。什么-15
奥卡

3

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

从服务器删除该目录

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

我也有这个问题

lsof +D path :无输出

ps -ef :未提供任何相关信息

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.