我有一个备份磁盘,它包含来自不同日期的同一台机器的数百个备份。备份是使用rsync和hardlink进行的,也就是说,如果文件不改变,备份脚本只会在旧备份中创建到文件的硬链接。因此,如果一个文件从未改变,那么基本上备份磁盘中只有一个副本,而是在每个目录中表示每个日期的备份(例如back-1、back-2、. back-n)的100个硬链接。如果我想将其细化,我会删除其中的一个子集,但不是全部删除。假设我想删除back_5、back_6、. back_10 (例如,在我真实的szenario中还有更多)。然后我试着通过以下方式来平分它:
echo back_5 back_6 back_10 | xargs -n 1 -P 0 rm -rf这需要好几个小时。有什么更快的方法吗?
发布于 2016-05-25 02:08:57
我看不出你用这种方式使用xargs的速度有多慢。我的手册上说,-P是进程的数量,-n是参数的数量。-P0没有特殊的值,所以这很可能被忽略(或者,如果遵守,您将得到零进程,这将解释24小时的无!)。-n1确保每个文件名都有一个exec(2),这是最慢的。
我怀疑把这项工作并行化会给你买很多钱。我会认为
$ echo filenames ... | xargs rm -rf 就够了。如果您愿意,可以尝试使用像-P4这样的值。通过不限制命令行参数的数量,可以最小化/bin/rm的调用,并让它通过磁盘缓存连续进行。
发布于 2016-05-25 09:51:02
df报告的数量不多,因为您主要是删除相对较小的目录。此外,根据文件系统的不同,对目录的更改和对文件的链接数量的更改将立即记录和/或同步到磁盘,因为它们对于故障恢复至关重要,因此速度更慢。
这实际上是你的链接效率的证明!
发布于 2016-05-25 10:02:50
根据我的经验,加快基于rsync+hardlink的备份的最佳方法是减少您拥有的文件数量。
大量的小文件在很大程度上减缓了rsync。
如果您能够以这样的方式组织您的数据,以便您的大部分文件,大部分是只读目录得到tar红色,您应该会看到在备份脚本中显着地加快速度。(使用像archivemount这样的工具,您就可以访问这些档案而不需要提取它们)。
并行备份脚本可能帮不了什么忙,甚至可能会减慢它的速度(可预测的磁盘访问是最优的)。
https://unix.stackexchange.com/questions/284350
复制相似问题