[pve-devel] [PATCH manager v4] Fix #2124: Add support for zstd

Alwin Antreich a.antreich at proxmox.com
Wed Apr 22 16:57:52 CEST 2020


This patch adds the zstd to the compression selection for backup on the
GUI and add .zst to the backup file filter. Including zstd as package
install dependency.

Signed-off-by: Alwin Antreich <a.antreich at proxmox.com>
---
 PVE/VZDump.pm                            | 11 +++++++++--
 debian/control                           |  1 +
 www/manager6/form/CompressionSelector.js |  3 ++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index f3274196..80f4734c 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -609,6 +609,13 @@ sub compressor_info {
 	} else {
 	    return ('gzip --rsyncable', 'gz');
 	}
+    } elsif ($opt_compress eq 'zstd') {
+	my $zstd_threads = $opts->{zstd} // 1;
+	if ($zstd_threads == 0) {
+	    my $cpuinfo = PVE::ProcFSTools::read_cpuinfo();
+	    $zstd_threads = int(($cpuinfo->{cpus} + 1)/2);
+	}
+	return ("zstd --threads=${zstd_threads}", 'zst');
     } else {
 	die "internal error - unknown compression option '$opt_compress'";
     }
@@ -620,7 +627,7 @@ sub get_backup_file_list {
     my $bklist = [];
     foreach my $fn (<$dir/${bkname}-*>) {
 	next if $exclude_fn && $fn eq $exclude_fn;
-	if ($fn =~ m!/(${bkname}-(\d{4})_(\d{2})_(\d{2})-(\d{2})_(\d{2})_(\d{2})\.(tgz|((tar|vma)(\.(gz|lzo))?)))$!) {
+	if ($fn =~ m!/(${bkname}-(\d{4})_(\d{2})_(\d{2})-(\d{2})_(\d{2})_(\d{2})\.(tgz|((tar|vma)(\.(${\PVE::Storage::Plugin::COMPRESSOR_RE}))?)))$!) {
 	    $fn = "$dir/$1"; # untaint
 	    my $t = timelocal ($7, $6, $5, $4, $3 - 1, $2);
 	    push @$bklist, [$fn, $t];
@@ -928,7 +935,7 @@ sub exec_backup_task {
 		    debugmsg ('info', "delete old backup '$d->[0]'", $logfd);
 		    unlink $d->[0];
 		    my $logfn = $d->[0];
-		    $logfn =~ s/\.(tgz|((tar|vma)(\.(gz|lzo))?))$/\.log/;
+		    $logfn =~ s/\.(tgz|((tar|vma)(\.(${\PVE::Storage::Plugin::COMPRESSOR_RE}))?))$/\.log/;
 		    unlink $logfn;
 		}
 	    }
diff --git a/debian/control b/debian/control
index edb2833d..318b4f0e 100644
--- a/debian/control
+++ b/debian/control
@@ -60,6 +60,7 @@ Depends: apt-transport-https | apt (>= 1.5~),
          logrotate,
          lsb-base,
          lzop,
+         zstd,
          novnc-pve,
          pciutils,
          perl (>= 5.10.0-19),
diff --git a/www/manager6/form/CompressionSelector.js b/www/manager6/form/CompressionSelector.js
index 8938fc0e..842b7710 100644
--- a/www/manager6/form/CompressionSelector.js
+++ b/www/manager6/form/CompressionSelector.js
@@ -4,6 +4,7 @@ Ext.define('PVE.form.CompressionSelector', {
     comboItems: [
                 ['0', Proxmox.Utils.noneText],
                 ['lzo', 'LZO (' + gettext('fast') + ')'],
-                ['gzip', 'GZIP (' + gettext('good') + ')']
+                ['gzip', 'GZIP (' + gettext('good') + ')'],
+                ['zstd', 'ZSTD (' + gettext('better') + ')'],
     ]
 });
-- 
2.20.1





More information about the pve-devel mailing list