如何删除空目录(btrfs 文件系统)?

如何删除空目录(btrfs 文件系统)?

我正在使用实验性btrfs文件系统。

我的目录如下所示:

 ls -la empytfolder
 total 4
 drwxr-xr-x 1 root root   0 19. Mär 14:00 .
 drwxr-xr-x 1 root root 298 19. Mär 13:59 ..

我尝试使用删除它,rm -rf emptyfolder但出现错误rm: cannot remove directory: directory not empty?如何删除/删除我的空文件夹?为什么这个文件夹里有4个文件?我正在尝试以 root 用户身份删除它。我的文件系统是 btrfs。

stat emptyfolder给我:

 Datei: „emptyfolder“
 Größe: 0           Blöcke: 0          EA Block: 4096   Verzeichnis
 Gerät: 21h/33d Inode: 256         Verknüpfungen: 1
 Zugriff: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
 Zugriff    : 2012-03-19 14:00:28.205205566 +0100
 Modifiziert: 2012-03-19 14:00:23.925025572 +0100
 Geändert   : 2012-03-19 14:00:23.925025572 +0100
 Geburt    : -

我的系统时钟有一些问题。有时会显示错误的时间。

$ lsof +D emptyfolder
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/user
/.gvfs Output information may be incomplete.

gvfs-fuse-daemon 是什么?我怎样才能删除它?

我尝试过 fusions -uv /dev/disk 但无济于事。没有任何进程访问该文件夹。我已将文件夹移至 tmp。

答案1

Btrfs 常见问题解答 - 我无法删除空目录:

第一个案例, 如果你得到:

rmdir: failed to remove ‘emptydir’: Operation not permitted 

那么这可能是因为“emptydir”实际上是一个子卷。

您可以通过以下方式检查是否属于这种情况:

btrfs subvolume list -a /mountpoint

要删除子卷,您必须运行:

btrfs subvolume delete emptydir

第二种情况, 如果你得到:

rmdir: failed to remove ‘emptydir’: Directory not empty 

那么你可能有一个 i_size 非零的空目录。

您可以通过以下方式检查是否属于这种情况:

stat -c %s emptydir
3196         <-- unexpected non-zero size

在该(已卸载的)文件系统上运行btrfs check将确认问题并列出其他有问题的目录(如果有)。

您将得到类似的输出(摘录):

checking fs roots
root 5 inode 557772 errors 200, dir isize wrong
root 266 inode 24021 errors 200, dir isize wrong ...

btrfs check --repair如果您运行足够新的 btrfs-progs 版本,此类错误应该可以修复。

请注意,btrfs check --repair不应轻易使用,因为在某些情况下它可能会使问题变得更糟,而不是解决任何问题。

答案2

我在使用 btrfs 分区时也遇到过类似的症状

btrfs check --repair /dev/sdXY

为我解决了问题。发现的错误的形式如下:

root X inode Y errors 200, dir isize wrong

root X inode Y errors 80, file extent overlap

即使修复后,第二种错误仍然存​​在,这让我开始担心。

答案3

ReadyNAS 机器上的孤立目录存在此问题。共享在 GUI 中不再可见,但 /data 下的目录到目前为止仍然存在。所以我想删除这个文件夹,但 rmdir 不起作用。

我逐个快照地删除了快照

cd /data
btrfs subvolume delete ./VirtualBox1/.snapshots/309/snapshot
...
btrfs subvolume delete ./VirtualBox1/.snapshots/2/snapshot
btrfs subvolume delete ./VirtualBox1/.snapshots/1/snapshot
btrfs subvolume delete ./VirtualBox1/.snapshots

删除所有快照后,我能够删除“文件夹”本身

btrfs subvolume delete ./VirtualBox1

答案4

尝试cd从空目录中运行并lsof +D /path/to/emptydir查看它打开了什么。根据目录的内容及其使用方式,也许某些东西正在非常快地打开和关闭目录,并且当运行 ls 时目录中没有任何内容但运行时确实有内容时,您恰好会捕获它rm -fr emptydir。在这种情况下应该没有什么区别,但也尝试运行rmdir emptydir.

输出顶部的总数ls(我猜 insgesamt 意味着总数?)确实表示一个空目录。

我认为了解文件系统类型也可能有帮助。您可能还想运行fsck它,看看是否有帮助。

相关内容