如何 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。
我正在备份我的服务器数据。
有些文件夹的数据在 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。