我在这里尝试一些疯狂的东西。首先,我有一台安装了 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/sda4
grub 上作为双启动,并从 KVM 上的第二个小映像启动。
有想法吗?
答案1
免责声明:这更像是一个建议,而不是一个明智的答案。
既然您似乎能够将 Windows 分区复制到合法的物理分区 ( /dev/sda4
),为什么不直接/dev/sda
在虚拟机中启动呢?然后,您可以通过选择 GRUB 中的 Windows 选项来启动 Windows 分区。似乎以前已经做过这种设置:https://bbs.archlinux.org/viewtopic.php?id=68216