为什么在具有50Gb文件的外部存储驱动器(USB连接,类型为fuseblk)上rm变慢?


21

我一直在尝试使用rsnapshot进行备份,但是我发现它不可用。尽管它能够在几分钟内区分一个目录(50gb)并复制它(硬链接每个文件),而且我可以在大约半小时内cp整个目录,但删除它要花一个多小时。即使直接使用rm -rfv,我发现管理一个文件也可能需要半秒钟,而cpand link命令会立即完成。

为什么RM这么慢?有没有更快的方法来递归删除硬链接?对我来说,复制文件所花的时间比删除它所花的时间少,这对我来说没有任何意义。

我正在处理的文件系统是一个外部存储驱动器,它通过usb连接并键入fuseblk(我认为这是ntfs)。我的计算机正在运行ubuntu linux。

从顶部输出:

Cpu(s):  3.0%us,  1.5%sy,  0.0%ni, 54.8%id, 40.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8063700k total,  3602416k used,  4461284k free,   557604k buffers

1
挂载fuseblk并不意味着驱动器是NTFS,而是意味着它已作为FUSE块设备挂载。那几乎是任何东西。
克里斯·

1
@ChrisDown是的,但是我知道它是NTFS还是ext3,而且我很确定它是否是ext3,它可以通过不带参数的mount进行安装。
Benubird13年

1
这取决于目录中有多少个文件(您没有说多少),尤其是NTFS在目录中只有> 3K个文件的情况下速度变慢。几乎所有其他文件系统都具有更高的性能。查看SO / SE上所有其他有关文件数量对文件系统性能的影响的文章。
smci

Answers:


28

最终,无论您做什么,rm都必须unlink在要删除的每个文件上运行(即使您rm -r在父目录上调用)。如果要删除的文件很多,这可能需要很长时间。

运行时,有两个特别耗时的过程rm -r

  1. readdir, 其次是,
  2. 多次致电unlink

查找所有文件,然后遍历每个文件将其删除,这可能会花费很长时间。

如果您发现此“不可用”是因为它使目录在一段时间内不可用,请在删除它之前考虑移动父目录。这样可以释放该名称,以便程序再次使用,而不会给您带来太多不便。

假设文件系统确实 NTFS(您的问题尚不清楚),则NTFS删除大量文件的速度通常很慢。您可能会考虑使用更合适的文件系统来实现您的目的(如果您没有其他特殊需要,则最新的ext文件系统具有相当不错的删除性能)。通常,FUSE本身也不是特别快。您可能会考虑查看是否可以通过不使用FUSE的某种方式来执行此操作。


2
+1确实在很大程度上取决于确切的文件系统-许多文件在执行某些操作时往往表现得非常好,而与其他文件的执行速度却很慢(通常是用于文件创建,删除或数据访问)。
peterph 2013年

15

为什么RM这么慢?我不知道。但是我确实知道一种更快的方法:

mkdir blank
rsync -a --delete blank/ test/

更新:有关Serverfault的答案有一些解释。看起来rsync正在按特定顺序删除文件,这导致文件系统树保持平衡,并且不再需要重新平衡。rm只会删除文件,并在删除文件时引起很多重新平衡。这里有一些有关重新平衡的信息


1
您是否对此进行了基准测试并与之进行了比较rm -rfrsync仍然需要访问中的unlink()所有文件test/,这可能需要花费时间。
MattBianco 2014年

我还没有正式对其进行基准测试,但是在阅读了其他人的基准测试之后,我确实尝试了一下,而且差异很大。我再也找不到该帖子了,但是关于serverfault的答案有一个解释和来源,它提供了一个更快的删除程序。
rjmunro 2014年

但是最快的方法必须unlink(2)在目录上(并记得fsck稍后再做)...
MattBianco 2014年

事实就是事实。只需定时,它几乎快一倍。读完GNU coreutils rm代码后,它甚至没有让我感到奇怪……
Dominik George

1

好吧,我曾经与您有类似的问题。我发现您的“ wa”很高,您可以使用

iostat -x 1

检查磁盘利用率是否很高,如果很高,则意味着磁盘非常繁忙。检查是否有其他进程正在连续写入磁盘。

为了简单起见,请使用

vmstat 1

检查b是高还是r < b。那表明有问题。在您的情况下,我认为磁盘io是原始原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.