convert: windows: Online all virtio disks at first boot
resolves: RHEL-56318
This commit is contained in:
parent
f07dd7cea7
commit
3c59f5fad1
@ -0,0 +1,93 @@
|
|||||||
|
From 094592e713b0e5c3e012cdd11901b573287d14f4 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 ();
|
||||||
|
@@ -668,6 +671,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
|
@ -7,7 +7,7 @@
|
|||||||
Name: virt-v2v
|
Name: virt-v2v
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.5.6
|
Version: 2.5.6
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: Convert a virtual machine to run on KVM
|
Summary: Convert a virtual machine to run on KVM
|
||||||
|
|
||||||
License: GPL-2.0-or-later AND LGPL-2.0-or-later
|
License: GPL-2.0-or-later AND LGPL-2.0-or-later
|
||||||
@ -47,6 +47,7 @@ Patch0017: 0017-RHEL-tests-Remove-btrfs-test.patch
|
|||||||
Patch0018: 0018-RHEL-Remove-block-driver-option.patch
|
Patch0018: 0018-RHEL-Remove-block-driver-option.patch
|
||||||
Patch0019: 0019-RHEL-Remove-o-rhv-o-rhv-upload-and-o-vdsm-modes.patch
|
Patch0019: 0019-RHEL-Remove-o-rhv-o-rhv-upload-and-o-vdsm-modes.patch
|
||||||
Patch0020: 0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
Patch0020: 0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
||||||
|
Patch0021: 0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch
|
||||||
|
|
||||||
%if !0%{?rhel}
|
%if !0%{?rhel}
|
||||||
# libguestfs hasn't been built on i686 for a while since there is no
|
# libguestfs hasn't been built on i686 for a while since there is no
|
||||||
@ -334,6 +335,10 @@ done
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 28 2024 Richard W.M. Jones <rjones@redhat.com> - 1:2.5.6-2
|
||||||
|
- convert: windows: Online all virtio disks at first boot
|
||||||
|
resolves: RHEL-56318
|
||||||
|
|
||||||
* Mon Aug 12 2024 Richard W.M. Jones <rjones@redhat.com> - 1:2.5.6-1
|
* Mon Aug 12 2024 Richard W.M. Jones <rjones@redhat.com> - 1:2.5.6-1
|
||||||
- Further fixes for QEMU Guest Agent install & VMware Tools removal
|
- Further fixes for QEMU Guest Agent install & VMware Tools removal
|
||||||
resolves: RHEL-50563
|
resolves: RHEL-50563
|
||||||
|
Loading…
Reference in New Issue
Block a user