我正在努力备份我的服务器数据。
某些文件夹包含600GB
周围的数据,我需要将其作为100GB
的6个文件进行tar。
我有谷歌它有一些想法。(similar topic#1,similar 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秒才能完成!!
答案 0 :(得分:0)
我在tar进程中感到奇怪,只有一个cpu进程满四个。 Tar进程只需要很多cpu。
所以我尝试了并行处理pigz
我找到了两个并行处理工具PIGZ和PBZIP2 ,对我来说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这样。