如何从CDROM(ISO映像)启动以使用virsh

时间:2017-10-03 19:47:13

标签: installation ubuntu-14.04 kvm libvirt

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

我是libvirt的新手以及系统管理,所以请原谅我,如果我问过愚蠢的问题,尽管我事先尝试做过尽可能多的家庭作业。

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

我正在使用Ubuntu Desktop 14.04,virsh 1.2.2。

当我使用&virt; install-install'并传递ISO文件路径作为其' - cdrom'参数,我可以成功地启动virt-viewer窗口,这样我就可以通过客户操作系统安装。

据我所知,我也可以使用XML定义创建VM,我使用&virt; install-install'转储了我创建的VM的XML定义。然后我期待那个“观众”观看者。当我启动VM时,窗口会自动启动,因此我可以安装来宾操作系统。但它没有。

以下是我的VM的XML定义。

如果我启用了装载线,我标记为"可疑"在下面,我会收到一条错误消息"错误:内部错误:无法加载AppArmor个人资料' libvirt-1092d51d-3b66-46a2-bf9b-71e13dc91799'"。我这样做是因为我在尝试libvirt's document here中给出的例子。

但是,如果我禁用" loader"并且运行virsh create def_domain_test.xml,域名可以成功创建并显示为“正在运行”,但未显示virt-viewer窗口,因此我无法启动在VM上安装来宾操作系统

有人可以帮我吗?我不明白为什么要安装'可以提出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>

2 个答案:

答案 0 :(得分:2)

virsh是一个非常低级别的工具,其命令直接映射到单独的libvirt API调用。由virt-install完成的安装将进行许多API调用以完成其工作。因此,只需获取已安装的guest虚拟机的最终XML并将其传递给virsh define就不等了。

首先,virt-install通常会更改XML - 它首先会创建一个临时guest虚拟机,这将是一个适合启动CDROM的XML文档,在此之后它将更改XML以引导磁盘代替。 virt-install将手动启动virt-viewer以显示控制台,这不是virsh所做的。

特定<loader>行永远不应该与KVM一起使用 - 它只与Xen相关 - 通过使用你告诉KVM运行Xen paravirt代码作为其BIOS而不是SeaBIOS - 这肯定会崩溃和放大器;燃烧。

如果您使用'--debug'arg到virt-install,您会看到每个步骤的详细信息。如果您想查看每个libvirt API调用的详细信息,也可以设置LIBVIRT_LOG_FILTERS=1:libvirtLIBVIRT_LOG_OUTPUTS=1:stderr

答案 1 :(得分:2)

感谢DanielB的帮助! virt-install的'--debug'参数确实揭示了解决这个问题所需的信息。

首先,在XML定义中,我不需要<loader>行。 <os>部分应为:

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

两个<boot>标记已经指定了引导顺序。

其次,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无法正常工作,也许是其他问题的暗示。