sudo rm -rf 在 root 拥有的空目录上返回“无法删除目录”

har*_*lle 8 linux directory rm

我的 Debian 系统上有一个目录。目录是:

root@debian:/3/20150626# stat 00
File: `00'
Size: 6             Blocks: 0          IO Block: 4096   directory
Device: fe00h/65024d    Inode: 4392587948  Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-06-25 20:00:00.086150791 -0400
Modify: 2015-07-07 12:39:04.174903234 -0400
Change: 2015-07-07 12:39:04.174903234 -0400
Birth: -
Run Code Online (Sandbox Code Playgroud)

该目录为空:

root@debian:/3/20150626# ls -al 00
total 0
drwxr-xr-x 3 root root  6 Jul  7 12:39 .
drwxr-xr-x 3 root root 23 Jul  7 12:56 ..
Run Code Online (Sandbox Code Playgroud)

但我的系统不这么认为:

root@debian:/3/20150626# rm -rf 00
rm: cannot remove `00': Directory not empty
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,我也无法找到前进的方法。任何人都可以提供帮助吗?

我之前找到的问题都没有解决这个特定问题。但是,为了解决我在类似帖子中看到的一些问题:

a.) 该文件夹是由一个正在运行的进程创建的,该进程之前创建了许多文件夹,并且这些文件夹之前已被删除多次。这个特定的人陷入了困境。

b.) 现在不应有任何内容写入此目录。我检查了很多次,ls -al输出总是什么都不返回。

c.) 我检查了 lsof 并且没有打开这个目录的任何东西:

root@debian:/3/20150626# lsof 00
root@debian:/3/20150626# 
Run Code Online (Sandbox Code Playgroud)

d.) rm没有别名到其他任何东西。它非常接近库存 Debian……对任何核心 Bash 程序(如rm等)都没有什么特别之处。

e.) 允许重命名但仍无法删除:

root@debian:/3/20150626# mv 00 delete_me
root@debian:/3/20150626# ls -al
total 0
drwxr-xr-x 3 root root  30 Jul  7 13:45 .
drwxr-xr-x 7 root root 105 Jul  7 12:57 ..
drwxr-xr-x 3 root root   6 Jul  7 12:39 delete_me
root@debian:/3/20150626# rm -rf delete_me
rm: cannot remove `delete_me': Directory not empty
root@debian:/3/20150626# ls -al delete_me/
total 0
drwxr-xr-x 3 root root  6 Jul  7 12:39 .
drwxr-xr-x 3 root root 30 Jul  7 13:45 ..
Run Code Online (Sandbox Code Playgroud)

**注意,以下称为“delete_me”,因为我重命名了它,我只是顺其自然。

f.) 这是我运行时返回的唯一目录find

root@debian:/3/20150626# find / -type d -name delete_me
/3/20150626/delete_me
root@debian:/3/20150626# find delete_me
delete_me
Run Code Online (Sandbox Code Playgroud)

g.) lsattr 什么也没显示:

root@debian:/3/20150626# lsattr
---------------- ./delete_me
Run Code Online (Sandbox Code Playgroud)

har*_*lle 1

找到了答案。正如 @JeffSchaller 所建议的,链接存在问题。解决方案是运行 xfs_check 以查看链接是否不正确,然后运行 ​​xfs_repair 来修复它们。

  1. 运行mount查看设备名称。我的是/dev/mapper/vg3-lv3
  2. umount /3
  3. xfs_check /dev/mapper/vg3-lv3返回以下内容:

    link count mismatch for inode 4392587948 (name ?), nlink 3, counted 2

    link count mismatch for inode 12983188890 (name ?), nlink 1, counted 2

  4. xfs_repair /dev/mapper/vg3-lv3这表明链接已更正:

    resetting inode 4392587948 nlinks from 3 to 2

    resetting inode 12983188890 nlinks from 1 to 2

结果我有另一个链接不正确的索引节点。

感谢您的所有帮助,但使用 xfs_repair 的黑魔法,我的问题得到了解决。