[pve-devel] [PATCH container] fix #1808: readonly mount source disk
David Limbeck
d.limbeck at proxmox.com
Tue Oct 30 13:06:38 CET 2018
Always readonly mount the source disk so a full clone still works with
an immutable base disk. Applies to every disk copy.
Signed-off-by: David Limbeck <d.limbeck at proxmox.com>
---
src/PVE/LXC.pm | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index 0f2aa5c..1e47faf 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -1200,7 +1200,7 @@ sub query_loopdev {
# The loop device is always detached afterwards (or set to autoclear).
# Returns the loop device.
sub run_with_loopdev {
- my ($func, $file) = @_;
+ my ($func, $file, $readonly) = @_;
my $device = query_loopdev($file);
# Try to reuse an existing device
if ($device) {
@@ -1216,7 +1216,14 @@ sub run_with_loopdev {
$device = $1;
}
};
- PVE::Tools::run_command(['losetup', '--show', '-f', $file], outfunc => $parser);
+ my $losetup_cmd = [
+ 'losetup',
+ '--show',
+ '-f',
+ $file,
+ ];
+ push @$losetup_cmd, '-r' if $readonly;
+ PVE::Tools::run_command($losetup_cmd, outfunc => $parser);
die "failed to setup loop device for $file\n" if !$device;
eval { &$func($device); };
my $err = $@;
@@ -1462,7 +1469,7 @@ sub mountpoint_mount {
};
my $use_loopdev = 0;
if ($scfg->{path}) {
- $mounted_dev = run_with_loopdev($domount, $path);
+ $mounted_dev = run_with_loopdev($domount, $path, $readonly);
$use_loopdev = 1;
} elsif ($scfg->{type} eq 'drbd' || $scfg->{type} eq 'lvm' ||
$scfg->{type} eq 'rbd' || $scfg->{type} eq 'lvmthin') {
@@ -1825,10 +1832,10 @@ sub run_unshared {
my $copy_volume = sub {
my ($src_volid, $src, $dst_volid, $dest, $storage_cfg, $snapname) = @_;
- my $src_mp = { volume => $src_volid, mp => '/' };
+ my $src_mp = { volume => $src_volid, mp => '/', ro => 1 };
$src_mp->{type} = PVE::LXC::Config->classify_mountpoint($src_volid);
- my $dst_mp = { volume => $dst_volid, mp => '/' };
+ my $dst_mp = { volume => $dst_volid, mp => '/', ro => 0 };
$dst_mp->{type} = PVE::LXC::Config->classify_mountpoint($dst_volid);
my @mounted;
--
2.11.0
More information about the pve-devel
mailing list