[libvirt] [PATCH 2/3] virsh: Add --unsafe option to migrate command

Jiri Denemark jdenemar at redhat.com
Tue Feb 21 16:17:22 UTC 2012

 tools/virsh.c   |    4 ++++
 tools/virsh.pod |   10 +++++++++-
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 66ba61c..4e30325 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -6733,6 +6733,7 @@ static const vshCmdOptDef opts_migrate[] = {
     {"copy-storage-inc", VSH_OT_BOOL, 0, N_("migration with non-shared storage with incremental copy (same base image shared between source and destination)")},
     {"change-protection", VSH_OT_BOOL, 0,
      N_("prevent any configuration changes to domain until migration ends)")},
+    {"unsafe", VSH_OT_BOOL, 0, N_("force migration even if it may be unsafe")},
     {"verbose", VSH_OT_BOOL, 0, N_("display the progress of migration")},
     {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
     {"desturi", VSH_OT_DATA, VSH_OFLAG_REQ, N_("connection URI of the destination host as seen from the client(normal migration) or source(p2p migration)")},
@@ -6806,6 +6807,9 @@ doMigrate (void *opaque)
     if (vshCommandOptBool (cmd, "change-protection"))
+    if (vshCommandOptBool(cmd, "unsafe"))
+        flags |= VIR_MIGRATE_UNSAFE;
     if (xmlfile &&
         virFileReadAll(xmlfile, 8192, &xml) < 0) {
         vshError(ctl, _("file '%s' doesn't exist"), xmlfile);
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 0d5a41d..c9c7b13 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -765,7 +765,7 @@ type attribute for the <domain> element of XML.
 =item B<migrate> [I<--live>] [I<--direct>] [I<--p2p> [I<--tunnelled>]]
 [I<--persistent>] [I<--undefinesource>] [I<--suspend>] [I<--copy-storage-all>]
-[I<--copy-storage-inc>] [I<--change-protection>] [I<--verbose>]
+[I<--copy-storage-inc>] [I<--change-protection>] [I<--unsafe>] [I<--verbose>]
 I<domain-id> I<desturi> [I<migrateuri>] [I<dname>]
 [I<--timeout> B<seconds>] [I<--xml> B<file>]
@@ -786,6 +786,14 @@ is implicitly enabled when supported by the hypervisor, but can be explicitly
 used to reject the migration if the hypervisor lacks change protection
 support.  I<--verbose> displays the progress of migration.
+In some cases libvirt may refuse to migrate the domain because doing so may
+lead, e.g., to data corruption and thus the migration is considered unsafe.
+For QEMU domain, this may happen if the domain uses disks without explicitly
+setting cache mode to "none". Migrating such domains is unsafe unless the disk
+images are stored on coherent clustered filesystem, such as GFS2 or GPFS. If
+you are sure the migration is safe or you just do not care, use I<--unsafe>
+to force the migration.
 The I<desturi> is the connection URI of the destination host, and
 I<migrateuri> is the migration URI, which usually can be omitted.
 I<dname> is used for renaming the domain to new name during migration, which

More information about the libvir-list mailing list