如何将 Windows(NTFS).img 文件写入分区并将其添加到 grub?

如何将 Windows(NTFS).img 文件写入分区并将其添加到 grub?

我在这里尝试一些疯狂的东西。首先,我有一台安装了 Windows XP 的 VirtualBox 机器,使用 .vdi 格式。然后我将映像导出到 OVA,提取 .vmdk 并将其转换为原始 .img 文件。然后我通过 virt-manager 在 KVM 中创建了一个新的 VM,将此映像加载为硬盘并使其运行。

现在,我尝试通过 将整个映像复制到磁盘分区,dd并通过 在启动时启动此映像中的第一个 NTFS 分区grub。 到目前为止,我已经 dd 了映像中的第一个分区(实际的 NTFS 分区),并且 gParted 将其识别为 NTFS,grub 将其识别为 Windows 安装,但我无法启动它。 因此,我尝试将整个映像(包括分区表、引导扇区等)复制到这个/dev/sda4物理分区。 现在,映像正在通过 KVM 启动,但我找不到将其添加到 Grub 的方法。 我正在尝试找到一种通过循环挂载来实现的方法,我只是不知道如何配置 grub 来挂载/映射/启动此映像并访问其中的第一个(NTFS)分区。

我想做的事:

- Turn my XP image into a valid physical installation to dual boot
- Keep the VM running from this disk partition

这样,如果可能的话,我会在 Ubuntu 上使用 VM,或者在 grub 上启动它。

为了澄清起见,我使用的命令:

$ sudo su

# mounts the entire image
$ losetup /dev/loop0 /path/to/WindowsXP.img
$ fdisk -l /dev/loop0

> Device        Boot    Start   End         Blocks      Id  System
> /dev/loop0p1  *       63      31439204    15719571    7   HPFS/NTFS/exFAT

# mounts the first NTFS partition inside image (offset 63*512)
$ losetup /dev/loop1 -o 32256 /dev/loop0

此时,我已打开 NTFS 分区/dev/loop1和完整磁盘(带有 MBR)/dev/loop0。然后:

# copied the entire image to /dev/sda4. This is not recognized by GRUB, 
# therefore it must be loopmounted before booted via grub config somehow
$ dd if=/dev/loop0 of=/dev/sda4 bs=10m

# copied the NTFS virtual partition to physical one
# GRUB should recognize and boot it, since is a valid XP install, however it misses the partition table,
# so the virtual machine won't be able to boot it.
$ dd if /dev/loop1 of=/dev/sda4 bs=10m

作为替代方案,我考虑将第二个磁盘映像附加到 VM,仅使用 GRUB 和最少的信息来启动此分区。这样,我可以将 NTFS 分区保留在/dev/sda4grub 上作为双启动,并从 KVM 上的第二个小映像启动。

有想法吗?

答案1

免责声明:这更像是一个建议,而不是一个明智的答案。

既然您似乎能够将 Windows 分区复制到合法的物理分区 ( /dev/sda4),为什么不直接/dev/sda在虚拟机中启动呢?然后,您可以通过选择 GRUB 中的 Windows 选项来启动 Windows 分区。似乎以前已经做过这种设置:https://bbs.archlinux.org/viewtopic.php?id=68216

相关内容