stu*_*ent 5 command-line filesystems backup parallelism
我有一个备份磁盘,其中包含来自不同日期的同一台机器的数百个备份。备份是使用 rsync 和硬链接进行的,即如果文件没有更改备份脚本,则只是在旧备份中创建到文件的硬链接。因此,如果一个文件永远不会改变,你有本质上的备份磁盘一个副本,但说100个硬连接到它代表每个日期的备份每个目录(比如back-1
,back-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)
这需要几个小时。那么有没有更快的方法来做到这一点?
我不明白你以这种方式使用xargs是如何不慢的。我的联机帮助页显示 -P 是进程数,-n 是参数数。没有特殊值-P0
,因此可能会被忽略(或者,如果荣幸的话,您将获得零个进程,这将解释 24 小时什么都没有!)。并-n1
确保您为每个文件名获得一个exec (2),这大约是最慢的。
我怀疑并行这项工作会给你带来很多好处。我会想只是
$ echo filenames ... | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
就足够了。如果你愿意的话,你可以尝试一些值-P4
。通过不限制命令行参数的数量,您可以最大限度地减少 的调用/bin/rm
并让它通过磁盘缓存串行进行。