如何tar文件大小限制?

时间:2016-05-18 15:35:53

标签: linux shell backup tar gnu-parallel

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

某些文件夹包含600GB周围的数据,我需要将其作为100GB的6个文件进行tar。

我有谷歌它有一些想法。(similar topic#1similar topic#2等等。 我们可以通过

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

我们也可以用

解压缩它
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秒才能完成!!

1 个答案:

答案 0 :(得分:0)

我在tar进程中感到奇怪,只有一个cpu进程满四个。 Tar进程只需要很多cpu。

所以我尝试了并行处理pigz

我找到了两个并行处理工具PIGZPBZIP2 ,对我来说PIGZ效果很好,

对于22 GB个测试文件(大多数为10MB文件,数量不大而非大小),正常tar花了 23~24分钟pbzip2也采用相同的方式时间(我不会对此进行太多研究)而且猪只花了<8分钟 !!!所以我选择pigz

一旦我完成了pigz,我的所有cpu都转到95%100%,这使得其他进程变慢,在一些google之后我发现了一个限制这个cpu使用的解决方案,{{3 }}

最后我用过这样的!!

$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这样。