开始运行 ppc64el 虚拟机时出现“Guest 尚未初始化显示器”。

开始运行 ppc64el 虚拟机时出现“Guest 尚未初始化显示器”。

解释: 我在 IBM 工作,正在尝试为 ubuntu 制作网络启动 (pxe) 原型。目标是将 maas 部署服务器部署到 ubuntu 14.0.4 下管理的 4 台虚拟机,以测试 juju 捆绑包 #39 (openstack 基础)。由于我的团队没有 4 台物理服务器,因此我们尝试使用虚拟机。请注意,这是 ppc64el 环境。

问题 在虚拟机中安装了用于网络启动 (pxe) 的 mini.iso 后,我们遇到“Guest 尚未初始化显示”。虚拟机无法启动,进入暂停状态,并且 maas 无法用于此虚拟机。

问题

  1. 来自 wiki.ubuntu.com/ppc64el 的 netboot mini.iso。

    能用来建立从pxe启动的VM吗?

    这些仅适用于裸机吗?

  2. 我发现https://lists.gnu.org/archive/html/qemu-discuss/2015-03/msg00027.html提示“内核不支持此主板型号”或“内核不支持图形”。这让我相信使用 netboot/pxe mini.iso无法在虚拟机中完成并且需要是裸机。

    可以将 netboot iso 放入 VM 吗?
    是不是因为 VM 仿真显卡不支持 mini.iso?

QEMU 窗口打开了,但我收到此错误“Guest 尚未初始化显示”我在配置 qemu 时启用了 -sdl 选项,但仍然收到该错误。

这不是一个错误。这只是 QEMU 告诉您客户操作系统尚未完成打开模拟显卡和显示输出所需的操作。

在这种情况下,可能的原因是您尝试运行一个在此主板型号上无法运行的内核,因此它在运行之前就崩溃了。如果内核没有内置图形支持,而只是向串行控制台输出,您也会看到此消息。

  1. 如果我们可以将 netboot mini.iso 用于 VM,那么我们在图形的 xml 文档定义中做错了什么?

vm6.xml或相关部分

/usr/bin/qemu-系统-ppc64le

<controller type='usb' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='virtio-serial' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</controller>
<interface type='bridge'>
  <mac address='00:1a:64:30:12:11'/>
  <source bridge='br3'/>
  <model type='rtl8139'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
  <target port='0'/>
  <address type='spapr-vio' reg='0x30000000'/>
</serial>
<console type='pty'>
  <target type='serial' port='0'/>
  <address type='spapr-vio' reg='0x30000000'/>
</console>
<input type='tablet' bus='usb'/>
<input type='keyboard' bus='usb'/>
<input type='mouse' bus='usb'/>
<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>

环境信息

  1. 服务器:ubuntu 14.04 trusty-ppc64el

  2. /wiki.ubuntu.com/ppc64el 正在使用 netboot mini.iso

  3. juju://jujucharms.com/u/james-page/openstack-base/bundle/39/

  4. Openstack 搭配 ceph 存储,需要 4 台机器

  5. 使用 maas 启动虚拟机:askubuntu.com/questions/292061/how-to-configure-maas-to-be-able-to-boot-virtual-machines

结果添加于 2015 年 9 月 22 日

==========================

解释为使事情正常运转所采取的措施以及 xml 示例(XML 代码部分)。xml 有助于开始使 ppc64le 工作以进入运行状态(而不是暂停状态)。一旦我们将虚拟机置于运行状态,我们仍然必须在 virt-manager 中进行修改以设置已部署虚拟机的 scsi 磁盘。下面的 XML 代码是最终在 virt-manager 中修改的版本,具有 8G scsi 磁盘。

