]> git.proxmox.com Git - qemu-server.git/log
qemu-server.git
4 years agosync_disks: be more verbose if storage_migrate fails
Fabian Ebner [Wed, 8 Apr 2020 09:25:11 +0000 (11:25 +0200)]
sync_disks: be more verbose if storage_migrate fails

If storage_migrate dies, the error message might not include the
volume ID or the target storage ID, but those might be good to know.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agosync_disks: use allow_rename to avoid collisions on the target storage
Fabian Ebner [Wed, 8 Apr 2020 09:25:10 +0000 (11:25 +0200)]
sync_disks: use allow_rename to avoid collisions on the target storage

This makes it possible to migrate a VM with volumes store1:vm-123-disk-0
store2:vm-123-disk-0 to some targetstorage. Also prevents migration failure
when there is an orphaned disk with the same volid on the target.

To avoid confusion, the name should not change for 'vmstate'-volumes.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoUpdate volume IDs in one go
Fabian Ebner [Wed, 8 Apr 2020 09:25:09 +0000 (11:25 +0200)]
Update volume IDs in one go

Use 'update_volume_ids' for the live-migrated disks as well.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoAllow specifying targetstorage for offline migration
Fabian Ebner [Wed, 8 Apr 2020 09:25:08 +0000 (11:25 +0200)]
Allow specifying targetstorage for offline migration

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoTake note of changes to the volume IDs when migrating and update the config
Fabian Ebner [Wed, 8 Apr 2020 09:25:07 +0000 (11:25 +0200)]
Take note of changes to the volume IDs when migrating and update the config

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoAllow parsing vmstate entries
Fabian Ebner [Wed, 8 Apr 2020 09:25:06 +0000 (11:25 +0200)]
Allow parsing vmstate entries

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoUse new storage_migrate interface
Fabian Ebner [Wed, 8 Apr 2020 09:25:01 +0000 (11:25 +0200)]
Use new storage_migrate interface

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoSwitch to using foreach_volume instead of foreach_drive
Fabian Ebner [Wed, 8 Apr 2020 09:24:56 +0000 (11:24 +0200)]
Switch to using foreach_volume instead of foreach_drive

It was necessary to move foreach_volid back to QemuServer.pm

In VZDump/QemuServer.pm and QemuMigrate.pm the dependency on
QemuConfig.pm was already there, just the explicit "use" was missing.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agobump version to 6.1-13
Thomas Lamprecht [Wed, 8 Apr 2020 15:13:42 +0000 (17:13 +0200)]
bump version to 6.1-13

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoconfig_to_command: indentation, whitspace and newline fixes
Thomas Lamprecht [Wed, 8 Apr 2020 15:44:16 +0000 (17:44 +0200)]
config_to_command: indentation, whitspace and newline fixes

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoIgnore version checks when using QEMU -rc releases
Stefan Reiter [Wed, 8 Apr 2020 15:11:07 +0000 (17:11 +0200)]
Ignore version checks when using QEMU -rc releases

