mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-10-05 19:09:04 +00:00
migrate volumes used inside snapshots including vmstate
Introduce new helper function foreach_volid()
This commit is contained in:
parent
a06c7f7ec4
commit
d5769dc253
@ -199,17 +199,16 @@ sub sync_disks {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
# and add used,owned/non-shared disks (just to be sure we have all)
|
# and add used, owned/non-shared disks (just to be sure we have all)
|
||||||
|
|
||||||
PVE::QemuServer::foreach_drive($conf, sub {
|
PVE::QemuServer::foreach_volid($conf, sub {
|
||||||
my ($ds, $drive) = @_;
|
my ($volid, $is_cdrom) = @_;
|
||||||
|
|
||||||
my $volid = $drive->{file};
|
|
||||||
return if !$volid;
|
return if !$volid;
|
||||||
|
|
||||||
die "cant migrate local file/device '$volid'\n" if $volid =~ m|^/|;
|
die "cant migrate local file/device '$volid'\n" if $volid =~ m|^/|;
|
||||||
|
|
||||||
if (PVE::QemuServer::drive_is_cdrom($drive)) {
|
if ($is_cdrom) {
|
||||||
die "cant migrate local cdrom drive\n" if $volid eq 'cdrom';
|
die "cant migrate local cdrom drive\n" if $volid eq 'cdrom';
|
||||||
return if $volid eq 'none';
|
return if $volid eq 'none';
|
||||||
$cdromhash->{$volid} = 1;
|
$cdromhash->{$volid} = 1;
|
||||||
|
@ -2082,6 +2082,38 @@ sub foreach_drive {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub foreach_volid {
|
||||||
|
my ($conf, $func) = @_;
|
||||||
|
|
||||||
|
my $volhash = {};
|
||||||
|
|
||||||
|
my $test_volid = sub {
|
||||||
|
my ($volid, $is_cdrom) = @_;
|
||||||
|
|
||||||
|
return if !$volid;
|
||||||
|
|
||||||
|
$volhash->{$volid} = $is_cdrom || 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
PVE::QemuServer::foreach_drive($conf, sub {
|
||||||
|
my ($ds, $drive) = @_;
|
||||||
|
&$test_volid($drive->{file}, drive_is_cdrom($drive));
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach my $snapname (keys %{$conf->{snapshots}}) {
|
||||||
|
my $snap = $conf->{snapshots}->{$snapname};
|
||||||
|
&$test_volid($snap->{vmstate}, 0);
|
||||||
|
PVE::QemuServer::foreach_drive($snap, sub {
|
||||||
|
my ($ds, $drive) = @_;
|
||||||
|
&$test_volid($drive->{file}, drive_is_cdrom($drive));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $volid (keys %$volhash) {
|
||||||
|
&$func($volid, $volhash->{$volid});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub config_to_command {
|
sub config_to_command {
|
||||||
my ($storecfg, $vmid, $conf, $defaults) = @_;
|
my ($storecfg, $vmid, $conf, $defaults) = @_;
|
||||||
|
|
||||||
@ -3010,15 +3042,14 @@ sub get_vm_volumes {
|
|||||||
my ($conf) = @_;
|
my ($conf) = @_;
|
||||||
|
|
||||||
my $vollist = [];
|
my $vollist = [];
|
||||||
foreach_drive($conf, sub {
|
foreach_volid($conf, sub {
|
||||||
my ($ds, $drive) = @_;
|
my ($volid, $is_cdrom) = @_;
|
||||||
|
|
||||||
my ($sid, $volname) = PVE::Storage::parse_volume_id($drive->{file}, 1);
|
return if $volid =~ m|^/|;
|
||||||
|
|
||||||
|
my ($sid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
|
||||||
return if !$sid;
|
return if !$sid;
|
||||||
|
|
||||||
my $volid = $drive->{file};
|
|
||||||
return if !$volid || $volid =~ m|^/|;
|
|
||||||
|
|
||||||
push @$vollist, $volid;
|
push @$vollist, $volid;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user