笔记

  1. 需要运行ppc64_cpu --smt=off

  2. xml: 需要指定 arch ppc64

  3. xml:使用 qemu-system-ppc64 qemu

    添加于 2014 年 10 月 7 日。我忘了提到必须更改 xml 才能使用 VNC 控制台。请参阅提供的 XML。需要使用 VNC。必须有控制台标签,我相信应该有。此外,如果您设置 XML,您可能会遇到总线插槽定义问题,其中显示已使用的插槽。如果是这种情况,您可能需要调整总线/插槽编号,如下例所示。

    <console type='pty'>
      <target type='serial' port='0'/>
      <address type='spapr-vio' reg='0x30000000'/>
    </console>
    
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    
  4. 请注意,这会使虚拟机进入运行状态。

  5. 现在原始 xml 包含 mini.iso 。但是一旦在 maas 中运行,vm 就会进入就绪状态。然后在部署(启动按钮)时出现问题,VM 启动但部署失败。从 virt-manager 中删除 mini-iso 并创建 8G 的 scsi 磁盘。我的 maas 需要 scsi 磁盘来放置部署的操作系统(在我们的例子中是 ubuntu 14.04 trusty)。

    关于 virt-manager 的说明:使用 virt-manager 可以让事情变得非常简单。我们的设置使用了私有网络,我们通常使用 vnc 连接到服务器。我们通过 vnc 连接到包含所有 VM 的服务器(VM 服务器)。现在,我们尝试通过 vnc 连接到 maas 部署服务器(在 ubuntu 15.04 级别)。我们无法让 vnc 在 15.04 服务器上工作。因此,我们使用了 ssh -X xll 转发。这不是产品级别的解决方案,但如果您正在测试此环境,那么这种方法在紧急情况下会很有效。

  6. 请注意,要正确访问 ubuntu,您需要按照 ubuntu 文档指定的方式设置 ssh 密钥。

    请参阅:/maas.ubuntu.com/docs/nodes.html

    请注意,我们在测试中使用 root,因此如果您这样做进行测试,则无需设置 maas 用户 ID,只需设置 ssh-keygen(这在 maas 部署服务器上完成)。

    具有虚拟机的目标服务器(文档中的虚拟机服务器)需要公钥,因此 ssh-copy-id -i ~/.ssh/id_rsa[电子邮件保护]必须完成,并且必须使用 ubuntu 用户 ID。ubuntu 用户 ID 是已部署虚拟机的默认用户 ID。

    完成上述操作后,你就可以使用类似 ssh 的方式从虚拟机服务器访问已部署的虚拟机[电子邮件保护] (xxxx是创建的ubuntu虚拟机的ip地址)

  7. 一旦修复了这个问题,就会大规模部署到服务器 ubuntu 14.04。
    如果您运行 virt-manager,您可以看到部署期间的处理顺序。

  8. 现在,在我们运行的测试案例中,我们在 virt-manager 中观察到启动顺序仍然在网络之外,因此将其更改为磁盘。停止 VM,重新启动 VM,然后出现 ubuntu 14.04。

  9. 使用 ssh 连接到新创建的虚拟机[电子邮件保护] (xxxx 是创建的 ubuntu VM 的 ipaddress)。请注意,您可以从编辑节点页面获取新创建的 ipaddress,转到底部并选择发现的信息。ipaddress 列在该区域的下方,最好复制到记事本、编辑器,然后搜索地址开头。我们使用了私有网络,因此只搜索了 192。

    使用 uname -a 和 lscpu 检查操作系统是否正确。应显示架构为 ppc64le:

    root@ubuntur2n2:~# uname -a
    Linux ubuntur2n2 3.19.0-25-generic #26-Ubuntu SMP Fri Jul 24 21:18:29 UTC 2015 ppc64le ppc64le ppc64le GNU/Linux
    root@ubuntur2n2:~# lscpu
    Architecture:          ppc64le
    Byte Order:            Little Endian
    CPU(s):                192
    On-line CPU(s) list:   0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184
    Off-line CPU(s) list:  1-7,9-15,17-23,25-31,33-39,41-47,49-55,57-63,65-71,73-79,81-87,89-95,97-103,105-111,113-119,121   
     -127,129-135,137-143,145-151,153-159,161-167,169-175,177-183,185-191
    Thread(s) per core:    1
    Core(s) per socket:    6
    Socket(s):             4
    NUMA node(s):          4
    

XML 代码

<domain type='kvm'>
  <name>vm5</name>
  <uuid>1e964a47-4a69-4b59-a5b4-637a1234f47d</uuid>
  <description>vm5 for PoC</description>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='ppc64' machine='pseries-2.2'>hvm</type>
    <bootmenu enable='yes'/>
  </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/qemu-system-ppc64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/vm5-1.qcow2'/>
     <target dev='sda' bus='scsi'/>
      <boot order='1'/>
      <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='pci' index='0' model='pci-root'/>
   <controller type='ide' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='scsi' index='0'>
      <address type='spapr-vio' reg='0x2000'/>
    </controller>
    <interface type='bridge'>
      <mac address='00:1a:64:14:53:14'/>
      <source bridge='br3'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
      <address type='spapr-vio' reg='0x30000000'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
      <address type='spapr-vio' reg='0x30000000'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='keyboard' bus='usb'/>
    <input type='mouse' bus='usb'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='vga' vram='16384' 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='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>

答案1

iso所使用的应该可以正常工作,即使在 VM 环境中。

但是,正如您所注意到的,它不支持qemu所提供的模拟图形适配器。对于这些虚拟机,您最好使用与主机的串行连接。

由于您似乎正在使用libvirt,并且您的.xml文件似乎定义了主机串行端口,因此您可以使用标准 virsh 命令来获取主机控制台:

virsh console <name>

您可能还想从虚拟机中删除图形配置。

相关内容