【问题标题】:How to boot up from CDROM(ISO image) to install the guest OS using virsh如何从 CDROM(ISO 映像)启动以使用 virsh 安装来宾操作系统
【发布时间】:2017-10-03 19:47:12
【问题描述】:

2017 年 10 月 4 日更新:请参阅下面的答案。这要归功于 DanielB,因为如果没有 Daniel 的帮助我无法解决问题,所以我会接受他的回答而不是我自己的回答。


我是 libvirt 和系统管理方面的新手,所以如果我问愚蠢的问题,请原谅,尽管我已经尝试尽可能多地做功课。

我的问题是:如何在使用 virsh 创建 VM 后立即从 CDROM 启动以安装来宾操作系统?

我正在开发 Ubuntu Desktop 14.04、virsh 1.2.2。

当我使用 'virt-install' 并将 ISO 文件路径作为其 '--cdrom' 参数传递时,我可以成功打开 virt-viewer 窗口,该窗口允许我安装来宾操作系统。

据我所知,我也可以使用 XML 定义创建 VM,因此我转储了使用“virt-install”创建的 VM 的 XML 定义。然后我希望在我启动 VM 时会自动打开“virt-viewer”窗口,以便我可以安装来宾操作系统。但它没有。

以下是我的虚拟机的 XML 定义。

如果我启用加载程序行,因为我在下面标记为“可疑”,我会收到一条错误消息“错误:内部错误:无法加载 AppArmor 配置文件'libvirt-1092d51d-3b66-46a2-bf9b-71e13dc91799'” .我这样做是因为我正在尝试libvirt's document here 中给出的示例。

但是,如果我禁用“loader”行并运行virsh create def_domain_test.xml,则可以成功创建域并显示为“正在运行”,但是没有打开 virt-viewer 窗口,所以我无法在 VM 上安装来宾操作系统

谁能帮我解决这个问题?我不明白为什么 'virt-install' 可以调出 virt-viewer 而我的 XML 定义却不能。我可能错误地配置了域 XML 定义,但即使我尝试阅读尽可能多的文档,我也无法弄清楚我错在哪个特定部分。

如果需要,请随时询问更多详细信息。

<!-- Let's call this file 'def_domain_test.xml' -->
<domain type='kvm'>
  <name>vm_c2</name>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
    <!-- Next line is suspicious! -->
    <!-- <loader readonly='yes' secure='no' type='rom'>/usr/lib/xen-4.4/boot/hvmloader</loader> -->
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </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-spice</emulator>

    <!-- Here is the hard drive that doesn't have OS installed. -->
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/me/me/testing/vm/pool/mvs_vol_c2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>

    <!-- Here is the Ubuntu ISO. -->
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/me/me/testing/vm/ubuntu-14.04.5-server-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' 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>
    <interface type='network'>
      <source network='default'/>
      <model type='rtl8139'/>
      <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'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <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='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>

【问题讨论】:

    标签: installation ubuntu-14.04 kvm libvirt


    【解决方案1】:

    感谢 DanielB 的帮助! virt-install 的“--debug”参数确实揭示了我解决此问题所需的信息。

    首先,在 XML 定义中,我不需要 &lt;loader&gt; 行。 &lt;os&gt; 部分应该是:

    <os>
      <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
      <boot dev='cdrom'/>
      <boot dev='hd'/>
    </os>
    

    两个&lt;boot&gt;标签已经指定了启动顺序。

    其次,virt-install 的调试输出建议了调出virt-viewer 的所需方式:

    • 运行:virt-viewer --connect=qemu:///system --wait vm_c2
      • (可选)您可以将“--debug”和“--verbose”添加到virt-viewer 以查看更多输出。
      • 此时,应打开查看器窗口并显示一条消息:Waiting for guest domain to be created
    • 运行:virsh create --file def_domain_test.xml
      • 查看器现在将被激活并显示 VM 的输出。

    这是一个警告,它使我一开始就卡住了:您不必在 VM 之前启动 virt-viewer。但是,如果您先启动 VM,然后再启动查看器,则查看器屏幕可能是全黑的,这可能会让您感到困惑,并让您认为那里什么都没有发生。在这种情况下,单击查看器窗口使其获得输入焦点,然后按“Enter”键,您可能会刷新它并查看实际存在的内容。 (调整窗口大小不会强制它刷新。)

    仅供参考:如果您输出 virt-viewer 的调试消息,您可能会看到如下消息:

    (virt-viewer:6296): virt-viewer-DEBUG: 错误操作被禁止:只读访问阻止 virDomainOpenGraphics

    这似乎没有给我带来任何问题,但如果 virt-viewer 无法正常工作,可能是其他问题的暗示。

    【讨论】:

      【解决方案2】:

      virsh 是一个非常低级的工具,其命令直接映射到各个 libvirt API 调用。 virt-install 完成的安装将进行许多 API 调用以完成其工作。因此,仅获取已安装来宾的最终 XML 并将其传递给 virsh define 是不等价的。

      首先,virt-install 通常会更改 XML - 它首先会创建一个临时来宾,将生成一个适合从 CDROM 启动的 XML 文档,然后在完成之后将更改 XML 以从磁盘启动。 virt-install 将手动启动 virt-viewer 以显示控制台,这不是 virsh 所做的。

      那条特定的&lt;loader&gt; 行永远不应该与 KVM 一起使用——它只与 Xen 相关——通过使用你告诉 KVM 运行 Xen paravirt 代码作为其 BIOS 而不是 SeaBIOS——这肯定会崩溃和烧毁。

      如果您对virt-install 使用“--debug”参数,您将看到它在每个步骤中所做的详细信息。如果您想查看每个 libvirt API 调用的详细信息,还可以设置 LIBVIRT_LOG_FILTERS=1:libvirtLIBVIRT_LOG_OUTPUTS=1:stderr

      【讨论】:

      • 我会尝试使用“--debug”参数,稍后再回来!我应该更仔细地阅读手册页!
      • 感谢您的解释和其他信息,尤其是最终帮助我解决问题的“--debug”。我已经在下面发布了我学到的东西。但是,我仍然接受您的回复作为答案,因为您应得的功劳!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多