}
sub print_drive_commandline_full {
- my ($storecfg, $vmid, $drive, $pbs_name, $io_uring) = @_;
+ my ($storecfg, $vmid, $drive, $live_restore_name, $io_uring) = @_;
my $path;
my $volid = $drive->{file};
if (drive_is_cdrom($drive)) {
$path = get_iso_path($storecfg, $vmid, $volid);
- die "$drive_id: cannot back cdrom drive with PBS snapshot\n" if $pbs_name;
+ die "$drive_id: cannot back cdrom drive with a live restore image\n" if $live_restore_name;
} else {
if ($storeid) {
$path = PVE::Storage::path($storecfg, $volid);
}
}
- if ($pbs_name) {
+ if ($live_restore_name) {
$format = "rbd" if $is_rbd;
die "$drive_id: Proxmox Backup Server backed drive cannot auto-detect the format\n"
if !$format;
# note: 'detect-zeroes' works per blockdev and we want it to persist
# after the alloc-track is removed, so put it on 'file' directly
- my $dz_param = $pbs_name ? "file.detect-zeroes" : "detect-zeroes";
+ my $dz_param = $live_restore_name ? "file.detect-zeroes" : "detect-zeroes";
$opts .= ",$dz_param=$detectzeroes" if $detectzeroes;
}
- if ($pbs_name) {
- $opts .= ",backing=$pbs_name";
+ if ($live_restore_name) {
+ $opts .= ",backing=$live_restore_name";
$opts .= ",auto-remove=on";
}
- # my $file_param = $pbs_name ? "file.file.filename" : "file";
+ # my $file_param = $live_restore_name ? "file.file.filename" : "file";
my $file_param = "file";
- if ($pbs_name) {
+ if ($live_restore_name) {
# non-rbd drivers require the underlying file to be a seperate block
# node, so add a second .file indirection
$file_param .= ".file" if !$is_rbd;
sub config_to_command {
my ($storecfg, $vmid, $conf, $defaults, $forcemachine, $forcecpu,
- $pbs_backing) = @_;
+ $live_restore_backing) = @_;
my ($globalFlags, $machineFlags, $rtcFlags) = ([], [], []);
my $devices = [];
$ahcicontroller->{$controller}=1;
}
- my $pbs_conf = $pbs_backing->{$ds};
- my $pbs_name = undef;
- if ($pbs_conf) {
- $pbs_name = "drive-$ds-pbs";
- push @$devices, '-blockdev', print_pbs_blockdev($pbs_conf, $pbs_name);
+ my $live_restore = $live_restore_backing->{$ds};
+ my $live_blockdev_name = undef;
+ if ($live_restore) {
+ $live_blockdev_name = $live_restore->{name};
+ push @$devices, '-blockdev', $live_restore->{blockdev};
}
my $drive_cmd = print_drive_commandline_full(
- $storecfg, $vmid, $drive, $pbs_name, min_version($kvmver, 6, 0));
+ $storecfg, $vmid, $drive, $live_blockdev_name, min_version($kvmver, 6, 0));
# extra protection for templates, but SATA and IDE don't support it..
$drive_cmd .= ',readonly=on' if drive_is_read_only($conf, $drive);
# timeout => in seconds
# paused => start VM in paused state (backup)
# resume => resume from hibernation
-# pbs-backing => {
+# live-restore-backing => {
# sata0 => {
-# repository
-# snapshot
-# keyfile
-# archive
+# name => blockdev-name,
+# blockdev => "arg to the -blockdev command instantiating device named 'name'",
# },
# virtio2 => ...
# }
}
my ($cmd, $vollist, $spice_port, $pci_devices) = config_to_command($storecfg, $vmid,
- $conf, $defaults, $forcemachine, $forcecpu, $params->{'pbs-backing'});
+ $conf, $defaults, $forcemachine, $forcecpu, $params->{'live-restore-backing'});
my $migration_ip;
my $get_migration_ip = sub {
print "starting VM for live-restore\n";
print "repository: '$opts->{repo}', snapshot: '$opts->{snapshot}'\n";
- my $pbs_backing = {};
+ my $live_restore_backing = {};
for my $ds (keys %$restored_disks) {
$ds =~ m/^drive-(.*)$/;
my $confname = $1;
- $pbs_backing->{$confname} = {
+ my $pbs_conf = {};
+ $pbs_conf = {
repository => $opts->{repo},
snapshot => $opts->{snapshot},
archive => "$ds.img.fidx",
};
- $pbs_backing->{$confname}->{keyfile} = $opts->{keyfile} if -e $opts->{keyfile};
- $pbs_backing->{$confname}->{namespace} = $opts->{namespace} if defined($opts->{namespace});
+ $pbs_conf->{keyfile} = $opts->{keyfile} if -e $opts->{keyfile};
+ $pbs_conf->{namespace} = $opts->{namespace} if defined($opts->{namespace});
my $drive = parse_drive($confname, $conf->{$confname});
print "restoring '$ds' to '$drive->{file}'\n";
+
+ my $pbs_name = "drive-${confname}-pbs";
+ $live_restore_backing->{$confname} = {
+ name => $pbs_name,
+ blockdev => print_pbs_blockdev($pbs_conf, $pbs_name),
+ };
}
my $drives_streamed = 0;
# start VM with backing chain pointing to PBS backup, environment vars for PBS driver
# in QEMU (PBS_PASSWORD and PBS_FINGERPRINT) are already set by our caller
- vm_start_nolock($storecfg, $vmid, $conf, {paused => 1, 'pbs-backing' => $pbs_backing}, {});
+ vm_start_nolock($storecfg, $vmid, $conf, {paused => 1, 'live-restore-backing' => $live_restore_backing}, {});
my $qmeventd_fd = register_qmeventd_handle($vmid);