Upstream marks these as having a micro-version of >=90, unfortunately the
machine versions are bumped earlier so testing them is made unnecessarily
difficult, since the version checking code would abort on migrations etc...

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
[ Thomas: do so refactor ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agod/control: bump versioned to libpve-common-perl
Thomas Lamprecht [Wed, 8 Apr 2020 15:13:08 +0000 (17:13 +0200)]
d/control: bump versioned to libpve-common-perl

mainly for the new idmap and storage map format

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agocpu config: add upcoming EPYC-Rome CPU type
Thomas Lamprecht [Wed, 8 Apr 2020 15:06:50 +0000 (17:06 +0200)]
cpu config: add upcoming EPYC-Rome CPU type

will be included with QEMU 5.0

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoconfig: harmonize bridge pattern
Fabian Grünbichler [Wed, 8 Apr 2020 12:02:47 +0000 (14:02 +0200)]
config: harmonize bridge pattern

so that pve-container and qemu-server use the same one, in preparation
for moving it to JSONSchema and having a bridgepair format.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agocfg2cmd: add test cases for custom CPU models
Stefan Reiter [Tue, 7 Apr 2020 13:56:20 +0000 (15:56 +0200)]
cfg2cmd: add test cases for custom CPU models

Requires a mock CPU-model config, which is given as a raw string to also
test parsing capabilities. Also tests defaulting behaviour.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Reviewed-By: Fabian Ebner <f.ebner@proxmox.com>
Tested-By: Fabian Ebner <f.ebner@proxmox.com>
4 years agofix #2318: allow phys-bits CPU setting
Stefan Reiter [Tue, 7 Apr 2020 13:56:19 +0000 (15:56 +0200)]
fix #2318: allow phys-bits CPU setting

Can be specified for a particular VM or via a custom CPU model (VM takes
precedence).

QEMU's default limit only allows up to 1TB of RAM per VM. Increasing the
physical address bits available to a VM can fix this.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agoRework get_cpu_options and allow custom CPU models
Stefan Reiter [Tue, 7 Apr 2020 13:56:18 +0000 (15:56 +0200)]
Rework get_cpu_options and allow custom CPU models

If a cputype is custom (check via prefix), try to load options from the
custom CPU model config, and set values accordingly.

While at it, extract currently hardcoded values into seperate sub and add
reasonings.

Since the new flag resolving outputs flags in sorted order for
consistency, adapt the test cases to not break. Only the order is
changed, not which flags are present.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Reviewed-By: Fabian Ebner <f.ebner@proxmox.com>
Tested-By: Fabian Ebner <f.ebner@proxmox.com>
4 years agoAdd helpers to better structure CPU option handling
Stefan Reiter [Tue, 7 Apr 2020 13:56:17 +0000 (15:56 +0200)]
Add helpers to better structure CPU option handling

To avoid hardcoding even more CPU-flag related things for custom CPU
models, introduce a dynamic approach to resolving flags.

resolve_cpu_flags takes a list of hashes (as documented in the
comment) and resolves them to a valid "-cpu" argument without
duplicates. This also helps by providing a reason why specific CPU flags
have been added, and thus allows for useful warning messages should a
flag be overwritten by another.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Reviewed-By: Fabian Ebner <f.ebner@proxmox.com>
Tested-By: Fabian Ebner <f.ebner@proxmox.com>
4 years agoInclude "-cpu" parameter with snapshots/suspend
Stefan Reiter [Tue, 7 Apr 2020 13:56:16 +0000 (15:56 +0200)]
Include "-cpu" parameter with snapshots/suspend

Just like with live-migration, custom CPU models might change after a
snapshot has been taken (or a VM suspended), which would lead to a
different QEMU invocation on rollback/resume.

Save the "-cpu" argument as a new "runningcpu" option into the VM conf
akin to "runningmachine" and use as override during rollback/resume.

No functional change with non-custom CPU types intended.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agoInclude "-cpu" parameter with live-migration
Stefan Reiter [Tue, 7 Apr 2020 13:56:15 +0000 (15:56 +0200)]
Include "-cpu" parameter with live-migration

This is required to support custom CPU models, since the
"cpu-models.conf" file is not versioned, and can be changed while a VM
using a custom model is running. Changing the file in such a state can
lead to a different "-cpu" argument on the receiving side.

This patch fixes this by passing the entire "-cpu" option (extracted
from /proc/.../cmdline) as a "qm start" parameter. Note that this is
only done if the VM to migrate is using a custom model (which we can
check just fine, since the <vmid>.conf *is* versioned with pending
changes), thus not breaking any live-migration directionality.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agomap_storage: check for definedness not perl-truthiness
Thomas Lamprecht [Tue, 7 Apr 2020 15:25:35 +0000 (17:25 +0200)]
map_storage: check for definedness not perl-truthiness

as else it would reject possible a valid set value

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agofollowup: s/targetstorage map/storage map/ for parameter exceptions
Thomas Lamprecht [Tue, 7 Apr 2020 15:20:23 +0000 (17:20 +0200)]
followup: s/targetstorage map/storage map/ for parameter exceptions

to reduce duplicated info in the error slightly

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agofollowup: refactor loop to use perls values
Thomas Lamprecht [Tue, 7 Apr 2020 15:15:28 +0000 (17:15 +0200)]
followup: refactor loop to use perls values

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovm_start: collect and return migration info
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:36 +0000 (13:41 +0200)]
vm_start: collect and return migration info

in addition to printing it. preparation for remote cluster migration,
where we want to return this in a structured fashion over the migration
tunnel instead of parsing stdout via SSH.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agovm_start: split NBD disk allocation further
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:35 +0000 (13:41 +0200)]
vm_start: split NBD disk allocation further

into one sub that retrieves the local disks, and the actual NBD
allocation. that way, remote incoming migration can just call the NBD
allocation with a custom list of volume names/storages/..

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigrate: check storage permissions and content type
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:34 +0000 (13:41 +0200)]
migrate: check storage permissions and content type

