From: Markus Frank <m.frank@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu-server v1 4/11] virtiofs: add live migration support
Date: Mon, 20 Oct 2025 14:17:39 +0200 [thread overview]
Message-ID: <20251020121807.280441-5-m.frank@proxmox.com> (raw)
In-Reply-To: <20251020121807.280441-1-m.frank@proxmox.com>
There are two migration methods with virtiofsd.
Virtiofsd in the 'find-paths' migration mode, tries to find the path
inside of the shared directory for every filesystem object that must be
transferred to the destination.
Add two extra parameters that verify file handles and confirm paths.
In the 'file-handles' migration mode every filesystem object is
converted to a file handle.
Add a parameter so that migration does not abort if an error occurs.
Aborting on error would result in a stopped VM on the destination node.
Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
src/PVE/QemuMigrate/Helpers.pm | 14 +++++++++++---
src/PVE/QemuServer/Virtiofs.pm | 17 +++++++++++++++++
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/PVE/QemuMigrate/Helpers.pm b/src/PVE/QemuMigrate/Helpers.pm
index f191565a..fef5e422 100644
--- a/src/PVE/QemuMigrate/Helpers.pm
+++ b/src/PVE/QemuMigrate/Helpers.pm
@@ -20,7 +20,6 @@ sub check_non_migratable_resources {
my @blockers = ();
if ($state) {
push @blockers, "amd-sev" if $conf->{"amd-sev"};
- push @blockers, "virtiofs" if PVE::QemuServer::Virtiofs::virtiofs_enabled($conf);
}
if (scalar(@blockers) && !$noerr) {
@@ -99,8 +98,17 @@ sub check_local_resources {
}
if ($k =~ m/^virtiofs/) {
my $entry = parse_property_string('pve-qm-virtiofs', $conf->{$k});
- $add_missing_mapping->('dir', $k, $entry->{dirid});
- $mapped_res->{$k} = { name => $entry->{dirid} };
+ if (my $dirid = $entry->{dirid}) {
+ $add_missing_mapping->('dir', $k, $dirid);
+ my $mapped_device = { name => $dirid };
+ $mapped_res->{$k} = $mapped_device;
+
+ if ($dir_map->{ids}->{$dirid}->{'live-migration-method'}) {
+ $mapped_device->{'live-migration'} = 1;
+ # don't add mapped device with live migration as blocker
+ next;
+ }
+ }
}
# sockets are safe: they will recreated be on the target side post-migrate
next if $k =~ m/^serial/ && ($conf->{$k} eq 'socket');
diff --git a/src/PVE/QemuServer/Virtiofs.pm b/src/PVE/QemuServer/Virtiofs.pm
index b820ad27..b8285192 100644
--- a/src/PVE/QemuServer/Virtiofs.pm
+++ b/src/PVE/QemuServer/Virtiofs.pm
@@ -177,6 +177,9 @@ sub start_virtiofsd {
my $dir_cfg = PVE::Mapping::Dir::find_on_current_node($virtiofs->{dirid});
+ my $dirid = $virtiofs->{dirid};
+ my $dir_properties = PVE::Mapping::Dir::config()->{ids}->{$dirid};
+
my $virtiofsd_bin = '/usr/libexec/virtiofsd';
if (!-f $virtiofsd_bin) {
die "virtiofsd is not installed. To use virtio-fs, install virtiofsd via apt.\n";
@@ -201,6 +204,20 @@ sub start_virtiofsd {
push @$cmd, '--readonly' if $virtiofs->{readonly};
push @$cmd, '--cache=' . $virtiofs->{cache} if $virtiofs->{cache};
push @$cmd, '--inode-file-handles=prefer' if $prefer_inode_fh;
+
+ if (my $method = $dir_properties->{'live-migration-method'}) {
+ # migration-on-error=abort would result in a stopped VM on the target node
+ push @$cmd, '--migration-on-error=guest-error';
+ if ($method eq 'find-paths') {
+ push @$cmd, '--migration-mode=find-paths';
+ push @$cmd, '--migration-verify-handles';
+ push @$cmd, '--migration-confirm-paths';
+ }
+ if ($method eq 'file-handles') {
+ push @$cmd, '--migration-mode=file-handles';
+ }
+ }
+
push @$cmd, '--syslog';
exec(@$cmd);
} elsif (!defined($pid2)) {
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-10-20 12:18 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-20 12:17 [pve-devel] [PATCH guest-common/qemu-server/docs/manager v1 0/11] Virtiofs improvements Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH guest-common v1 1/11] mapping: dir: add 'live-migration-method' parameter Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH qemu-server v1 2/11] fix #6370: virtiofs: add support for thread-pool-size option Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH qemu-server v1 3/11] virtiofs: add readonly option Markus Frank
2025-10-20 12:17 ` Markus Frank [this message]
2025-10-20 12:17 ` [pve-devel] [PATCH docs v1 5/11] virtiofs: add explanation for cache=metadata behavior Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH docs v1 6/11] virtiofs: add table for optional parameters Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH docs v1 7/11] virtiofs: add thread-pool-size description Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH docs v1 8/11] virtiofs: add documentation for live migration Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH manager v1 09/11] fix #6370: ui: virtiofs edit: add support for thread-pool-size option Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH manager v1 10/11] virtiofs edit: add readonly checkbox Markus Frank
2025-10-20 12:17 ` [pve-devel] [PATCH manager v1 11/11] directory mapping: add live-migration-method option for virtiofs Markus Frank
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251020121807.280441-5-m.frank@proxmox.com \
--to=m.frank@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox