이런. 오늘은 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,?]:
이를 처리하는 방법과 게스트 VM에 하드 드라이브를 추가하는 방법을 아는 사람이 있습니까?
답변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 문서 페이지를 찾았는데, 여기에는 많은 정보가 포함되어 있습니다. 요약하자면, 게스트 VM에 블록 장치를 추가하는 방법에는 3가지가 있습니다. 저는 간단한 방법을 사용했습니다. 원하는 대상에 대한 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