both where previously missing. the existing 'check_storage_access'
helper is not applicable here since it operates on a full set of VM
config options, not just storage IDs.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigrate: allow arbitrary source->target storage maps
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:33 +0000 (13:41 +0200)]
migrate: allow arbitrary source->target storage maps

the syntax is backwards compatible, providing a single storage ID or '1'
works like before. the new helper ensures consistent behaviour at all
call sites.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigration: fix downtime limit auto-increase
Stefan Reiter [Thu, 2 Apr 2020 13:20:07 +0000 (15:20 +0200)]
migration: fix downtime limit auto-increase

485449e37 ("qmp: use migrate-set-parameters in favor of deprecated options")
changed the initial "migrate_set_downtime" QMP call to the more recent
"migrate-set-parameters", but forgot to do so for the auto-increase code
further below.

Since the units of the two calls don't match, this would have caused the
auto-increase to increase the limit to absurd levels as soon as it kicked
in (ms treated as s).

Update the second call to the new version as well, and while at it remove
the unnecessary "defined()" check for $migrate_downtime, which is always
initialized from the defaults anyway.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agorestore: parse volid with $noerr
Fabian Grünbichler [Thu, 2 Apr 2020 13:12:37 +0000 (15:12 +0200)]
restore: parse volid with $noerr

otherwise VMA files passed in as paths instead of as volids don't
work anymore.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agovm_start: split out NBD disk allocation
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:32 +0000 (13:41 +0200)]
vm_start: split out NBD disk allocation

as preparation of targetstorage mapping and remote migration. this also
removes re-using of the $local_volumes hash in the original code.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agovm_start: split out lock + initial checks
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:31 +0000 (13:41 +0200)]
vm_start: split out lock + initial checks

to start breaking up vm_start before extending parts for new migration
features like storage and network mapping.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agovm_start: condense signature
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:30 +0000 (13:41 +0200)]
vm_start: condense signature

as preparation for refactoring it further. remote migration will add
another 1-2 parameters, and it is already unwieldly enough as it is.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigrate: improve cleanup_remotedisks
Fabian Grünbichler [Mon, 30 Mar 2020 11:41:29 +0000 (13:41 +0200)]
migrate: improve cleanup_remotedisks

to also handle cases where disk allocation failed in the remote
vm_start, and we only have a bitmap but no target drive information.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agorescan: fix call to foreach_volume
Fabian Grünbichler [Wed, 1 Apr 2020 11:02:59 +0000 (13:02 +0200)]
rescan: fix call to foreach_volume

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agobump version to 6.1-12
Fabian Grünbichler [Mon, 30 Mar 2020 07:32:53 +0000 (09:32 +0200)]
bump version to 6.1-12

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agoupdate_disk_config: use config volume iterators instead of loops
Fabian Ebner [Thu, 26 Mar 2020 08:09:37 +0000 (09:09 +0100)]
update_disk_config: use config volume iterators instead of loops

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoImplement volume-related helpers and use new foreach_volume
Fabian Ebner [Thu, 26 Mar 2020 08:09:36 +0000 (09:09 +0100)]
Implement volume-related helpers and use new foreach_volume

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agofix efidisks on storages with minimum sizes bigger than OVMF_VARS.fd
Dominik Csapak [Wed, 12 Feb 2020 12:31:06 +0000 (13:31 +0100)]
fix efidisks on storages with minimum sizes bigger than OVMF_VARS.fd

on storages where the minimum size of images is bigger than the real
OVMF_VARS.fd file, they get padded to their minimum size

when using such an image, qemu maps it fully to the vm, but the efi
does not find the vars region and creates a file on the first efi
partition it finds

this breaks some settings in the ovmf, such as resolution

to fix this, we have to specify the size for the pflash, so that
qemu only maps the first n bytes in the vm (this only works for
raw files, not for qcow2)

we also have to use the correct size when converting between storages
in 'clone_disk' (used for move disk and cloning vms) and when
live migrating to different storages

when we now expect that the source image is always correctly used/created
(e.g. raw with size=x in pflash argument) then we always create the
target correctly

when encountering users which have a non-valid image (e.g. a efidisk
moved from zfs to qcow2 before this patch), we have to tell them to
recreate the efidisk and the settings on it

we have to version_guard it to 4.1+pve2 (since we haven't bumped yet
since the change to pve2)

