From: Filip Schauer <f.schauer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH storage 02/12] add support for xz compressed VM and container backups
Date: Wed, 9 Apr 2025 16:24:13 +0200 [thread overview]
Message-ID: <20250409142423.130540-3-f.schauer@proxmox.com> (raw)
In-Reply-To: <20250409142423.130540-1-f.schauer@proxmox.com>
Add support for xz compressed VMA files and allow the use of xz
compressed container backups, which are already explicitly supported in
PVE::LXC::Create::restore_tar_archive.
Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
---
debian/control | 1 +
src/PVE/Storage.pm | 3 +++
src/PVE/Storage/Plugin.pm | 2 +-
src/test/archive_info_test.pm | 4 +++-
src/test/list_volumes_test.pm | 11 ++++++++++-
src/test/parse_volname_test.pm | 6 +++---
src/test/path_to_volume_id_test.pm | 13 ++++++++-----
7 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/debian/control b/debian/control
index 4e1a046..c8e4f4e 100644
--- a/debian/control
+++ b/debian/control
@@ -51,6 +51,7 @@ Depends: bzip2,
smbclient,
thin-provisioning-tools,
udev,
+ xz-utils,
zstd,
${misc:Depends},
${perl:Depends},
diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm
index 6031261..0f0fad8 100755
--- a/src/PVE/Storage.pm
+++ b/src/PVE/Storage.pm
@@ -1578,18 +1578,21 @@ sub decompressor_info {
my $decompressor = {
tar => {
gz => ['tar', '-z'],
+ xz => ['tar', '--xz'],
lzo => ['tar', '--lzop'],
zst => ['tar', '--zstd'],
bz2 => ['tar', '--bzip2'],
},
vma => {
gz => ['zcat'],
+ xz => ['xzcat', '-q'],
lzo => ['lzop', '-d', '-c'],
zst => ['zstd', '-q', '-d', '-c'],
bz2 => ['bzcat', '-q'],
},
iso => {
gz => ['zcat'],
+ xz => ['xzcat', '-q'],
lzo => ['lzop', '-d', '-c'],
zst => ['zstd', '-q', '-d', '-c'],
bz2 => ['bzcat', '-q'],
diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm
index 4e16420..9bc04ad 100644
--- a/src/PVE/Storage/Plugin.pm
+++ b/src/PVE/Storage/Plugin.pm
@@ -21,7 +21,7 @@ use JSON;
use base qw(PVE::SectionConfig);
-use constant KNOWN_COMPRESSION_FORMATS => ('gz', 'lzo', 'zst', 'bz2');
+use constant KNOWN_COMPRESSION_FORMATS => ('gz', 'xz', 'lzo', 'zst', 'bz2');
use constant COMPRESSOR_RE => join('|', KNOWN_COMPRESSION_FORMATS);
use constant LOG_EXT => ".log";
diff --git a/src/test/archive_info_test.pm b/src/test/archive_info_test.pm
index 53e37be..f8bf7b1 100644
--- a/src/test/archive_info_test.pm
+++ b/src/test/archive_info_test.pm
@@ -119,12 +119,14 @@ my $tests = [
my $decompressor = {
tar => {
gz => ['tar', '-z'],
+ xz => ['tar', '--xz'],
lzo => ['tar', '--lzop'],
zst => ['tar', '--zstd'],
bz2 => ['tar', '--bzip2'],
},
vma => {
gz => ['zcat'],
+ xz => ['xzcat', '-q'],
lzo => ['lzop', '-d', '-c'],
zst => ['zstd', '-q', '-d', '-c'],
bz2 => ['bzcat', '-q'],
@@ -167,7 +169,7 @@ for my $virt (sort keys %$bkp_suffix) {
my $non_bkp_suffix = {
'openvz' => [ 'zip', 'tgz.lzo', 'zip.gz', '', ],
'lxc' => [ 'zip', 'tgz.lzo', 'zip.gz', '', ],
- 'qemu' => [ 'vma.xz', 'vms.gz', 'vmx.zst', '', ],
+ 'qemu' => [ 'vms.gz', 'vmx.zst', '', ],
'none' => [ 'tar.gz', ],
};
diff --git a/src/test/list_volumes_test.pm b/src/test/list_volumes_test.pm
index 5adba03..588cba1 100644
--- a/src/test/list_volumes_test.pm
+++ b/src/test/list_volumes_test.pm
@@ -95,6 +95,7 @@ my @tests = (
"$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/dump/vzdump-qemu-16110-2020_03_30-21_15_00.vma.bz2",
+ "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_16_05.vma.xz",
"$storage_dir/snippets/userconfig.yaml",
"$storage_dir/snippets/hookscript.pl",
],
@@ -174,6 +175,15 @@ my @tests = (
'vmid' => '16110',
'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_15_00.vma.bz2',
},
+ {
+ 'content' => 'backup',
+ 'ctime' => 1585602965,
+ 'format' => 'vma.xz',
+ 'size' => DEFAULT_SIZE,
+ 'subtype' => 'qemu',
+ 'vmid' => '16110',
+ 'volid' => 'local:backup/vzdump-qemu-16110-2020_03_30-21_16_05.vma.xz',
+ },
{
'content' => 'snippets',
'ctime' => DEFAULT_CTIME,
@@ -469,7 +479,6 @@ my @tests = (
"$storage_dir/private/subvol-19254-disk-0/19254",
"$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.zip.gz",
"$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.tgz.lzo",
- "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz",
"$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vms.gz",
],
expected => [], # returns empty list
diff --git a/src/test/parse_volname_test.pm b/src/test/parse_volname_test.pm
index 0ede982..8e32945 100644
--- a/src/test/parse_volname_test.pm
+++ b/src/test/parse_volname_test.pm
@@ -214,8 +214,8 @@ foreach my $s (@$disk_suffix) {
# create more test cases for backup files matches
my $bkp_suffix = {
- qemu => [ 'vma', 'vma.gz', 'vma.lzo', 'vma.zst', 'vma.bz2' ],
- lxc => [ 'tar', 'tgz', 'tar.gz', 'tar.lzo', 'tar.zst', 'tar.bz2' ],
+ qemu => [ 'vma', 'vma.gz', 'vma.xz', 'vma.lzo', 'vma.zst', 'vma.bz2' ],
+ lxc => [ 'tar', 'tgz', 'tar.gz', 'tar.xz', 'tar.lzo', 'tar.zst', 'tar.bz2' ],
openvz => [ 'tar', 'tgz', 'tar.gz', 'tar.lzo', 'tar.zst' ],
};
@@ -245,7 +245,7 @@ foreach my $virt (keys %$bkp_suffix) {
# create more test cases for failed backup files matches
my $non_bkp_suffix = {
- qemu => [ 'vms.gz', 'vma.xz' ],
+ qemu => [ 'vms.gz' ],
lxc => [ 'zip.gz', 'tgz.lzo' ],
};
foreach my $virt (keys %$non_bkp_suffix) {
diff --git a/src/test/path_to_volume_id_test.pm b/src/test/path_to_volume_id_test.pm
index 23c5a23..9c7c8c4 100644
--- a/src/test/path_to_volume_id_test.pm
+++ b/src/test/path_to_volume_id_test.pm
@@ -84,6 +84,14 @@ my @tests = (
'local:backup/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo',
],
},
+ {
+ description => 'Backup, vma.xz',
+ volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz",
+ expected => [
+ 'backup',
+ 'local:backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz',
+ ],
+ },
{
description => 'Backup, vma',
volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma",
@@ -238,11 +246,6 @@ my @tests = (
volname => "$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.tgz.lzo",
expected => [''],
},
- {
- description => 'Backup, wrong ending, qemu, vma.xz',
- volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz",
- expected => [''],
- },
{
description => 'Backup, wrong format, qemu, vms.gz',
volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vms.gz",
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-04-09 14:27 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-09 14:24 [pve-devel] [PATCH guest-common/manager/storage/vma-to-pbs 00/12] align supported compression formats for templates and backups Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH storage 01/12] add support for .vma.bz2 Filip Schauer
2025-04-09 14:24 ` Filip Schauer [this message]
2025-04-09 14:24 ` [pve-devel] [PATCH storage 03/12] align supported compression formats for templates and backups Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH guest-common 04/12] vzdump: add support for bzip2 compression Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH guest-common 05/12] vzdump: add support for xz compression Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH manager 06/12] accept .tar.bz2 ct templates in the storage upload dialog Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH manager 07/12] vzdump: add support for bzip2 compression Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH manager 08/12] vzdump: add support for xz compression Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH manager 09/12] allow download of xz compressed files Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH manager 10/12] accept .tar.lzo ct templates in the storage upload dialog Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH vma-to-pbs 11/12] add support for bzip2 compressed VMA files Filip Schauer
2025-04-09 14:24 ` [pve-devel] [PATCH vma-to-pbs 12/12] add support for xz " Filip Schauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250409142423.130540-3-f.schauer@proxmox.com \
--to=f.schauer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal