[pve-devel] PATCH pve-zsync compress option for gz-compressed sync transfers
Jochen Plumeyer
jochen.plumeyer at uhlmann-ludewig.de
Thu Jan 28 11:51:22 CET 2021
Hi everybody,
according to my measurements, gz-compressing zfs syncs can reduce about 70%
of data traffic during pve-zsync operation.
Hence, the option "--compress" has been added in this patch.
If enabled, the existing traffic is directed through " | gzip -c " --SYNC
STREAM--> "gzip -d |" pipe commands.
Testing has been done, today we will deploy it in production.
Merging would be appreciated.
Cheers,
Jochen Plumeyer
diff --git a/pve-zsync b/pve-zsync
index 5c95955..57f722e 100755
--- a/pve-zsync
+++ b/pve-zsync
@@ -64,6 +64,7 @@ if (defined($command) && $command ne 'help' && $command ne
'printpod') {
check_bin ('zfs');
check_bin ('ssh');
check_bin ('scp');
+ check_bin ('gzip');
}
$SIG{TERM} = $SIG{QUIT} = $SIG{PIPE} = $SIG{HUP} = $SIG{KILL} = $SIG{INT} =
sub {
@@ -229,6 +230,7 @@ sub parse_argv {
dest => undef,
source => undef,
verbose => undef,
+ compress => undef,
limit => undef,
maxsnap => undef,
name => undef,
@@ -245,6 +247,7 @@ sub parse_argv {
'dest=s' => \$param->{dest},
'source=s' => \$param->{source},
'verbose' => \$param->{verbose},
+ 'compress' => \$param->{compress},
'limit=i' => \$param->{limit},
'maxsnap=i' => \$param->{maxsnap},
'name=s' => \$param->{name},
@@ -446,6 +449,7 @@ sub format_job {
$text .= " --limit $job->{limit}" if $job->{limit};
$text .= " --method $job->{method}";
$text .= " --verbose" if $job->{verbose};
+ $text .= " --compress" if $job->{compress};
$text .= " --source-user $job->{source_user}";
$text .= " --dest-user $job->{dest_user}";
$text .= " --properties" if $job->{properties};
@@ -967,6 +971,8 @@ sub send_image {
}
push @$cmd, '--', "$source->{all}\@$source->{new_snap}";
+ push @$cmd, \'|', 'gzip', '-c' if $param->{compress};
+
if ($param->{limit}){
my $bwl = $param->{limit}*1024;
push @$cmd, \'|', 'cstream', '-t', $bwl;
@@ -977,8 +983,10 @@ sub send_image {
push @$cmd, \'|';
push @$cmd, 'ssh', '-o', 'BatchMode=yes',
"$param->{dest_user}\@$dest->{ip}", '--' if $dest->{ip};
+ push @$cmd, \'"', 'gzip', '-d', \'|' if $param->{compress};
push @$cmd, 'zfs', 'recv', '-F', '--';
push @$cmd, "$target";
+ push @$cmd, \'"' if $param->{compress};
eval {
run_cmd($cmd)
@@ -1172,6 +1180,10 @@ $PROGNAME sync -dest <string> -source <string>
[OPTIONS]\n
print out the sync progress.
+ -compress boolean
+
+ use gzip compression for sync transfer
+
-properties boolean
Include the dataset's properties in the stream.
More information about the pve-devel
mailing list