also add 2 tests, one for the old version and one for the new

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-by: Stefan Reiter <s.reiter@proxmox.com>
Reviewed-by: Stefan Reiter <s.reiter@proxmox.com>
[ Thomas: rebased to master ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agomigration with targetstorage: check if target storage supports images
Fabian Ebner [Thu, 26 Mar 2020 08:09:32 +0000 (09:09 +0100)]
migration with targetstorage: check if target storage supports images

This makes sure that live migration also respects content types.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agomigrate sync disks: split long line
Thomas Lamprecht [Fri, 27 Mar 2020 09:17:28 +0000 (10:17 +0100)]
migrate sync disks: split long line

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agomigrate sync_disks: use own variable for often referenced storage config
Thomas Lamprecht [Fri, 27 Mar 2020 09:12:04 +0000 (10:12 +0100)]
migrate sync_disks: use own variable for often referenced storage config

also fix two places where we used $self->{vmid} even if $vmid was in
scope (and the same).

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agomigrate: cleanup disk/bitmaps if 'qm start' failed
Fabian Grünbichler [Thu, 26 Mar 2020 14:42:59 +0000 (15:42 +0100)]
migrate: cleanup disk/bitmaps if 'qm start' failed

since bitmaps are set early on, and 'qm start' potentially has allocated
the disks but still failed. we can only clean up what we know about
anyway, so the disk part is still only best effort.

also use replicated_volumes instead of bitmap existence to check for
replicated volumes, since 'qm start' on an old node that does not
understand replicated volumes might have allocated a new volume that we
DO want to clean up, and not skip.

also cleanup disks after stopping target VM, otherwise we might end up
in a situation where the target VM is still running and using the disks,
thus blocking the disk cleanup.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigrate: fix auto-vivification in cleanup_bitmaps
Fabian Grünbichler [Thu, 26 Mar 2020 14:42:58 +0000 (15:42 +0100)]
migrate: fix auto-vivification in cleanup_bitmaps

this does not currently trigger since nothing uses $self->{target_drive}
afterwards.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agomigrate: fix replication false-positives
Fabian Grünbichler [Thu, 26 Mar 2020 14:42:57 +0000 (15:42 +0100)]
migrate: fix replication false-positives

by only checking for replicatable volumes when a replication job is
defined, and passing only actually replicated volumes to the target node
via STDIN, and back via STDOUT.

otherwise this can pick up theoretically replicatable, but not actually
replicated volumes and treat them wrong.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agoCPUConfig: fix module load when pmxcfs is unavailable
Fabian Grünbichler [Thu, 26 Mar 2020 08:02:05 +0000 (09:02 +0100)]
CPUConfig: fix module load when pmxcfs is unavailable

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agobump version to 6.1-11
Thomas Lamprecht [Thu, 26 Mar 2020 08:00:48 +0000 (09:00 +0100)]
bump version to 6.1-11

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: fix up PBS plugin
Thomas Lamprecht [Thu, 26 Mar 2020 07:49:16 +0000 (08:49 +0100)]
vzdump: fix up PBS plugin

fixes commit 0b2f574b4ccd68ba7c1ebf1927beeff33cca179d

enforce_vm_running_for_backup is now witout return value, for the PBS
I forgot to remove an now outdated call to handle_vm_powerstate, drop
that.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoVerify VM-specific CPU configs seperately
Stefan Reiter [Wed, 12 Feb 2020 15:11:23 +0000 (16:11 +0100)]
Verify VM-specific CPU configs seperately

$cpu_fmt is being reused for custom CPUs as well as VM-specific CPU
settings. The "pve-vm-cpu-conf" format is introduced to verify a config
specifically for use as VM-specific settings.

"pve-cpu-conf" is registered for use in custom CPU API calls (where no
additional checks are required).

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agoAdapt CPUConfig to handle custom models
Stefan Reiter [Wed, 12 Feb 2020 15:11:22 +0000 (16:11 +0100)]
Adapt CPUConfig to handle custom models

Turn CPUConfig into a SectionConfig with parsing/writing support for
custom CPU models. IO is handled using cfs.

Namespacing will be provided using "custom-" prefix for custom model
names (in VM config only, cpu-models.conf will contain unprefixed
names).

Includes two overrides to avoid writing redundant information to the
config file, additionally get_custom_model is used to retrieve a custom
model configuration by name.

Resolve custom names in print_cpu_device when a custom cpu is passed.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agobump version to 6.1-10
Thomas Lamprecht [Wed, 25 Mar 2020 14:16:29 +0000 (15:16 +0100)]
bump version to 6.1-10

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoFix calls to get_replicateable_volumes
Fabian Ebner [Wed, 25 Mar 2020 12:18:25 +0000 (13:18 +0100)]
Fix calls to get_replicateable_volumes

There is a need to set $noerr, because otherwise migration for a
VM with a non-replicatable volume fails with:
missing replicate feature on volume 'myfs:107/vm-107-disk-2.raw'

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agobump version to 6.1-9
Thomas Lamprecht [Wed, 25 Mar 2020 09:07:23 +0000 (10:07 +0100)]
bump version to 6.1-9

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoqemu migrate: sort and split module usage
Thomas Lamprecht [Wed, 25 Mar 2020 09:05:58 +0000 (10:05 +0100)]
qemu migrate: sort and split module usage

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoadd basic version check for live-migration with replicated disks
Thomas Lamprecht [Wed, 25 Mar 2020 09:02:29 +0000 (10:02 +0100)]
add basic version check for live-migration with replicated disks

as we need at least pve-qemu in 4.2 for this to work, the target side
is implicitly checked with "to old version" check for migrate or the
mirror will fail anyway.

Just use the simple "qemu binary version check", as we could stil
live migrate an older snapshot with older machine versions if both
sides have a recent enough qemu.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agomigrate: add live-migration of replicated disks
Fabian Grünbichler [Tue, 17 Mar 2020 07:55:27 +0000 (08:55 +0100)]
migrate: add live-migration of replicated disks

with incremental drive-mirror and dirty-bitmap tracking.

1.) get replicated disks that are currently referenced by running VM
2.) add a block-dirty-bitmap to each of them
3.) replicate ALL replicated disks
4.) pass bitmaps from 2) to drive-mirror for disks from 1)
5.) skip replicated disks when cleaning up volumes on either source or
target

added error handling is just removing the bitmaps if an error occurs at
any point after 2, except when the handover to the target node has
already happened, since the bitmaps are cleaned up together with the
source VM in that case.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Tested-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agomigrate: add replication info to disk overview
Fabian Grünbichler [Tue, 17 Mar 2020 07:55:26 +0000 (08:55 +0100)]
migrate: add replication info to disk overview

to make migration logs a bit easier to grasp with a quick glance.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Tested-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agodrive-mirror: add support for incremental sync
Fabian Grünbichler [Tue, 17 Mar 2020 07:55:25 +0000 (08:55 +0100)]
drive-mirror: add support for incremental sync

by re-using a dirty bitmap that represents changes since the divergence
of source and target volume. requires a qemu that supports incremental
drive-mirroring, and will die otherwise.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Tested-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agoAdd unused description to drivedesc_hash
Fabian Ebner [Tue, 17 Mar 2020 12:28:09 +0000 (13:28 +0100)]
Add unused description to drivedesc_hash

Moved code so that initialization of drivedesc_hash stays a single block.
Avoid auto-vivication in parse_drive.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agoversion_guard: early out when major/minor version is high enough
Stefan Reiter [Thu, 19 Mar 2020 10:03:13 +0000 (11:03 +0100)]
version_guard: early out when major/minor version is high enough

E.g.: If a feature requires 4.1+pveN and we're using machine version 4.2
we don't need to increase the pve version to N (4.2+pve0 is enough).

We check this by doing a min_version call against a non-existant higher
pve-version for the major/minor tuple we want to test for, which can
only work if the major/minor alone is high enough.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
4 years agobump version to 6.1-8
Thomas Lamprecht [Fri, 20 Mar 2020 10:12:26 +0000 (11:12 +0100)]
bump version to 6.1-8

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agomigrate phase3: add to comment why a blockjob cancel is OK here
Thomas Lamprecht [Fri, 20 Mar 2020 10:08:20 +0000 (11:08 +0100)]
migrate phase3: add to comment why a blockjob cancel is OK here

Clarify why a cancel is actually not really canceling here, because
we're already finished with storage migration and the block jobs are
all in ready state and we (source) are going to stop soon to hand
over to target.

> Note that if you issue 'block-job-cancel' after 'drive-mirror' has
> indicated (via the event BLOCK_JOB_READY) that the source and
> destination are synchronized, then the event triggered by this
> command changes to BLOCK_JOB_COMPLETED, to indicate that the
> mirroring has ended and the destination now has a point-in-time
> copy tied to the time of the cancellation
-- qapi/block-core.json (QEMU 4.2)

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agorevert spice_ticket prefix change in 7827de4
Mira Limbeck [Fri, 20 Mar 2020 09:18:23 +0000 (10:18 +0100)]
revert spice_ticket prefix change in 7827de4

