精简使用硬链接的备份的最有效方法

stu*_*ent 5 command-line filesystems backup parallelism

我有一个备份磁盘,其中包含来自不同日期的同一台机器的数百个备份。备份是使用 rsync 和硬链接进行的,即如果文件没有更改备份脚本,则只是在旧备份中创建到文件的硬链接。因此,如果一个文件永远不会改变,你有本质上的备份磁盘一个副本,但说100个硬连接到它代表每个日期的备份每个目录(比如back-1back-2... back-n)。如果我想精简它,我会删除其中的一个子集,但不是全部。假设我想删除back_5, back_6, ... back_10(仅举个例子,在我真正的 szenario 中还有更多)。然后我尝试通过以下方式对其进行并行化:

echo back_5 back_6 back_10 | xargs -n 1 -P 0 rm -rf
Run Code Online (Sandbox Code Playgroud)

这需要几个小时。那么有没有更快的方法来做到这一点?

Jam*_*den 1

我不明白你以这种方式使用xargs是如何不慢的。我的联机帮助页显示 -P 是进程数,-n 是参数数。没有特殊值-P0,因此可能会被忽略(或者,如果荣幸的话,您将获得零个进程,这将解释 24 小时什么都没有!)。并-n1确保您为每个文件名获得一个exec (2),这大约是最慢的。

我怀疑并行这项工作会给你带来很多好处。我会想只是

$ echo filenames ... | xargs rm -rf 
Run Code Online (Sandbox Code Playgroud)

就足够了。如果你愿意的话,你可以尝试一些值-P4。通过限制命令行参数的数量,您可以最大限度地减少 的调用/bin/rm并让它通过磁盘缓存串行进行。