From 3650ed50967c87f9e4070e53ff777e0f141a37e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 20 Apr 2016 12:30:44 +0200 Subject: [PATCH] fix #942: restore ACL and other rootfs options from backup unless overridden by explicitly setting the rootfs parameter, restoring from a backup will now copy the rootfs properties from the backup archive, except for 'volume' and 'ro' (for obvious reasons). --- src/PVE/API2/LXC.pm | 11 +++++++---- src/PVE/LXC/Create.pm | 9 ++++----- src/PVE/VZDump/ConvertOVZ.pm | 4 +++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm index 03c20fa..95932a9 100644 --- a/src/PVE/API2/LXC.pm +++ b/src/PVE/API2/LXC.pm @@ -310,11 +310,14 @@ __PACKAGE__->register_method({ eval { if (!defined($param->{rootfs})) { if ($restore) { - my (undef, $disksize) = PVE::LXC::Create::recover_config($archive); + my (undef, $rootfsinfo) = PVE::LXC::Create::recover_config($archive); die "unable to detect disk size - please specify rootfs (size)\n" - if !$disksize; - $disksize /= 1024 * 1024 * 1024; # create_disks expects GB as unit size - $param->{rootfs} = "$storage:$disksize"; + if !defined($rootfsinfo->{size}); + my $disksize = $rootfsinfo->{size} / (1024 * 1024 * 1024); # create_disks expects GB as unit size + delete $rootfsinfo->{size}; + delete $rootfsinfo->{ro} if defined($rootfsinfo->{ro}); + $rootfsinfo->{volume} = "$storage:$disksize"; + $param->{rootfs} = PVE::LXC::Config->print_ct_mountpoint($rootfsinfo, 1); } else { $param->{rootfs} = "$storage:4"; # defaults to 4GB } diff --git a/src/PVE/LXC/Create.pm b/src/PVE/LXC/Create.pm index 9375f43..fe47fc1 100644 --- a/src/PVE/LXC/Create.pm +++ b/src/PVE/LXC/Create.pm @@ -107,7 +107,7 @@ sub recover_config { PVE::Tools::run_command(['tar', '-xpOf', $archive, $conf_file, '--occurrence'], outfunc => $out); my $conf; - my $disksize; + my $rootfsinfo; if ($conf_file =~ m/pct\.conf/) { @@ -117,20 +117,19 @@ sub recover_config { delete $conf->{template}; # restored CT is never a template if (defined($conf->{rootfs})) { - my $rootinfo = PVE::LXC::Config->parse_ct_rootfs($conf->{rootfs}); - $disksize = $rootinfo->{size} if defined($rootinfo->{size}); + $rootfsinfo = PVE::LXC::Config->parse_ct_rootfs($conf->{rootfs}); } } elsif ($conf_file =~ m/vps\.conf/) { - ($conf, $disksize) = PVE::VZDump::ConvertOVZ::convert_ovz($raw); + ($conf, $rootfsinfo) = PVE::VZDump::ConvertOVZ::convert_ovz($raw); } else { die "internal error"; } - return wantarray ? ($conf, $disksize) : $conf; + return wantarray ? ($conf, $rootfsinfo) : $conf; } sub restore_and_configure { diff --git a/src/PVE/VZDump/ConvertOVZ.pm b/src/PVE/VZDump/ConvertOVZ.pm index 2e29a48..35fbd70 100644 --- a/src/PVE/VZDump/ConvertOVZ.pm +++ b/src/PVE/VZDump/ConvertOVZ.pm @@ -314,5 +314,7 @@ sub convert_ovz { $conf->{hostname} = $ovz_conf->{hostname}->{value}; - return wantarray ? ($conf, $disksize) : $conf; + $conf->{rootfs} = { size => $disksize, mp => '/' }; + + return wantarray ? ($conf, $conf->{rootfs}) : $conf; } -- 2.39.5