libvirtd:没有更多可用的 PCI 插槽

libvirtd:没有更多可用的 PCI 插槽

哎呀。今天我想设置一个新的虚拟机来管理我的 8 个硬盘设备。

目前我使用 Fedora 31 作为主机,使用 Debian 9 作为来宾系统。我想通过块设备传递到虚拟机,但不幸的是它不起作用,而且如果不是 RedHat 订阅者,很难找到正确的信息。

那么我做了什么?我尝试使用以下命令连接硬盘。

virsh attach-disk Storage_ZFS_\(Debian\) /dev/sdb vdc

不幸的是我收到以下错误。

error: Failed to attach disk
error: internal error: No more available PCI slots

那么我尝试了什么?我做了一些研究,发现了一些在 SUSE 上有效的东西,<controller type='pci' model='pcie-to-pci-bridge'/>在 VM 部分的某个地方添加了一些东西,但不幸的是它并没有那么好用。仅收到以下错误。

[root@millenium-fbe48 chairman]# virsh edit Storage_ZFS_\(Debian\) 
error: internal error: Cannot automatically add a new PCI bus for a device with connect flags 800
Failed. Try again? [y,n,i,f,?]: 
error: XML error: The PCI controller with index='0' must be model='pcie-root' for this machine type, but model='pcie-to-pci-bridge' was found instead
Failed. Try again? [y,n,i,f,?]: 
error: XML error: The PCI controller with index='0' must be model='pcie-root' for this machine type, but model='pcie-to-pci-bridge' was found instead
Failed. Try again? [y,n,i,f,?]: 
error: XML error: The PCI controller with index='0' must be model='pcie-root' for this machine type, but model='pcie-to-pci-bridge' was found instead
Failed. Try again? [y,n,i,f,?]: 
error: XML error: The PCI controller with index='0' must be model='pcie-root' for this machine type, but model='pcie-to-pci-bridge' was found instead
Failed. Try again? [y,n,i,f,?]: 
error: XML error: The PCI controller with index='0' must be model='pcie-root' for this machine type, but model='pcie-to-pci-bridge' was found instead
Failed. Try again? [y,n,i,f,?]: 

有人知道如何处理它,以及如何将硬盘添加到我的来宾虚拟机吗?

答案1

我能够使用以下方法添加多个 PCI 直通设备。

如果您执行 Attach-interface 命令--config 仅有的(删除 --live),libvirt 将能够自动添加它知道需要的 pcie-root-port。然后,您只需关闭并重新启动来宾设备,即可将设备添加到正在运行的来宾实例中(从来宾设备进行简单的重新启动是不够的,您需要完全关闭它,以便启动新的 qemu 进程)

所以基本上。

  1. virsh attach-device VM_NAME PCI_entry.xml --config
  2. virsh destroy VM_NAME
  3. virsh start VM_NAME

来源:回复:[libvirt-users] 无法将 pci 网络添加到现有虚拟机

答案2

问题已经解决了。有一种方法可以通过添加PCI/PCIe桥来解决这个问题,但似乎相当复杂,并且缺乏信息。所以我找到了 RedHat 提供的 libvirt 文档页面,其中包含大量信息。总结一下:有 3 种方法可以将块设备添加到来宾 VM,我使用了一种简单的方法。只需使用 编辑所需目标的 xml 文件,virsh edit "domain"然后在文件中出现的最后一条语句下方添加以下内容即可。

<disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source dev='/dev/sdx'/>
      <target dev='vda' bus='virtio'/>
</disk>

为了让它工作,你仍然需要在你的情况下替换“vda”和“sdx”。使用此方法,将自动创建 PCI 桥。使用这种方法很容易解决这个问题。

文章链接。13.3.2.向访客添加硬盘驱动器和其他块设备

答案3

在机器工作时使用 --live 如果离线则不要使用它

在 bash 中创建一些测试磁盘:

for i in {1..12};do sudo qemu-img create -f raw testdisk$i.raw 10G;done

在 python3 中附加磁盘:

import os
y='g,h,i,j,k,l,m,n,o,p,r,s,t,u,v,y,z'.split(',')
for i in range(1,13):
    s='virsh attach-disk optmb_fileserver '+'/home/gediz/Desktop/testdisk'+str(i)+'.raw '+'vd'+y[i]+' --config --live'
    print(os.popen(s).read())

答案4

关闭你的虚拟机,然后使用--persistent

virsh attach-disk GuestVM /dev/sda1 vda --persistent

相关内容