CentOS tar gzip 压缩时间太长

2014-12-26 15:29:24 +08:00
 csensix
是这样,有一个目录A,里面有一千多个子目录。之前,都是直接tar命令打包压缩A目录。现在,A目录大小超过10G了,前几天发现运行了五六个小时还没打包压缩完。

后来,我改成用循环对A目录下的子目录进行打包压缩,结果还是得运行五六个小时。虽然程序没报错,但我隐约觉得这中间有问题。

特来这里请教,还有没有更好的备份方案?
4113 次点击
所在节点    问与答
7 条回复
rrfeng
2014-12-26 15:33:49 +08:00
增量备份。
halfbloodrock
2014-12-26 15:38:21 +08:00
tar是单线程。。。我当时解决方式用了perl的parallel模块并发压缩。。。

http://search.cpan.org/~szabgab/Parallel-ForkManager-1.07/lib/Parallel/ForkManager.pm

其他方式还有很多。
csensix
2014-12-26 15:39:20 +08:00
@rrfeng 但是现在文件已经很大了
csensix
2014-12-26 15:40:22 +08:00
@halfbloodrock 这个高深了
cattyhouse
2014-12-26 15:44:34 +08:00
用pigz压缩,多线程。
halfbloodrock
2014-12-26 15:46:56 +08:00
@csensix
....其实很简单...我这种perl一窍不通的也能照着画出脚本来。。。

#########

#!/usr/bin/perl -w
use strict;
use Parallel::ForkManager;

my $MAX_PROCESSES=10;
my $pm=new Parallel::ForkManager($MAX_PROCESSES);

my @exp=(
["tar -zcf /log/FY13_logs/Nov22/a.tar.gz /log/NON-PCI/app-logs/12/11/22/*"],
["tar -zcf /log/FY13_logs/Nov23/a.tar.gz /log/NON-PCI/app-logs/12/11/23/*"],
["tar -zcf /log/FY13_logs/Nov24/a.tar.gz /log/NON-PCI/app-logs/12/11/24/*"],
);

foreach my $i (@exp){
$pm->start and next;
`@$i`;
$pm->finish;
}
#########
66450146
2014-12-26 15:47:29 +08:00
压缩的时候是 CPU 跑满还是磁盘 IO 跑满?

如果是磁盘 IO 跑满就提高压缩率,换其他压缩方式

如果是 CPU 跑满就降低压缩率,或者甚至不压缩

重复前面两步直到无法提高打包速度,如果还不满意的话就只能换其他方法了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/156899

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX