我有一个 FreeBSD-7 客户机(在 qcow2 磁盘映像中),当我从命令行启动它时,它工作正常
# kvm -drive file=freebsd7.disk
但是当从virt-manager
GUI 启动时,它会跳过第二阶段引导加载程序,然后挂起 —— 具体来说,它会自行“暂停”并且拒绝取消暂停。以下是它打印的最后几项内容的屏幕截图:
下面是 xml 配置的胡言乱语virsh -c qemu:///system dumpxml freebsd7-vm
:
<domain type='kvm'>
<name>freebsd7-vm</name>
<uuid>d91ca4d4-96d3-0f2f-1c18-cf4bc366c1ab</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>4</vcpu>
<os>
<type arch='x86_64' machine='pc-1.1'>hvm</type>
<boot dev='hd'/>
<bootmenu enable='no'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/zack/Boxes/freebsd-7.disk'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='network'>
<mac address='52:54:00:1d:9f:8e'/>
<source network='default'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
</devices>
</domain>
我确信可以通过更改配置来解决这个问题,但我不知道从哪里开始。
(是的,使用古老版本的 FBSD 是故意的)
编辑:如下所示,更改<vcpu placement='static'>4</vcpu>
为<vcpu placement='static'>1</vcpu>
可以成功启动。此外,从命令行运行具有多个处理器的 VM 会产生此崩溃转储:
# kvm -smp 2 -drive file=freebsd7.disk
KVM internal error. Suberror: 1
emulation failure
RAX=ffffffff8080e1c0 RBX=000000000009f000 RCX=00000000c0000080 RDX=0000000000000000
RSI=000000000000d238 RDI=0000000000000000 RBP=0000000000000000 RSP=0000000000000000
R8 =0000000000000000 R9 =0000000000000000 R10=0000000000000000 R11=0000000000000000
R12=0000000000000000 R13=0000000000000000 R14=0000000000000000 R15=0000000000000000
RIP=000000000009f076 RFL=00010086 [--S--P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 0000ffff 0000f300 DPL=3 DS16 [-WA]
CS =0008 0000000000000000 00000000 00209900 DPL=0 CS64 [--A]
SS =9f00 000000000009f000 0000ffff 0000f300 DPL=3 DS16 [-WA]
DS =0018 0000000000000000 ffffffff 00c09300 DPL=0 DS [-WA]
FS =0000 0000000000000000 0000ffff 0000f300 DPL=3 DS16 [-WA]
GS =0000 0000000000000000 0000ffff 0000f300 DPL=3 DS16 [-WA]
LDT=0000 0000000000000000 0000ffff 00008200 DPL=0 LDT
TR =0000 0000000000000000 0000ffff 00008b00 DPL=0 TSS64-busy
GDT= 000000000009f080 00000020
IDT= 0000000000000000 0000ffff
CR0=80000011 CR2=0000000000000000 CR3=000000000009c000 CR4=00000030
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
EFER=0000000000000501
Code=00 00 00 80 0f 22 c0 ea 70 f0 09 00 08 00 48 b8 c0 e1 80 80 <ff> ff ff ff ff e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 99 20 00 ff ff 00 00
对于我正在做的事情,回到单处理器是可以的,但我想了解为什么它不起作用。 VM 映像安装在不同的管理器 GUI(GNOME Boxes)下,它提供的配置控制要少得多,特别是可能为安装程序提供了单处理器环境。 FreeBSD 7 是否为单处理器和多处理器机器安装了不同的内核? 是否可以在不重新安装的情况下切换?
答案1
该kvm
命令使用默认参数,其中之一是仅启用一个 vCPU。我们运行多台 FreeBSD 7.x 机器,它们的设置与您的非常相似,但 BIOS 版本不同。我想知道您使用的 Qemu/KVM BIOS 中是否存在导致 FreeBSD 的多处理器支持出现故障的问题。正如您在此处看到的,只要它打印这些消息,它就会打印一些有关处理器数量的信息:http://f.cl.ly/items/1A451g3M3B1p1k1I0m1J/Screen%20Shot%202013-02-15%20at%2005.48.37.png
您是否尝试过使用一个 CPU 从 virt-manager 启动它?
作为参考,这是我的(一个正在运行的 FreeBSD VM)的输出virsh dumpxml test
:https://www.refheap.com/paste/11318
答案2
FreeBSD 默认使用启用 SMP 的内核自 2003 年 11 月以来,早在 7.4 版本发布之前。
和 Andrew 一样,我怀疑 BIOS 中的某些东西会混淆内核。启动菜单有几个选项,比如(如果我没记错的话)在禁用 ACPI 的情况下启动。这有时可能会有帮助。