Debian Wheezy 게스트 VM이 내 노트북의 Intel Centrino N 무선 카드에 액세스할 수 있도록 virt-manager에서 PCI 패스스루를 설정하려고 합니다.
데비안 기본 커널에는 Intel IOMMU가 활성화되어 있으며 intel_iommu=on
부팅 시 이를 커널에 전달했습니다( 편집 /etc/default/grub
및 설정 GRUB_CMDLINE_LINUX="intel_iommu=on"
후 실행 grub-update
)...
IOMMU가 실제로 활성화되었는지 확인하기 위해 dmesg를 살펴보면 다음과 같습니다 [ 0.000000] Intel-IOMMU: enabled
.
나는 지시에 따라 노력했다여기, VM에 추가하기 전에 virsh를 사용하여 PCI 장치를 분리하십시오 virsh nodedev-detach pci_0000_01_00_0
.
그러나 이 무선 카드에 대해 PCI 패스스루가 활성화되면 게스트 VM으로 전혀 부팅할 수 없으며 다음 오류가 발생합니다(에서 /var/log/libvirt/libvirtd.log
).
2014-09-22 04:45:19.325+0000: 2990: error : qemuMonitorOpenUnix:305 : failed to connect to monitor socket: No such process
2014-09-22 04:45:19.325+0000: 2990: error : qemuProcessWaitForMonitor:1593 : internal error process exited while connecting to monitor: char device redirected to /dev/pts/1
**No IOMMU found. Unable to assign device "hostdev0"
kvm: -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7: Device 'pci-assign' could not be initialized**
완전한 출력은 다음과 같습니다 /var/log/libvirt/qemu/
.
2014-09-22 04:10:47.002+0000: starting up
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/ QEMU_AUDIO_DRV=none /usr/bin/kvm -S -M pc-1.1 -cpu Nehalem,+rdtscp,+avx,+osxsave,+xsave,+tsc-deadline,+x2apic,+pdcm,+xtpr,+tm2,+est,+vmx,+ds_cpl,+monitor,+dtes64,+pclmuldq,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -enable-kvm -m 2500 -smp 4,sockets=4,cores=1,threads=1 -name DebianStableSandbox -uuid c18e2808-c98a-2b4d-54f1-00977d3ec1d2 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/DebianStableSandbox.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/DebianNET.img,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=21,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:c5:4a:a9,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
char device redirected to /dev/pts/1
No IOMMU found. Unable to assign device "hostdev0"
kvm: -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7: Device 'pci-assign' could not be initialized
2014-09-22 04:10:47.610+0000: shutting down
"모니터에 연결할 수 없습니다."라는 메시지가 어떤 면에서 관련이 있는 것 같습니다. 위에서 언급한 대로 virt-manager를 사용하여 먼저 무선 카드를 분리하지 않고 PCI 장치로 무선 카드를 추가하면 virsh nodedev-detach
virt-manager에서 오류 메시지가 나타납니다.
Error starting domain: Unable to read from monitor: Connection reset by peer
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 45, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 66, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/domain.py", line 1114, in startup
self._backend.create()
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 620, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: Unable to read from monitor: Connection reset by peer
...이 경우에 나타나는 것은 다음 /var/log/libvirt/libvirtd.log
과 같습니다.2014-09-22 04:48:26.387+0000: 2985: error : qemuMonitorIORead:523 : Unable to read from monitor: Connection reset by peer
도움이 된다면 관련 출력은 다음과 같습니다 lspci -v
.
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
Subsystem: Dell Device 04d8
Flags: bus master, fast devsel, latency 0
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
Kernel driver in use: agpgart-intel
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Memory behind bridge: d1600000-d16fffff
Capabilities: [40] Express Root Port (Slot+), MSI 00
Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit-
Capabilities: [90] Subsystem: Dell Device 04d8
Capabilities: [a0] Power Management version 2
Kernel driver in use: pcieport
01:00.0 Network controller: Intel Corporation Centrino Wireless-N 1030 [Rainbow Peak] (rev 34)
Subsystem: Intel Corporation Centrino Wireless-N 1030 BGN
Flags: fast devsel, IRQ 16
Memory at d1600000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [c8] Power Management version 3
Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [e0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number bc-77-37-ff-ff-0d-3f-90
Kernel driver in use: pci-stub
또한 명확하게 말하면 무선 카드를 PCI 패스스루 장치로 추가하기 전까지는 이 가상 머신으로 제대로 부팅할 수 있었고 virt-manager를 통해 제거한 후에는 모든 것이 다시 제대로 작동했습니다.
이 문제를 해결하는 방법을 아는 사람이 있나요? 감사해요!
답변1
사실 이 프로세서가 VT-x는 지원하지만 VT-d는 지원하지 않아서 IOMMU를 할 수 없다는 걸 방금 알았습니다.