- convert: windows: Online all virtio disks at first boot

- Add warning about virt-v2v-in-place not being supported
This commit is contained in:
eabdullin 2024-09-03 11:56:13 +03:00
parent 22250a7983
commit 54f3394565
3 changed files with 127 additions and 1 deletions

View File

@ -0,0 +1,24 @@
From 1dec94e52974e45fd3962dcbd51882fde7e9c306 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 9 Jul 2024 11:30:09 +0100
Subject: [PATCH] RHEL: Add warning about virt-v2v-in-place not being supported
Fixes: https://issues.redhat.com/browse/RHEL-40903
---
in-place/in_place.ml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 1c690a54..a70e812b 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -197,6 +197,9 @@ read the man page virt-v2v-in-place(1).
let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in
Getopt.parse opthandle.getopt;
+ warning "virt-v2v-in-place is NOT SUPPORTED for command line use. \
+ It is almost always better to use virt-v2v instead of this tool.";
+
(* Print the version, easier than asking users to tell us. *)
debug "%s: %s %s (%s)"
prog Config.package_name Config.package_version_full

View File

@ -0,0 +1,93 @@
From d26ed76801f9d3ce5d3863ca09dfa653b4bcd1b2 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 27 Aug 2024 12:36:41 +0100
Subject: [PATCH] convert: windows: Online all virtio disks at first boot
Windows 2022 (and possibly earlier versions back to around 2019) will
force offline any non-boot disks which change bus, apparently as a
security mitigation. The effect of this is that although the system
drive (C:) is present after conversion, other drives may seem to
disappear.
Running a Powershell script to bring all disks online seems risky.
The compromise is to bring online only virtio disks at first boot.
To further reduce risk, we only do this if there are non-system disks
(ie. > 1 disks in total), and only if we installed virtio drivers.
Fixes: https://issues.redhat.com/browse/RHEL-55763
Fixes: https://issues.redhat.com/browse/RHEL-55837
Related: https://issues.redhat.com/browse/MTV-1299
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1662286
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Thanks: Martin Necas
Acked-by: Martin Necas
(cherry picked from commit cb56f6f94dc153051515fc7aa0d9ca646f5e2340)
---
convert/convert_windows.ml | 39 +++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
index 52ca5bbe..352e1218 100644
--- a/convert/convert_windows.ml
+++ b/convert/convert_windows.ml
@@ -38,7 +38,8 @@ module G = Guestfs
* time the Windows VM is booted on KVM.
*)
-let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips =
+let convert (g : G.guestfs) source inspect i_firmware
+ block_driver _ static_ips =
(*----------------------------------------------------------------------*)
(* Inspect the Windows guest. *)
@@ -272,6 +273,8 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips =
Registry.with_hive_write g inspect.i_windows_software_hive
update_software_hive;
+ configure_online_disks block_driver;
+
configure_network_interfaces net_driver;
fix_ntfs_heads ();
@@ -662,6 +665,40 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips =
warning (f_"could not find registry key \
HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion")
+ and configure_online_disks block_driver =
+ (* If there are > 1 disks, run a script which will force Windows
+ * to bring them all online. Windows 2022 will offline non-boot disks
+ * where the bus changes as some sort of "security" mitigation.
+ * https://issues.redhat.com/browse/RHEL-55837
+ * https://issues.redhat.com/browse/MTV-1299
+ * https://bugzilla.redhat.com/show_bug.cgi?id=1662286
+ *)
+ let virtio_installed =
+ match block_driver with
+ | Inject_virtio_win.Virtio_blk | Virtio_SCSI -> true
+ | IDE -> false in
+ let more_than_one_disk = List.length source.s_disks > 1 in
+
+ if virtio_installed && more_than_one_disk then (
+ let psh_filename = "online-disks" in
+ let psh = ref [] in
+ let add = List.push_back psh in
+
+ add "# Uncomment this line for lots of debug output.";
+ add "# Set-PSDebug -Trace 1";
+ add "";
+ add "Write-Host \"Online all virtio disks\"";
+ add "";
+ add "Get-Disk | Where { $_.FriendlyName -like '*VirtIO*' } | % {";
+ add " Write-Host (' - ' + $_.Number + ': ' + $_.FriendlyName + '(' + [math]::Round($_.Size/1GB,2) + 'GB)')";
+ add " $_ | Set-Disk -IsOffline $false";
+ add " $_ | Set-Disk -IsReadOnly $false";
+ add "}";
+
+ (* Install the Powershell script to run late at firstboot. *)
+ Firstboot.add_firstboot_powershell g inspect.i_root psh_filename !psh
+ )
+
and configure_network_interfaces net_driver =
(* If we were asked to force network interfaces to have particular
* static IP addresses then it is done here by installing a

View File

@ -16,7 +16,7 @@
Name: virt-v2v
Epoch: 1
Version: 2.4.0
Release: 3%{?dist}
Release: 4%{?dist}.alma.1
Summary: Convert a virtual machine to run on KVM
License: GPL-2.0-or-later AND LGPL-2.0-or-later
@ -73,6 +73,11 @@ Patch0034: 0034-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch
Patch0035: 0035-Update-common-submodule.patch
Patch0036: 0036-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch
Patch0037: 0037-docs-Restate-position-on-removal-of-VMware-Tools.patch
# Patches were taken from:
# https://gitlab.com/redhat/centos-stream/rpms/virt-v2v/-/commit/620a64c9a372c5508695c424377bff5379c8e08b
Patch0038: 0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
# https://gitlab.com/redhat/centos-stream/rpms/virt-v2v/-/commit/3959367bee3f6ac93e00b23b77fade0ddd0fc062
Patch0039: 0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch
%if !0%{?rhel}
# libguestfs hasn't been built on i686 for a while since there is no
@ -377,6 +382,10 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check
%changelog
* Tue Sep 03 2024 Eduard Abdullin <eabdullin@almalinux.org> - 1:2.4.0-4.alma.1
- convert: windows: Online all virtio disks at first boot
- Add warning about virt-v2v-in-place not being supported
* Tue Aug 13 2024 Richard W.M. Jones <rjones@redhat.com> - 1:2.4.0-3
- Fixes to improve installation of QEMU Guest Agent and removal
of VMware Tools