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)
找到了答案。正如 @JeffSchaller 所建议的,链接存在问题。解决方案是运行 xfs_check 以查看链接是否不正确,然后运行 xfs_repair 来修复它们。
mount查看设备名称。我的是/dev/mapper/vg3-lv3umount /3xfs_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
xfs_repair /dev/mapper/vg3-lv3这表明链接已更正:
resetting inode 4392587948 nlinks from 3 to 2
resetting inode 12983188890 nlinks from 1 to 2
结果我有另一个链接不正确的索引节点。
感谢您的所有帮助,但使用 xfs_repair 的黑魔法,我的问题得到了解决。