虚拟化 Windows 7 启动失败

虚拟化 Windows 7 启动失败

原料:运行带有 LinuxMint(主系统)和其他操作系统的系统,其中包括旧的 Windows 7 映像。系统通过 GRUB2 引导至 Ubuntu、Windows,没有任何问题。

这是系统的分区图:

(parted) print                                                            
Modell: ATA HGST HTS721010A9 (scsi)
Festplatte  /dev/sda:  1000GB
Sektorgröße (logisch/physisch): 512B/4096B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende   Größe   Typ       Dateisystem     Flags
 1      1049kB  252GB  252GB   primary   ntfs            boot
 4      252GB   306GB  54,6GB  extended
 6      252GB   273GB  21,0GB  logical   ext4
 5      273GB   306GB  33,6GB  logical   linux-swap(v1)
 2      306GB   359GB  52,4GB  primary   ext4
 3      359GB   983GB  624GB   primary   ext4

分区 1 保存要转换为虚拟卷的旧 W7 映像。

设想:

  1. 在 Windows 下使用 disk2vhd 工具将现有的旧 W7 系统转换为 VM 映像。结果 w7.vhdx 镜像文件 ✓ (注意:该镜像已经可以通过 QEMU 和 Super Grub2 Disk 启动。)
  2. 使用 qemu-image 将 w7.vhdx 转换为 qcow2 格式 ✓
  3. 使用qemu-system-x86_64 -enable-kvm -m 4096M -hda 'w7.qcow2' -vga virtio -usb -device usb-tablet -device usb-host,bus=usb-bus.0,hostbus=1,hostport=1.2 -cdrom /dev/sr0❌ => 启动 w7.qcow2 => 系统启动至 grub rescue
  4. 重新启动qemu-system-x86_64 -enable-kvm -m 4096M -hda 'w7.qcow2' -vga virtio -usb -device usb-tablet -device usb-host,bus=usb-bus.0,hostbus=1,hostport=1.2 -cdrom /dev/sr0 -boot menu=on
  5. 按 Esc 并从 DVD 驱动器中的 Super Grub2 Disk 启动 ✓ => 我能够启动 Windows 系统,一切正常。
  6. 尝试从 Live Stick 或 Ubuntu DVD 启动❌ => 系统挂起(我试图重新安装 GRUB2 以设法直接启动到 w7.qcow2 上的 W7 系统)

观察结果:

显然,disk2vhd 再现了磁盘的分区布局。 Super Grub 列出了驱动器的原始分区(见上文),其中“未检测到文件系统”是唯一的例外是复制的 W7 分区,具有正确的文件系统类型 NTFS 和正确的大小。

分手:

(parted) print disk                                                       
Fehler: W7.VHDX: unbekannte Partitionstabelle

磁盘:

Festplatte W7.VHDX: 226,3 GiB, 242934087680 Bytes, 474480640 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

问题: 如何修复 w7.qcow2 的启动,使 QEMU 直接启动到 Windows 系统或以 Windows 作为默认系统的 GRUB 启动菜单?

评论:我尝试了使用 kpartx、losetup 和 /dev/loop0 的方法来修复此问题,但没有效果。

答案1

以下是为 QEMU/KVM 生成可启动 VM 的步骤,该 VM 可直接启动到虚拟化 Windows 7 系统。我的系统使用 GRUB2 作为引导管理器(如果您的系统不同,您可能需要采用以下内容来满足您的需求)。

先决条件:Windows 7 DVD(如果手头没有,请从 Microsoft 下载 ISO 映像)、Windows 许可证密钥、CD 上的 SuperGRUB2 磁盘(从 www.supergrubdisk.org 下载)。

  1. 从 GRUB2 菜单启动现有的旧 W7 系统。
  2. 下载 DISK2VHD 工具。在开始转换之前,最好确保 Windows 中安装了 7Zip 或类似软件。
  3. 使用 DISK2VHD 转换现有系统(您可能需要预先清理常见的 Windows 混乱)。这会生成一个文件 .VHDX(在我的例子中为 w7.vhdx)。 (注意:该映像已经可以使用 QEMU 和 SuperGrub2 磁盘启动。)
  4. 使用 qemu-image 将 w7.vhdx 转换为 qcow2 格式(或您喜欢的其他格式)。
  5. 使用 DVD 驱动器中的 SuperGRUB2 磁盘,使用命令启动 w7.qcow2 qemu-system-x86_64 -enable-kvm -m 4096M -drive file=w7.qcow2 -vga virtio -cdrom /dev/sr0 -boot menu=on(这假设从 w7.qcow2 所在的目录发出命令;否则提供完整路径,例如在我的情况下为 /home/W7/w7.qcow2。您的 cdrom 设备也可能有另一个名字,以防你不知道 lsblk 会告诉你。)。系统启动时按 ESC 进入启动菜单。如果系统启动进入 grub rescue,请重新启动(好旧的 Ctrl-Alt-Del)并按 ESC 进入启动菜单。
  6. 选择从 DVD 启动。 SuperGRUB 菜单将出现,并在发现后列出您的 Windows(在我的情况下是两个)。选择任意 Windows 系统并启动。现在一切都应该正常了。然而,首次启动速度较慢,Windows 会安装多个设备驱动程序。确保在重新启动之前完成此操作!
  7. QEMU Windows 系统中的屏幕分辨率很可能会很糟糕,因此请根据您的需要进行调整。接下来打开命令提示符并键入bootrec.exe /?。 Windows 很可能会告诉您它没有可用的命令 bootrec。如果情况并非如此并且显示了 bootrec 的帮助,请继续执行下面的步骤 10。
  8. 现在我们需要 Windows DVD(bootrec.exe 无法从 Microsoft 下载,但可以从 Windows 7 ISO 获得): 在 QEMU 监视器中弹出 SuperGRUB 磁盘并更改为 Windows DVD。
  9. 使用 7Zip(或其他能够读取 WIM 文件的工具)打开 :\sources\boot.wim。 Bootrec.exe 位于 \1\Windows\System32 - 解压并存储在 C: 驱动器上。
  10. 从 Windows 命令提示符发出bootrec /fixmbr后跟bootrec /fixboot.确保设备驱动程序安装已完成,并最终shutdown /s /t 0在命令提示符下关闭系统(否则您可能会遇到休眠系统)。

就是这个。最好使用 QEMU 覆盖图像启动虚拟 W7 以保留原始设置。

谢谢尼科莱布莱恩对于 bootrec 建议。

相关内容