如何删除 .fuse_hidden* 文件?

如何删除 .fuse_hidden* 文件?

我有一台小型 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 并且我只有控制台。

任何建议都值得赞赏。

答案1

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

  • 登录到文件物理所在的系统。(无网络挂载)
  • 执行lsof dir-name/.fuse_hidden000bd8c100000185以找出哪些进程正在打开文件句柄。
  • 如果有意义的话,终止这些进程,或者弄清楚可以执行哪些步骤来“优雅地”释放打开的文件句柄而不终止进程。

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

当你遇到这种性质的问题时,这意味着操作系统出于某种原因决定不是从目录树中删除该文件:通常是因为它有理由相信它仍然需要被无法使用直接 inode 编号的东西访问。它最初可能看起来是遵从的,但在后台,操作系统会将其重命名为具有隐藏的点前缀,以便仍然可以通过某种形式的文件系统路径寻址来访问它。当链接计数达到零时,空间仍将被释放,但该对象将保留在目录中,直到链接消失。

答案2

感谢这些建议,但对我没什么用。但我找到了一个解决方案:我将外部 SSD 移到运行 Windows 的 PC 上。使用文件资源管理器(选中“隐藏项目”),我导航到目录.Trashes并能够删除该.fuser_hidden文件。

希望这可以帮助!

相关内容