简短版本 : rm -rf mydir , mydir (recursion地)包含250万个文件,在大部分空闲的机器上需要大约12个小时。
更多信息 :大多数被删除的文件是硬链接到其他目录中的文件(被删除的目录实际上是由rsnapshot的最旧的备份; rm命令实际上是由rsnapshot )。 所以大多数目录条目被删除 – 文件内容本身并不多; 它在几十GB的顺序。
btrfs是罪魁祸首,我很不确定。 我记得在我开始使用btrfs之前备份也很慢,但我不确定缓慢是在删除。
该机是英特尔酷睿i5 2.67 GHz的4 GB的RAM。 它有两个SATA磁盘:一个有操作系统和其他东西,备份磁盘是一个1 TB的WDC WD1002FAEX-00Z3A0 。 主板是华硕P7P55D。
编辑 :该机是Debian wheezy用Linux 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)
编辑 :使用rsync -a --delete /some/empty/dir mydir大约需要6个小时。 与rm -rf相比有了明显的改进,但我认为还是太多了。 ( 说明为什么rsync比rm快 :“ost文件系统以btree格式存储它们的目录结构,删除文件的顺序[in]是重要的,当你执行的时候,需要避免重新平衡btree取消链接…. rsync -a --delete删除…按顺序删除“)
编辑 :我附加了另一个有220万个文件(recursion)在一个目录,但在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
[1]用hdparm -T /dev/sdX和hdparm -t /dev/sdX 。
[2]启动后立即运行find mydir -print|wc -l时间。
[3]在XFS磁盘上,这是用find的树走过的。 在BTRFS磁盘上,这是旧的测量(我不认为这是与树caching)。
btrfs似乎是一个问题。
那么这仍然是一个Btrfs问题,众所周知,与其他文件系统相比,删除许多小文件需要相当长的时间。
如果你不喜欢它,你可以等到上游修复它,或者移动到另一个更好的文件系统上。
你的主要错误是使用一个古老的内核(3.16,是的,当你发布的时候已经是古老的了)和btrfs。 Btrfs是一个仍处于重大发展阶段的文件系统,因此您应该始终使用最新,最好的内核版本来与改进联系。 如果你的发行版没有做backports,你可以自己做,也可以拧。
Btrfs在内核版本3.19中得到了许多性能上的改进 – 这是你在生产中应该使用的最低版本,你的内核版本3.16明显地不需要backports。
另外请记住,根据Chris Mason的说法,他现在确实认为Btrfs是稳定的,但是还没有准备好生产。
您可以重命名该目录,然后在后台进程中删除重命名的目录。 这不会加快删除操作。 但是,这将允许程序继续前进空白目录,而删除操作发生在侧面。
我不确定这是否会在你的用例中起作用。 这取决于程序无法继续,直到磁盘空闲(即它将执行一些繁重的磁盘操作)。 这取决于程序是否要用大量的数据填满磁盘。