如何删除.fuse_hidden *文件?


34

我有一个小型Linux服务器(Debian Squeeze),它运行一个Samba服务器,该服务器配置为与某些Windows计算机共享一些文件夹。尝试从Windows删除目录之一时,我收到“无法删除文件夹”错误。

我试图从Linux的控制台中删除目录,但出现类似的错误:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

我列出了目录的内容,并找到了一个名为.fuse_hidden的文件,后跟一个十六进制数字(000bd8c100000185)。

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185

我试图删除.fuse_hidden文件,但是立即创建了一个新文件(请注意十六进制数字的更改)。

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186

我还尝试使用Midnight Commander删除文件,但没有成功。

到目前为止,我发现的其他解决方案涉及GUI,而我只有控制台。

任何建议表示赞赏。


3
保险丝守护程序似乎处于活动状态。删除文件之前将其停止。
ott--

在此期间,我已更改了评论。
ott--

那是我的第一个念头,但是我找不到停止的Fuse服务,而是重新启动了Samba,问题解决了,文件消失了。谢谢。
Lando

rm dir-name -rf
Hauke Laging

Answers:


52

这类似于删除另一个系统已在NFS挂载上打开的文件时发生的情况。问题在于,文件的“链接数”> 1时已将其从文件系统中删除,这意味着其他进程仍将其保持打开状态。

  • 登录到文件实际所在的系统。(无网络安装)
  • 执行lsof dir-name/.fuse_hidden000bd8c100000185以找出哪些进程使文件句柄保持打开状态。
  • 如果有必要,请终止这些进程,或者弄清楚可以执行哪些步骤以“优雅地”释放打开的文件句柄而不终止该进程。

通常,当您删除本地文件系统上另一个进程已打开的文件时,操作系统会遵照您的请求并将其从目录树中删除,但是操作系统仍会使用该树指向的索引节点。每次打开文件时,其“链接数”都会增加1,并且只有当该链接数达到零时才真正释放该空间。

当您遇到这种性质的问题时,这意味着操作系统出于某种原因决定从目录树中删除该文件:通常是因为它有理由认为仍然需要通过无法访问的内容来访问该文件。利用直接索引节点号。它最初似乎符合要求,但在后台操作系统将其重命名为具有隐藏的点前缀,因此仍可以通过某种形式的文件系统路径寻址来访问它。当链接计数为零时,该空间仍将被释放,但是该对象将保留在目录中,直到链接消失。


我猜想这与仍然使用该文件的某些服务有关(在本例中为Samba),我已经忘记了lsof。
Lando

引导我解决这个问题。lsof帮助我确定哪个进程仍在读取文件,从而可以删除所有内容!
ThanksForAllTheFish 2014年

我有问题,那lsoffuser不带任何进程该文件,有什么建议?
mxmlnkn

0

感谢您的建议,但对我没有任何帮助。但是我找到了解决方案:我将外部SSD移到运行Windows的PC上。使用文件浏览器(选中“隐藏的项目”),我导航到该.Trashes目录可以删除该.fuser_hidden文件。

希望这可以帮助!

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.