The change to the prefixed version broke migration from new to old
qemu-server version. This reverts the change and adds a TODO comment for
7.0 to change it to the prefixed version then.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
4 years agoDie on misaligned memory for hotplugging
Stefan Reiter [Wed, 18 Mar 2020 15:18:45 +0000 (16:18 +0100)]
Die on misaligned memory for hotplugging

...instead of booting with an invalid config once and then silently
changing the memory size for consequent VM starts.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Tested-by: Alwin Antreich <a.antreich@proxmox.com>
4 years agoDisable memory hotplugging for custom NUMA topologies
Stefan Reiter [Wed, 18 Mar 2020 15:18:44 +0000 (16:18 +0100)]
Disable memory hotplugging for custom NUMA topologies

This cannot work, since we adjust the 'memory' property of the VM config
on hotplugging, but then the user-defined NUMA topology won't match for
the next start attempt.

Check needs to happen here, since it otherwise fails early with "total
memory for NUMA nodes must be equal to vm static memory".

With this change the error message reflects what is actually happening
and doesn't allow VMs with exactly 1GB of RAM either.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Tested-by: Alwin Antreich <a.antreich@proxmox.com>
4 years agovzdump archive_vma: move getting QMPClient nearer to using sites
Thomas Lamprecht [Thu, 19 Mar 2020 17:48:41 +0000 (18:48 +0100)]
vzdump archive_vma: move getting QMPClient nearer to using sites

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: indentation and code cleanup
Thomas Lamprecht [Thu, 19 Mar 2020 17:46:49 +0000 (18:46 +0100)]
vzdump: indentation and code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: factor out VM powerstate handling and qmp backup cancel
Thomas Lamprecht [Thu, 19 Mar 2020 17:41:43 +0000 (18:41 +0100)]
vzdump: factor out VM powerstate handling and qmp backup cancel

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: factor out QGA FS freeze/thaw
Thomas Lamprecht [Thu, 19 Mar 2020 17:37:20 +0000 (18:37 +0100)]
vzdump: factor out QGA FS freeze/thaw

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: factor out fork_compressor_pipe
Thomas Lamprecht [Thu, 19 Mar 2020 17:34:31 +0000 (18:34 +0100)]
vzdump: factor out fork_compressor_pipe

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: factor out _get_task_devlist
Thomas Lamprecht [Thu, 19 Mar 2020 17:32:00 +0000 (18:32 +0100)]
vzdump: factor out _get_task_devlist

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: refactor and cleanup code in query_backup_status_loop
Thomas Lamprecht [Thu, 19 Mar 2020 16:15:45 +0000 (17:15 +0100)]
vzdump: refactor and cleanup code in query_backup_status_loop

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: use QemuConfig directly to set/unset locks
Thomas Lamprecht [Thu, 19 Mar 2020 14:58:41 +0000 (15:58 +0100)]
vzdump: use QemuConfig directly to set/unset locks

no need to fork/exec a process for that..

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump: code cleanup
Thomas Lamprecht [Thu, 19 Mar 2020 14:58:13 +0000 (15:58 +0100)]
vzdump: code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovzdump prepare: refactor and code cleanup
Thomas Lamprecht [Thu, 19 Mar 2020 10:48:19 +0000 (11:48 +0100)]
vzdump prepare: refactor and code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agovm_start: drop redundant if
Fabian Grünbichler [Wed, 18 Mar 2020 09:08:54 +0000 (10:08 +0100)]
vm_start: drop redundant if

since both if and else branch contain identical code

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agodrive_mirror: rename variables and values
Fabian Grünbichler [Wed, 18 Mar 2020 07:21:29 +0000 (08:21 +0100)]
drive_mirror: rename variables and values

and add some more details to comments.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agoadd unix socket support for NBD storage migration
Mira Limbeck [Tue, 17 Mar 2020 19:56:12 +0000 (20:56 +0100)]
add unix socket support for NBD storage migration

The reuse of the tunnel, which we're opening to communicate with the target
node and to forward the unix socket for the state migration, for the NBD unix
socket requires adding support for an array of sockets to forward, not just a
single one. We also have to change the $sock_addr variable to an array
for the cleanup of the socket file as SSH does not remove the file.

To communicate to the target node the support of unix sockets for NBD
storage migration, we're specifying an nbd_protocol_version which is set
to 1. This version is then passed to the target node via STDIN. Because
we don't want to be dependent on the order of arguments being passed
via STDIN, we also prefix the spice ticket with 'spice_ticket: '. The
target side handles both the spice ticket and the nbd protocol version
with a fallback for old source nodes passing the spice ticket without a
prefix.
All arguments are line based and require a newline in between.

