哎呀。今天我想设置一个新的虚拟机来管理我的 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 进程)
所以基本上。
virsh attach-device VM_NAME PCI_entry.xml --config
virsh destroy VM_NAME
virsh start VM_NAME
答案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 桥。使用这种方法很容易解决这个问题。
答案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