QEMU来宾系统启动/ dev / sdc但不会从磁盘映像文件启动


1

我有一个安装在硬盘驱动器上的Windows XP副本,我想与QEMU一起运行。

当我直接从硬盘驱动器启动它运行良好:

qemu -m 256 -hda /dev/sdc
Starting Windows...etc...etc...

虽然硬盘容量为320GB,但我的系统实际上位于磁盘开头的4GB分区中:

/sbin/fdisk -l /dev/sdc

Disk /dev/sdc: 320 GB, 320070320640 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1         510     4096543    b  FAT32
Warning: Partition 1 does not end on cylinder boundary.

所以我想我只能将分区表和第一个分区(8192000扇区)复制到原始图像以供QEMU使用:

dd if=/dev/sdc of=winxp.img count=8192000

当然,既然winxp.img是副本/dev/sdc,它具有完全相同的分区布局:

/sbin/fdisk -l winxp.img

Disk /mnt/windata/winxp.raw: 4 GB, 4186667520 bytes
255 heads, 63 sectors/track, 509 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

                 Device Boot      Start         End      Blocks   Id  System
/mnt/windata/winxp.raw1   *           1         510     4096543    b  FAT32
Warning: Partition 1 does not end on cylinder boundary.

但是,当我尝试将原始映像与QEMU一起使用时,guest虚拟机系统将无法启动:

qemu -m 256 -hda winxp.img
Booting from hard disk...
NTLDR is missing

我可以更改哪些设置以使我的图像文件与QEMU兼容?我应该在分区表中还是在分区本身中更改某些内容以使其正常工作?是否有QEMU选项可以提供帮助?

或者是否可以使用/dev/sdc1QEMU的副本而不是副本/dev/sdc


1
试图运用我在这里找到的智慧:manuel.kiessling.net/2013/03/19 / ...
Dmitry Grigoryev

试图将分区与圆柱边界对齐。没有任何改变:QEMU仍然可以从HDD启动Windows,但不能从图像文件启动。
德米特里格里戈里耶夫2015年

试图在/ dev / loop0上挂载映像文件并用它启动QEMU。也没用。
Dmitry Grigoryev 2015年

所以,启动sdc很好 - 为什么你复制sdb呢?为什么只有8192000块?你是否试图sdc整体复制?另外,根据你的fdisk输出,磁盘“几何”略有改变,我不会对NTLDR对barf感到惊讶: - \另一件事:qemu你在使用时会启动sdc1吗?如果是这样,请尝试sdc1仅复制,而不是整个磁盘。
ckujau 2015年

1
尝试使用qemu -hdachs 选项来设置正确的几何图形。
baf 2015年

Answers:


0

如果您可以将您的图像文件“挂载”到Windows机器(最好是XP),您可以使用Microsoft工具来查看它可能出现的问题。分区必须是“活动的”,它必须是MBR(而不是GPT)格式化的磁盘,并且必须具有正确的引导扇区。

像diskpart和bootsect / nt52 / mbr这样的工具过去对我很有用。我不熟悉从Linux分区启动Windows。


你建议使用哪些工具?我会尝试OSFMountPartition Commander。虽然我很确定图像的分区表与磁盘上的相同,但我从中复制了图像。
德米特里格里戈里耶夫2015年

一个快速的谷歌'山DD图像窗口'列出了一些选项。我不能推荐任何,因为我没有使用它们。只是建议使用Windows工具(diskpart / bootsect)更轻松地解决Windows启动问题,这需要你在windows中安装dd映像
goofology 2015年

在Windows XP下运行的OSFMount可识别我的映像文件并成功安装分区。当然,NTLDR文件存在于根文件夹中。diskpart没有看到挂载的磁盘,也无法使用原始图像文件。
Dmitry Grigoryev 2015年

0

只是一个猜测:你没有得到MBR,因为我认为你已经想到了。整个磁盘太大了。所以....

1) grab a USB drive with enough space
get a working disk image;
convert to qcow2;
shrink it.

2) use gparted or parted to shrink the original.
e2fsck and tune2fs *may* be helpful, also resize2fs.

MBR位于磁盘空间的开头,我已经在原始驱动器上使用gparted来删除除第一个分区之外的所有分区。
德米特里格里戈里耶夫2015年

我复制了一个完整的320 GB磁盘映像(顺便说一下,它运行QEMU),但将其转换为qcow2失败。qemu-img convert -O qcow2 full.img full.qcowerror while writing sector 8495104: File too large
梅德格里戈里耶夫

嗯。以32位运行?
John P. Fisher

是的,2核x86处理器,2GB内存。
德米特里格里戈里耶夫2015年

32位操作系统限制文件大小。
John P. Fisher

0

看起来SeaBIOS(QEMU在模拟PC目标时使用)没有手动配置,并且总是自动决定驱动器几何。由于我的部分图像非常小,因此检测到其CHS几何图形8129 * 16 * 63而不是510 * 255 * 63。这样做是为了与不了解LBA的旧驱动器兼容,因此仅限于16个磁头。

由于MBR和BIOS中的驱动器几何形状不匹配,引导加载程序无法正常启动窗口。

从理论上讲,超过8GB的图像不应该受到影响(我知道我的320GB图像有效),因为超过8GB的驱动器必须支持LBA。不幸的是,我没有那个图像来测试这个假设。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.