When the NBD server on the target node is started with a unix socket, we
get a different line containing all the information required to start
the drive-mirror. This contains the unix socket path used on the target node
which we require for forwarding and cleanup.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
4 years agoparse nbd_protocol_version if available
Mira Limbeck [Tue, 17 Mar 2020 19:56:11 +0000 (20:56 +0100)]
parse nbd_protocol_version if available

For secure live migration with local disks via NBD over a unix socket,
we have to somehow communicate from the source node to the target node
if it supports it. This is because there can only be one NBD server with
exactly one socket bound.

The source node passes that information via STDIN. Support for
'spice_ticket: (...)' is added in addition to 'nbd_protocol_version:
<version>'. As old source nodes send the spice ticket without a prefix,
we still have to have a fallback for this case. New information should
always be passed via a prefix that is matched, otherwise it will be
recognized as spice ticket.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
4 years agoadd NBD server unix socket support in vm_start
Mira Limbeck [Tue, 17 Mar 2020 19:56:10 +0000 (20:56 +0100)]
add NBD server unix socket support in vm_start

As the NBD server spawned by qemu can only listen on a single socket,
we're dependent on a version being passed to vm_start that indicates
which protocol can be used, TCP or Unix, by the source node.

The change in socket type (TCP to Unix) comes with a different URI. For
unix sockets it has the form: 'nbd:unix:<path/to/socket>:exportname=<device>'.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
4 years agoadd qemu_drive_mirror_monitor completion modes
Mira Limbeck [Tue, 17 Mar 2020 19:56:09 +0000 (20:56 +0100)]
add qemu_drive_mirror_monitor completion modes

With Qemu 4.2 we encountered a problem with unix sockets and SSH socket
forwarding for drive-mirror. It seems the socket gets reopened again and
again after it closes for some reason. This can be worked around by
specifying 'block-job-cancel' instead of 'block-job-complete' when we're
not interested in swapping the disks again from NBD to their original
protocol. This is always the case when we use drive-mirror for live
migrating a VM.

qemu_drive_mirror is used for migration and for clone_disk. All in all
we have 3 cases to handle. Either the 'skip' case which skips the
completion of the job. The 'wait' case which was the default before and
still is when $completion is undefined. And the new 'wait_noswap' case
which is used for the live migration.
If 'wait_noswap' is specified, we issue a 'block-job-cancel' once the block
job is in 'ready' state. This completes the block job without swapping the
disks.

clone_disk always uses 'block-job-cancel' via the qemu_blockjobs_cancel
sub.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
4 years agoChange format for unused drives
Fabian Ebner [Thu, 12 Mar 2020 10:19:12 +0000 (11:19 +0100)]
Change format for unused drives

and make it match with what parse_drive does. Even though the 'real' format
was pve-volume-id, callers already expected that parse_drive returns a hash
with a valid 'file' key (e.g. PVE/API2/Qemu.pm:1147ff).

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Reviewed-By: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agofix #2580: api/delete: drop VM from HA resources if purge is set
Thomas Lamprecht [Thu, 12 Mar 2020 12:31:41 +0000 (13:31 +0100)]
fix #2580: api/delete: drop VM from HA resources if purge is set

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agod/control: bump versioned dependency for libpve-guest-common-perl (>= 3.0-5)
Thomas Lamprecht [Thu, 12 Mar 2020 10:11:58 +0000 (11:11 +0100)]
d/control: bump versioned dependency for libpve-guest-common-perl (>= 3.0-5)

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoarchive_pbs: call backup_cancel only when job is really started
Dietmar Maurer [Wed, 11 Mar 2020 06:55:58 +0000 (07:55 +0100)]
archive_pbs: call backup_cancel only when job is really started

4 years agoarchive_vma: call backup_cancel only when job is really started
Dietmar Maurer [Wed, 11 Mar 2020 06:55:57 +0000 (07:55 +0100)]
archive_vma: call backup_cancel only when job is really started

4 years agoPVE/QemuServer.pm - proxmox backup server restore: use new pbs-restore binary
Dietmar Maurer [Wed, 11 Mar 2020 06:55:56 +0000 (07:55 +0100)]
PVE/QemuServer.pm - proxmox backup server restore: use new pbs-restore binary

This is much faster than using a pipe with qemu-img.

4 years agocleanup backup code: share code between restore_vma_archive and restore_proxmox_backu...
Dietmar Maurer [Wed, 11 Mar 2020 06:55:55 +0000 (07:55 +0100)]
cleanup backup code: share code between restore_vma_archive and restore_proxmox_backup_archive

