如何 tar 有大小限制的文件?

How to tar files with a size limit?

我正在备份我的服务器数据。

有些文件夹的数据在 600GB 左右,我需要 tar 将其分成 6 个文件,每个文件 100GB

我有 google 它有一些想法去做。(similar topic#1, similar topic#2 等等)。 我们可以通过

来实现
tar cvzf - data/ | split --bytes=100GB - sda1.backup.tar.gz.

我们也可以用

取消tar它
cat sda1.backup.tar.gz.* | tar xzvf -

我的问题是,有没有办法并行完成这项工作(每个tar作为一个单独的进程)?因为需要很长时间才能完成!

或者还有其他方法吗?

编辑
实验:

# date;tar czf - ../saravana | split --bytes=1073741824 - data_bkp.;date
Wed May 18 09:28:32 MDT 2016
tar: Removing leading `../' from member names
tar: ../saravana: file changed as we read it
Wed May 18 09:51:08 MDT 2016

结果

-rw-r--r--  1 root root 1073741824 May 18 09:31 data_bkp.aa
-rw-r--r--  1 root root 1073741824 May 18 09:34 data_bkp.ab
-rw-r--r--  1 root root 1073741824 May 18 09:38 data_bkp.ac
-rw-r--r--  1 root root 1073741824 May 18 09:41 data_bkp.ad
-rw-r--r--  1 root root 1073741824 May 18 09:49 data_bkp.ae
-rw-r--r--  1 root root  904246985 May 18 09:51 data_bkp.af


# du -h data*
1.1G    data_bkp.aa
1.1G    data_bkp.ab
1.1G    data_bkp.ac
1.1G    data_bkp.ad
1.1G    data_bkp.ae
863M    data_bkp.af

这需要 22 分 36 秒才能完成!!

我想知道在 tar 过程中,四个过程中只有一个 cpu 过程已满。 Tar 过程只需要很多 cpu.

所以我尝试了并行处理pigz

我找到了两个并行处理工具 PIGZ and PBZIP2 ,对我来说 PIGZ 很好用,

对于 22 GB 测试文件(主要是 10MB 文件,数量多而不是大小)一般 tar 花了 23~24 分钟pbzip2 也花了同样的时间(我对此没有太多研究)而 pigz 花了 8 分钟 !!!所以我选择pigz.

一旦我完成了 pigz,我所有的 cpu 都会转到 95%100%,这会使其他进程变慢,经过一些 google 我找到了一个限制此 cpu 使用的解决方案, CPULIMIT

终于这样用了!!

$CPULIMIT_PATH -i -l $CPU_LIMIT_VALUE $TAR_PATH -I $PIGZ_PATH \
--ignore-failed-read -c sda1.backup.tar.gz

-i - 所有子进程,重要 - 否则 cpu 进程将相同
-l cpu 百分比限制 为此我使用了

CPU_LIMIT_VALUE=$(echo "$(nproc)*45" | bc);

这将提供所有核心的 45% 百分比,即 2 个核心 90 和 4 个核心 180。