Signed-off-by: Alwin Antreich <a.antre...@proxmox.com> --- PVE/Storage.pm | 4 +++- PVE/Storage/Plugin.pm | 2 +- test/test_archive_info.pm | 9 ++++++--- test/test_list_volumes.pm | 4 ++++ test/test_parse_volname.pm | 3 +++ test/test_path_to_volume_id.pm | 2 ++ 6 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 46384ff..df477a7 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -1295,10 +1295,12 @@ sub decompressor_info { tar => { gz => ['tar', '-z'], lzo => ['tar', '--lzop'], + zst => ['tar', '--zstd'], }, vma => { gz => ['zcat'], lzo => ['lzop', '-d', '-c'], + zst => ['zstd', '-q', '-d', '-c'], }, }; @@ -1389,7 +1391,7 @@ sub extract_vzdump_config_vma { my $errstring; my $err = sub { my $output = shift; - if ($output =~ m/lzop: Broken pipe: <stdout>/ || $output =~ m/gzip: stdout: Broken pipe/) { + if ($output =~ m/lzop: Broken pipe: <stdout>/ || $output =~ m/gzip: stdout: Broken pipe/ || $output =~ m/zstd: error 70 : Write error : Broken pipe/) { $broken_pipe = 1; } elsif (!defined ($errstring) && $output !~ m/^\s*$/) { $errstring = "Failed to extract config from VMA archive: $output\n"; diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index ef6e6de..ec434a4 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -17,7 +17,7 @@ use JSON; use base qw(PVE::SectionConfig); -use constant COMPRESSOR_RE => 'gz|lzo'; +use constant COMPRESSOR_RE => 'gz|lzo|zst'; our @COMMON_TAR_FLAGS = qw( --one-file-system diff --git a/test/test_archive_info.pm b/test/test_archive_info.pm index 464cc89..cd126f8 100644 --- a/test/test_archive_info.pm +++ b/test/test_archive_info.pm @@ -10,19 +10,22 @@ use Test::More; my @tests = ( # backup archives - [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => undef, 'compression' => undef }, 'Backup archive, vma' ], - [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => ['zcat'], 'compression' => 'gz' }, 'Backup archive, vma, gz' ], - [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => ['lzop', '-d', '-c'], 'compression' => 'lzo' }, 'Backup archive, vma, lzo' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => undef, 'compression' => undef }, 'Backup archive, vma' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => ['zcat'], 'compression' => 'gz' }, 'Backup archive, vma, gz' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => ['lzop', '-d', '-c'], 'compression' => 'lzo' }, 'Backup archive, vma, lzo' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.zst', { 'type' => 'qemu', 'format' => 'vma', 'decompressor' => ['zstd', '-q', '-d', '-c'], 'compression' => 'zst' }, 'Backup archive, vma, zst' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar', { 'type' => 'lxc', 'format' => 'tar', 'decompressor' => undef, 'compression' => undef }, 'Backup archive, lxc' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.gz', { 'type' => 'lxc', 'format' => 'tar', 'decompressor' => ['tar', '-z'], 'compression' => 'gz' }, 'Backup archive, lxc, gz' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tgz', { 'type' => 'lxc', 'format' => 'tar', 'decompressor' => ['tar', '-z'], 'compression' => 'gz' }, 'Backup archive, lxc, tgz' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo', { 'type' => 'lxc', 'format' => 'tar', 'decompressor' => ['tar', '--lzop'], 'compression' => 'lzo' }, 'Backup archive, lxc, lzo' ], + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst', { 'type' => 'lxc', 'format' => 'tar', 'decompressor' => ['tar', '--zstd'], 'compression' => 'zst' }, 'Backup archive, lxc, zst' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar', { 'type' => 'openvz', 'format' => 'tar', 'decompressor' => undef, 'compression' => undef }, 'Backup archive, openvz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.gz', { 'type' => 'openvz', 'format' => 'tar', 'decompressor' => ['tar', '-z'], 'compression' => 'gz' }, 'Backup archive, openvz, gz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tgz', { 'type' => 'openvz', 'format' => 'tar', 'decompressor' => ['tar', '-z'], 'compression' => 'gz' }, 'Backup archive, openvz, tgz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.lzo', { 'type' => 'openvz', 'format' => 'tar', 'decompressor' => ['tar', '--lzop'], 'compression' => 'lzo' }, 'Backup archive, openvz, lzo' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.zst', { 'type' => 'openvz', 'format' => 'tar', 'decompressor' => ['tar', '--zstd'], 'compression' => 'zst' }, 'Backup archive, openvz, zst' ], # failed matches [ 'backup/vzdump-none-16112-2020_03_30-21_39_30.tar', "ERROR: couldn't determine format and compression type\n", 'Failed match: Backup archive, no virtualization type' ], diff --git a/test/test_list_volumes.pm b/test/test_list_volumes.pm index 169c8be..5a27d81 100644 --- a/test/test_list_volumes.pm +++ b/test/test_list_volumes.pm @@ -99,6 +99,7 @@ my @tests = ( "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz", "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo", "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma", + "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst", "$storage_dir/snippets/userconfig.yaml", "$storage_dir/snippets/hookscript.pl", ], @@ -109,6 +110,7 @@ my @tests = ( { 'content' => 'backup', 'ctime' => 1585595500, 'format' => 'vma.gz', 'size' => DEFAULT_SIZE, 'vmid' => '16110', 'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz' }, { 'content' => 'backup', 'ctime' => 1585595565, 'format' => 'vma.lzo', 'size' => DEFAULT_SIZE, 'vmid' => '16110', 'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo' }, { 'content' => 'backup', 'ctime' => 1585595635, 'format' => 'vma', 'size' => DEFAULT_SIZE, 'vmid' => '16110', 'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma' }, + { 'content' => 'backup', 'ctime' => 1585595635, 'format' => 'vma.zst', 'size' => DEFAULT_SIZE, 'vmid' => '16110', 'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst' }, { 'content' => 'snippets', 'ctime' => DEFAULT_CTIME, 'format' => 'snippet', 'size' => DEFAULT_SIZE, 'volid' => 'local:snippets/hookscript.pl' }, { 'content' => 'snippets', 'ctime' => DEFAULT_CTIME, 'format' => 'snippet', 'size' => DEFAULT_SIZE, 'volid' => 'local:snippets/userconfig.yaml' }, ], @@ -120,12 +122,14 @@ my @tests = ( "$storage_dir/images/16112/vm-16112-disk-0.raw", "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo", "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_49_30.tar.gz", + "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_49_30.tar.zst", "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_59_30.tgz", ], expected => [ { 'content' => 'rootdir', 'ctime' => DEFAULT_CTIME, 'format' => 'raw', 'parent' => undef, 'size' => DEFAULT_SIZE, 'used' => DEFAULT_USED, 'vmid' => '16112', 'volid' => 'local:16112/vm-16112-disk-0.raw' }, { 'content' => 'backup', 'ctime' => 1585597170, 'format' => 'tar.lzo', 'size' => DEFAULT_SIZE, 'vmid' => '16112', 'volid' => 'local:backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo' }, { 'content' => 'backup', 'ctime' => 1585597770, 'format' => 'tar.gz', 'size' => DEFAULT_SIZE, 'vmid' => '16112', 'volid' => 'local:backup/vzdump-lxc-16112-2020_03_30-21_49_30.tar.gz' }, + { 'content' => 'backup', 'ctime' => 1585597770, 'format' => 'tar.zst', 'size' => DEFAULT_SIZE, 'vmid' => '16112', 'volid' => 'local:backup/vzdump-lxc-16112-2020_03_30-21_49_30.tar.zst' }, { 'content' => 'backup', 'ctime' => 1585598370, 'format' => 'tgz', 'size' => DEFAULT_SIZE, 'vmid' => '16112', 'volid' => 'local:backup/vzdump-lxc-16112-2020_03_30-21_59_30.tgz' }, ], description => 'VMID: 16112, lxc, raw, backup', diff --git a/test/test_parse_volname.pm b/test/test_parse_volname.pm index 84665d3..27f2249 100644 --- a/test/test_parse_volname.pm +++ b/test/test_parse_volname.pm @@ -40,16 +40,19 @@ my @tests = ( [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma', '16110'], 'Backup archive, vma' ], [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', '16110'], 'Backup archive, vma, gz' ], [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', '16110'], 'Backup archive, vma, lzo' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.zst', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma.zst', '16110'], 'Backup archive, vma, zst' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar', '16112'], 'Backup archive, lxc' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.gz', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar.gz', '16112'], 'Backup archive, lxc, gz' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tgz', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tgz', '16112'], 'Backup archive, lxc, tgz' ], [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo', '16112'], 'Backup archive, lxc, lzo' ], + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst', '16112'], 'Backup archive, lxc, zst' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar', '16112'], 'Backup archive, openvz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.gz', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar.gz', '16112'], 'Backup archive, openvz, gz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tgz', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tgz', '16112'], 'Backup archive, openvz, tgz' ], [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.lzo', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar.lzo', '16112'], 'Backup archive, openvz, lzo' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.zst', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar.zst', '16112'], 'Backup archive, openvz, zst' ], [ 'backup/vzdump-none-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-none-16112-2020_03_30-21_39_30.tar'], 'Backup archive, no virtualization type' ], diff --git a/test/test_path_to_volume_id.pm b/test/test_path_to_volume_id.pm index e693974..83caf24 100644 --- a/test/test_path_to_volume_id.pm +++ b/test/test_path_to_volume_id.pm @@ -44,8 +44,10 @@ my @tests = ( [ "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz", ['iso', 'local:backup/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz'], 'Backup, vma.gz' ], [ "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo", ['iso', 'local:backup/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo'], 'Backup, vma.lzo' ], + [ "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst", ['iso', 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst'], 'Backup, vma.zst' ], [ "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma", ['iso', 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma'], 'Backup, vma' ], [ "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo", ['iso', 'local:backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo'], 'Backup, tar.lzo' ], + [ "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst", ['iso', 'local:backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst'], 'Backup, tar.zst' ], [ "$storage_dir/template/iso/yet-again-a-installation-disk.iso", ['iso', 'local:iso/yet-again-a-installation-disk.iso'], 'ISO file' ], [ "$storage_dir/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz", ['vztmpl', 'local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz'], 'CT template, tar.gz' ], -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel