--- Begin Message ---
>>Yeah I tried some quick tests and it seems to be a bit tricky. Or
>>maybe
>>I just missed something.
Just have done fast tests, I think I have found a way.
(I'll do more test tomorrow to see if everything is ok in guest)
sub qemu_volume_snapshot {
my ($vmid, $deviceid, $storecfg, $drive, $snap) = @_;
.....
} elsif ($do_snapshots_type eq 'external') {
my $storeid = (PVE::Storage::parse_volume_id($volid))[0];
my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
print "external qemu snapshot\n";
my $snapshots = PVE::Storage::volume_snapshot_info($storecfg,
$volid);
my $parent_snap = $snapshots->{'current'}->{parent};
my $machine_version =
PVE::QemuServer::Machine::get_current_qemu_machine($vmid);
#no rename here anymore
PVE::QemuServer::Blockdev::blockdev_external_snapshot(
$storecfg, $vmid, $machine_version, $deviceid, $drive,
$snap, $parent_snap
);
...
}
sub blockdev_external_snapshot {
my ($storecfg, $vmid, $machine_version, $deviceid, $drive, $snap,
$parent_snap) = @_;
print "Creating a new current volume with $snap as backing snap\n";
my $volid = $drive->{file};
#rename current to snap && preallocate add a new current file with
reference to snapbacking-file, we can remove the $running param
my $running = undef
PVE::Storage::volume_snapshot($storecfg, $volid, $snap, undef);
#call the blockdev_rename, only to reopen internal blockdev current
active image to snap volname
my $skip_volume_rename=1;
#reopen current to snap
PVE::QemuServer::Blockdev::blockdev_rename(
$storecfg,
$vmid,
$machine_version,
$deviceid,
$drive,
'current',
$snap,
$parent_snap,
$skip_volume_rename
);
###the rest is the same than before
#be sure to add drive in write mode
delete($drive->{ro});
my $new_file_blockdev = generate_file_blockdev($storecfg, $drive);
my $new_fmt_blockdev = generate_format_blockdev($storecfg, $drive,
$new_file_blockdev);
my $snap_file_blockdev = generate_file_blockdev($storecfg, $drive,
$snap);
my $snap_fmt_blockdev = generate_format_blockdev(
$storecfg,
$drive,
$snap_file_blockdev,
{ 'snapshot-name' => $snap },
);
#backing need to be forced to undef in blockdev, to avoid reopen of
backing-file on blockdev-add
$new_fmt_blockdev->{backing} = undef;
mon_cmd($vmid, 'blockdev-add', %$new_fmt_blockdev);
mon_cmd(
$vmid, 'blockdev-snapshot',
node => $snap_fmt_blockdev->{'node-name'},
overlay => $new_fmt_blockdev->{'node-name'},
);
}
--- End Message ---
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel