【问题标题】:How to tar files with a size limit?如何使用大小限制 tar 文件?
【发布时间】:2016-09-15 05:03:58
【问题描述】:

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

一些文件夹有600GB 周围的数据,我需要将其压缩为100GB 的6 个文件。

我在谷歌上找到了一些想法。(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 秒才能完成!!

【问题讨论】:

  • 理论最大值是多少? IE。你的磁盘有多快?需要多长时间才能完成:tar cvzf - data/ >/dev/null ?您是否保存在读取数据的同一磁盘上?

标签: linux shell backup tar gnu-parallel


【解决方案1】:

我想知道在 tar 进程中只有一个 cpu 进程满了四个。 tar 进程只占用很多 cpu。

所以我尝试了并行处理pigz

我找到了两个并行处理工具PIGZPBZIP2 ,对我来说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 类似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2016-04-14
    • 2010-12-02
    • 2019-02-27
    • 2012-11-01
    相关资源
    最近更新 更多