Ben*_*ird 22 performance external-hdd rm
我一直在尝试使用rsnapshot进行备份,但我发现它无法使用。虽然它能够在几分钟内区分一个目录 (50gb) 并复制它(硬链接每个文件),我可以在大约半小时内 cp 整个目录,但删除它需要一个多小时。即使直接使用rm -rfv
,我发现 rm 单个文件最多可能需要半秒钟,而cp
和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
Run Code Online (Sandbox Code Playgroud)
Chr*_*own 28
最终,无论您做什么,rm
都必须unlink
在要删除的每个文件上运行(即使您调用rm -r
父目录)。如果要删除大量文件,这可能需要很长时间。
运行时有两个特别耗时的过程rm -r
:
readdir
, 其次是, unlink
.查找所有文件,然后检查每个文件以将其删除,这可能需要非常非常长的时间。
如果您发现此“无法使用”,因为它会使目录在一段时间内无法使用,请考虑在删除它之前移动父目录。这将释放该名称供程序再次使用,而不会造成太多不便。
假设文件系统确实是NTFS(从您的问题中不清楚),NTFS 在删除大量文件时通常很慢。您可能会考虑使用更合适的文件系统来满足您的目的(如果您没有任何其他特殊需求,则较新的 ext 文件系统具有相当好的删除性能)。一般来说,FUSE 本身也不是特别快。您可能会考虑看看是否可以以某种不使用 FUSE 的方式执行此操作。
rjm*_*nro 17
为什么 rm 这么慢?我不知道。但我知道一个更快的方法:
mkdir blank
rsync -a --delete blank/ test/
Run Code Online (Sandbox Code Playgroud)
更新:Serverfault 上的这个答案有一些解释。看起来 rsync 正在以特定顺序删除文件,从而导致文件系统树保持平衡,并且永远不需要重新平衡。rm 只会删除文件并在删除文件时导致大量重新平衡。这里有一些关于重新平衡的信息。