我昨天花了所有的时间进行研究,终于能够启动Windows XP。对于其他OS,它也应该有点相似。但是操作是一切,但并非无关紧要。
因为这是一项危险的操作,所以我建议备份您的宝贵数据。
步骤如下:
制备
如果是Windows XP,则需要使其忘记当前磁盘号和分区设置,因此在迁移之前,需要从虚拟机上的HKEY_LOCAL_MACHINE / MountedDevices项中删除所有值。内核将在下次重启时重建它。在Linux虚拟机上,这意味着在迁移后修复fstab。
挂载VDI映像
您不能仅将整个VDI复制到分区,因为它也包含MBR。您只需要复制虚拟分区,因此首先需要找到一种挂载VDI的方法。
您需要nbd
驱动程序和qemu-nbd
命令。在Ubuntu上,它在qemu-kvm
软件包中。
首先加载nbd驱动程序:
# modprobe nbd
这应该使中的一些nbd
设备/dev
。
然后挂载VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
对于所有虚拟分区,应为/dev/nbd0p1
,等等。这些可以像任何普通设备一样安装。/dev/nbd0p2
/dev/nbd0p3
迁移分区
使用dd
该,卸载操作前两个分区:
# dd -if=<nbd_device> -of=<real_partition>
例如。:
# dd -if=/dev/nbd0p3 -of=/dev/sda4
操作dd
是无声的,这可能需要几分钟,甚至半个小时。在操作过程中,您可以打开终端并使用fdisk -l
以查看所有操作是否正常。
更新:
显然,nbd不是万无一失的解决方案。这可能会导致I / O错误,并使dd失败。而且下一次尝试立即失败。您也可以尝试使用以下命令制作原始磁盘VMDK(在Linux下):
$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda
您需要加入disk
小组才能使其正常工作。然后将此vmdk作为辅助硬盘驱动器添加到虚拟机,然后dd
对分区使用Live Linux ISO 。
修复NTFS分区的启动扇区
这是朴实的部分。
我们已经准备好了,但是Windows XP无法启动,因为我们需要将文件系统的隐藏扇区数设置为offset 0x1C
。这基本上是NTFS分区之前的多个扇区。我们可以从fdisk -ul
命令中获取此号码。所述start
的输出状态的给定的分区开始处的扇区字段,它基本上是分区之前的扇区数。因此,从那里获取数字,例如使用gcalctool将其转换为十六进制。
使用打开分区hexedit
,如下所示:
# hexedit /dev/sda4
然后在1C
偏移处以小端顺序写入隐藏扇区的数量。小远方意味着:0xABCDEFGH
将GH EF CD AB
。如果十六进制数字短于8位数字,则在其前面加上零。
完成后,保存并退出(Ctrl + X)。
设置GRUB
您必须告诉GRUB直接启动该分区,为GRUB添加以下菜单项:
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
哪里(hdX, Y)
标识分区。对于默认硬盘,X为0,对于默认硬盘为1 /dev/sda
,对于其他为/dev/sdb
2。Y是分区号。0代表/dev/sda1
,1代表/dev/sda2
,依此类推。
对于GRUB2,这也应该类似,但是它对菜单项使用的语法略有不同。
最后的润色
新的NTFS分区已准备好启动。但是您仍然需要进行一些黑客操作才能访问Windows XP桌面。其他系统可能需要不同的技巧。首先,需要修复boot.ini。
[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
相应地设置分区号。我将其安装在/ dev / sda4上。因此分区号应为3。
如果Windows在登录屏幕之前冻结,则可能需要在注册表中修复MountedDevices条目。
<path to windows>/system32/config/system
您可以通过来查看注册表chntpw
。如果您的系统驱动器号不是C,这可能是一个问题。由于chntpw
的注册表写入功能非常有限,因此您需要进行回退并使用ghex2之类的hexeditor进行修复。在我的情况下\DosDevices\C:
,您需要查找C并用其他驱动器号替换F
。
完成这些之后,您应该能够访问桌面,现在您需要寻找所有驱动程序,但这超出了本教程的范围。
资料来源
将Windows XP移至其他分区
在Linux下挂载VDI