diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 3506e10d..ffa7a0b7 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -142,6 +142,16 @@ sub prepare { die "cant migrate running VM without --online\n" if !$online; $running = $pid; $self->{forcemachine} = PVE::QemuServer::get_current_qemu_machine($vmid); + + foreach my $opt (keys %$conf) { + next if $opt !~ m/^net(\d+)$/; + my $net = PVE::QemuServer::parse_net($conf->{$opt}); + next if !$net; + my $romfile = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, 'qom-get', path => $opt, property => 'romfile'); + $self->{forcemachine} .= '.pxe' if $romfile =~ m/pxe/; + last; + } + } if (my $loc_res = PVE::QemuServer::check_local_resources($conf, 1)) { diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index b5d04481..8b6da2fc 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -373,7 +373,7 @@ EODESCR machine => { description => "Specific the Qemu machine type.", type => 'string', - pattern => '(pc|pc(-i440fx)?-\d+\.\d+|q35|pc-q35-\d+\.\d+)', + pattern => '(pc|pc(-i440fx)?-\d+\.\d+(\.pxe)?|q35|pc-q35-\d+\.\d+(\.pxe)?)', maxLength => 40, optional => 1, }, @@ -2657,12 +2657,20 @@ sub config_to_command { push @$cmd, '-p', "CPUQuota=$cpulimit\%"; } - # Note: kvm version < 2.4 use non-efi pxe files, and have problems when we - # load new efi bios files on migration. So this hack is required to allow - # live migration from qemu-2.2 to qemu-2.4, which is sometimes used when - # updrading from proxmox-ve-3.X to proxmox-ve 4.0 - my $use_old_bios_files = !qemu_machine_feature_enabled ($machine_type, $kvmver, 2, 4); - + + my $use_old_bios_files = undef; + + if ($machine_type && $machine_type =~ m/^(\S+)\.pxe$/){ + $machine_type = $1; + $use_old_bios_files = 1; + } else { + # Note: kvm version < 2.4 use non-efi pxe files, and have problems when we + # load new efi bios files on migration. So this hack is required to allow + # live migration from qemu-2.2 to qemu-2.4, which is sometimes used when + # updrading from proxmox-ve-3.X to proxmox-ve 4.0 + $use_old_bios_files = !qemu_machine_feature_enabled ($machine_type, $kvmver, 2, 4); + } + push @$cmd, '/usr/bin/kvm'; push @$cmd, '-id', $vmid;