删除文件需要很长时间

Ant*_*des 11 linux btrfs

短版rm -rf mydirmydir(递归),含2.5万个文件,需要一个闲置的大部分机上约12小时。

更多信息:大多数被删除的文件是其他目录中文件的硬链接(被删除的目录实际上是由 制作的最旧的备份rsnapshotrm命令实际上是由 给出的rsnapshot)。所以主要是目录条目被删除——文件内容本身并不多;它大约是几十 GB。

我远不能确定那btrfs是罪魁祸首。我记得在我开始使用之前备份也很慢btrfs,但我不确定慢是在删除。

该机器是具有 4 GB RAM 的 Intel Core i5 2.67 GHz。它有两个 SATA 磁盘:一个有操作系统和其他一些东西,备份磁盘是 1 TB WDC WD1002FAEX-00Z3A0。主板是华硕P7P55D。

编辑:该机器是带有 Linux 的 Debian wheezy 3.16.3-2~bpo70+1。这是文件系统的挂载方式:

root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Run Code Online (Sandbox Code Playgroud)

编辑:使用rsync -a --delete /some/empty/dir mydir大约需要 6 个小时。一个显着的改进rm -rf,但我认为还是太多了。(解释为什么rsyncrm:“[M]大多数文件系统以 btree 格式存储它们的目录结构,删除文件的顺序 [in] 很重要。执行取消链接时需要避免重新平衡 btree .... rsync -a --delete... 按顺序删除")

编辑:我附加了另一个磁盘,该磁盘在目录中具有 220 万个文件(递归),但在 XFS 上。以下是一些比较结果:

                  On the XFS disk      On the BTRFS disk
Cached reads[1]       10 GB/s               10 GB/s
Buffered reads[1]     80 MB/s              115 MB/s
Walk tree[2]         11 minutes            43 minutes
rm -rf mydir[3]       7 minutes            12 hours
Run Code Online (Sandbox Code Playgroud)

[1]hdparm -T /dev/sdXhdparm -t /dev/sdX
[2]find mydir -print|wc -l启动后立即运行所用的时间。
[3] 在 XFS 磁盘上,这是在使用find. 在 BTRFS 磁盘上,它是旧的测量值(我不认为它与缓存的树有关)。

它似乎是一个问题btrfs

Nat*_*han 1

您可以重命名该目录,然后在后台进程中删除重命名的目录。这不会加快删除操作的速度。但是,这将允许程序在删除操作发生的同时继续使用空目录前进。

我不确定这是否适用于您的用例。这取决于程序是否无法继续,直到磁盘空闲(即它将执行一些繁重的磁盘操作)。这取决于程序是否会用大量数据填满磁盘。