From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id CFCF97109C for ; Tue, 10 May 2022 13:19:50 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id BB4076DC7 for ; Tue, 10 May 2022 13:19:20 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id B94B86DBD for ; Tue, 10 May 2022 13:19:18 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 80C19431F4 for ; Tue, 10 May 2022 13:19:18 +0200 (CEST) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Tue, 10 May 2022 13:19:15 +0200 Message-Id: <20220510111915.50443-1-f.ebner@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.075 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH pve-zsync] close #1824: add 'compressed' option enabling -c and -L for send X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 May 2022 11:19:50 -0000 If one of the features lz4_compress, zstd_compress or large_blocks is actively used/required by the source dataset, but not enabled on the destination, zfs send/recv will fail and recommend upgrading the pool. It's not required that the target dataset is also compressed. Specifying '--properties' to have the target inherit the compression property even works during later syncs (but pre-existing data won't be recompressed automatically then). Signed-off-by: Fabian Ebner --- Put it near 'properties' as I felt like that was the most similar one. pve-zsync | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pve-zsync b/pve-zsync index 46b0ba7..98190b2 100755 --- a/pve-zsync +++ b/pve-zsync @@ -252,6 +252,7 @@ sub parse_argv { source_user => undef, dest_user => undef, prepend_storage_id => undef, + compressed => undef, properties => undef, dest_config_path => undef, }; @@ -270,6 +271,7 @@ sub parse_argv { 'source-user=s' => \$param->{source_user}, 'dest-user=s' => \$param->{dest_user}, 'prepend-storage-id' => \$param->{prepend_storage_id}, + 'compressed' => \$param->{compressed}, 'properties' => \$param->{properties}, 'dest-config-path=s' => \$param->{dest_config_path}, ); @@ -343,6 +345,7 @@ sub param_to_job { $job->{source_user} = $param->{source_user}; $job->{dest_user} = $param->{dest_user}; $job->{prepend_storage_id} = !!$param->{prepend_storage_id}; + $job->{compressed} = !!$param->{compressed}; $job->{properties} = !!$param->{properties}; $job->{dest_config_path} = $param->{dest_config_path} if $param->{dest_config_path}; @@ -470,6 +473,7 @@ sub format_job { $text .= " --source-user $job->{source_user}"; $text .= " --dest-user $job->{dest_user}"; $text .= " --prepend-storage-id" if $job->{prepend_storage_id}; + $text .= " --compressed" if $job->{compressed}; $text .= " --properties" if $job->{properties}; $text .= " --dest-config-path $job->{dest_config_path}" if $job->{dest_config_path}; $text .= "\n"; @@ -1028,6 +1032,8 @@ sub send_image { push @$cmd, 'ssh', '-o', 'BatchMode=yes', "$param->{source_user}\@$source->{ip}", '--' if $source->{ip}; push @$cmd, 'zfs', 'send'; + push @$cmd, '-L', if $param->{compressed}; # no effect if dataset never had large recordsize + push @$cmd, '-c', if $param->{compressed}; push @$cmd, '-p', if $param->{properties}; push @$cmd, '-v' if $param->{verbose}; @@ -1190,6 +1196,11 @@ $PROGNAME create --dest --source [OPTIONS] --source-user string The (ssh) user-name on the source target, root by default + --compressed + If specified, send data without decompressing first. If features lz4_compress, + zstd_compress or large_blocks are in use by the source, they need to be enabled on + the target as well. + --properties If specified, include the dataset's properties in the stream. @@ -1234,6 +1245,11 @@ $PROGNAME sync --dest --source [OPTIONS]\n --verbose If specified, print out the sync progress. + --compressed + If specified, send data without decompressing first. If features lz4_compress, + zstd_compress or large_blocks are in use by the source, they need to be enabled on + the target as well. + --properties If specified, include the dataset's properties in the stream. -- 2.30.2