我正在尝试在 Linux 下启动现有的 Windows XP 安装。在 VMWare Fusion 下这很容易,但在 Ubuntu 10.10 上做同样的事情让我很头疼。
首先,我尝试了 VMWare Server。(虚拟机是一项网络服务。)经过一番努力,Windows 似乎确实可以启动,但没有控制台交互,所以我无法输入 Windows 许可证密钥,而且 VMWare 本身似乎经常崩溃。它已正式停止支持,所以我想在最近的 Ubuntu 桌面下这不是一个好主意。
VirtualBox 安装非常简单,我可以启动我在 VMWare 下使用的 .vmdk 文件。不幸的是,这个过程花费的时间太长了,我需要使用新的机器映像。我使用以下命令再次克隆磁盘:
sudo dd if=/dev/sdf2 of=powerhouse.dd
VBoxManage convertfromraw powerhouse.dd powerhouse.vdi
但是我不断收到此消息并且没有操作系统:
A disk read error occurred
Press Ctrl+Alt+Del to restart
我猜想我正在尝试启动未分区的映像。我可以向现有 VDI 添加分区图吗?或者正确的操作流程是什么?(而且,未分区的映像在当今时代难道不只是过时的烦恼吗?)
答案1
要完全正确完成这一过程,可能是一个复杂的过程。VirtualBox.org 页面上的说明描述了执行此操作的一般过程以及一些陷阱:http://www.virtualbox.org/wiki/Migrate_Windows- 具体来说,它指出仅仅使用来dd
对分区进行映像是行不通的(正如您所发现的)。
缩短版本 - 获取您将要使用的设备的字节数,并将设备传送到 VBoxManage 以创建驱动器:
# fdisk -l /dev/sdf
Disk /dev/sdf: 1500.3 GB, 1500301910016 bytes
# cat /dev/sdf | VBoxManage convertfromraw stdin OutPutFile.vdi 1500301910016
如果你在该设备上还有其他你不想带过来的数据,那么你将需要一个更复杂的克隆实用程序,例如克隆兹拉它可以只使用一个分区(以及相关的引导加载程序信息)并将其“克隆”到新驱动器。在这种情况下,您将获取映像,然后启动一个新虚拟机(可能启动 Clonezilla Live ISO),其中包含一个空白虚拟硬盘,您可以将克隆的映像写入该硬盘。
答案2
您需要在复制的分区前添加 MBR 前缀和适当的空间量。对于许多磁盘,这将总共是 63 (0x3F) x 512K 块,但对于较新的驱动器,情况可能会有所不同。
我通过这样的方法取得了成功:
创建一个仅包含单个分区的新的、定制的 MBR 映像:$ sudo dd if=/dev/sdf count=63 | xxd > new-mbr.img.xxd $ vim new-mbr.img.xxd
构建图像:
$ { xxd -r new-mbr.img.xxd; dd if=/dev/sdf2; } \ | VBoxManage convertfromraw stdin newdrive.vdi \ $(( $partition_bytes + 63 * 512 ));
因为你需要了解MBR 的二进制格式为了做到这一点,可能更容易保留现有的 MBR,然后[sc]?fdisk
在启动生成的 .vdi 之前通过在 VM 中运行 live/rescue CD 来修复它。
获取分区的大小 ( $partition_bytes
) 也非常棘手,我想我是通过读取 MBR 中的值并乘以块大小 (512) 来解决这个问题的。我想sfdisk --dump
也会给你这个值。
不管怎样,在我从帽子里拿出几只狮子和一个爆炸性的外星人物品后,这确实起作用了。