短版:rm -rf mydir与mydir(递归),含2.5万个文件,需要一个闲置的大部分机上约12小时。
更多信息:大多数被删除的文件是其他目录中文件的硬链接(被删除的目录实际上是由 制作的最旧的备份rsnapshot;rm命令实际上是由 给出的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,但我认为还是太多了。(解释为什么rsync比rm:“[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/sdX与hdparm -t /dev/sdX。
[2]find mydir -print|wc -l启动后立即运行所用的时间。
[3] 在 XFS 磁盘上,这是在使用find. 在 BTRFS 磁盘上,它是旧的测量值(我不认为它与缓存的树有关)。
它似乎是一个问题btrfs。
您可以重命名该目录,然后在后台进程中删除重命名的目录。这不会加快删除操作的速度。但是,这将允许程序在删除操作发生的同时继续使用空目录前进。
我不确定这是否适用于您的用例。这取决于程序是否无法继续,直到磁盘空闲(即它将执行一些繁重的磁盘操作)。这取决于程序是否会用大量数据填满磁盘。