4 years agoimplement restore from proxmox backup storage
Dietmar Maurer [Wed, 11 Mar 2020 06:55:54 +0000 (07:55 +0100)]
implement restore from proxmox backup storage

4 years agoadd support for proxmox backup
Dietmar Maurer [Wed, 11 Mar 2020 06:55:53 +0000 (07:55 +0100)]
add support for proxmox backup

4 years agoAppend newline to all QGA commands
Kamil Trzcinski [Mon, 9 Mar 2020 13:32:44 +0000 (14:32 +0100)]
Append newline to all QGA commands

Since the MacOS Mojave Apple ships AppleQEMUGuestAgent by default.
However, it does not fully adhere to QGA specs as they do expect each
command to be newline delimited.

This makes each command to be newline delimited which is harmless for
all other systems (Windows, Linux), but enable guest agent by default
without any changes on OSX.

Signed-off-by: Kamil Trzcinski <ayufan@ayufan.eu>
Tested-by: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
4 years agosdn: use sdn tap_create|plug
Alexandre Derumier [Mon, 9 Mar 2020 09:24:21 +0000 (10:24 +0100)]
sdn: use sdn tap_create|plug

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agocloudinit: make genisoimage only output errors
Thomas Lamprecht [Tue, 10 Mar 2020 13:47:03 +0000 (14:47 +0100)]
cloudinit: make genisoimage only output errors

avoids a genisoimage output like:
> Total translation table size: 0
> Total rockridge attributes bytes: 417
> Total directory bytes: 0
> Path table size(bytes): 10
> Max brk space used 0
> 178 extents written (0 MB)

on every VM start.

Rather than that useless output, tell genisoimage to be quiet, which
still prints errors but nothing else. Additionally print a short
single line about that we're to create the cloud-init iso.

Reformat while at it.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agod/control: bump versioned dependency for libpve-guest-common-perl (>= 3.0-4)
Thomas Lamprecht [Tue, 10 Mar 2020 13:28:26 +0000 (14:28 +0100)]
d/control: bump versioned dependency for libpve-guest-common-perl (>= 3.0-4)

for the moved definedness-safe comparison methods

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agofollowup: do not import unused methods
Thomas Lamprecht [Tue, 10 Mar 2020 13:26:29 +0000 (14:26 +0100)]
followup: do not import unused methods

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoQemuServer: use helper functions from GuestHelpers
Oguz Bektas [Wed, 19 Feb 2020 16:07:56 +0000 (17:07 +0100)]
QemuServer: use helper functions from GuestHelpers

removes safe_string_ne and safe_num_ne code which is now shared in
GuestHelpers. also change all the calls to use the shared definitions.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
4 years agobump version to 6.1-7
Thomas Lamprecht [Mon, 9 Mar 2020 18:12:20 +0000 (19:12 +0100)]
bump version to 6.1-7

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoConsistently use format determined in 'PVE::Storage::foreach_volid'
Fabian Ebner [Mon, 9 Mar 2020 12:24:51 +0000 (13:24 +0100)]
Consistently use format determined in 'PVE::Storage::foreach_volid'

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
LGTM-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agosync_disks: Always set 'snapshots' for qcow2 and vmdk volumes
Fabian Ebner [Mon, 9 Mar 2020 12:24:50 +0000 (13:24 +0100)]
sync_disks: Always set 'snapshots' for qcow2 and vmdk volumes

This fixes an issue when migrating a VM with an unused volume with format
qcow2 or vmdk. Since 'snapshots' wasn't set, storage_migrate wanted to
export/import with format raw+size instead. Therefore it used (instead of
just 'dd') 'qemu-img convert', which fails when its output leaves through
a pipe. Upon importing, a second error is present, because the format from
the volume ID doesn't match the format of the stream and there is no
conversion yet.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
LGTM-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
4 years agoupdate_disksize: small code cleanup
Thomas Lamprecht [Sat, 7 Mar 2020 17:34:21 +0000 (18:34 +0100)]
update_disksize: small code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoAlso update disk size if there was no old size
Fabian Ebner [Mon, 2 Mar 2020 10:33:48 +0000 (11:33 +0100)]
Also update disk size if there was no old size

If for whatever reason there is no size in the property string
of a drive, 'qm rescan' would do nothing for that drive and
live migration would also fail.

Also adds a check to avoid potential auto-vivification of volid_hash->{$volid}

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>