Libvirt qemu가 하드웨어 식별자를 변경합니까?

Libvirt qemu가 하드웨어 식별자를 변경합니까?

알 수 없는 이상한 문제에 봉착했습니다. 원래는 물리적 컴퓨터였지만 얼마 전에 VM으로 다운그레이드된 Windows 7 가상 컴퓨터가 있습니다. 사용해서 시작했는데

qemu-system-x86_64 --enable-kvm -vga std -m 4G -smp cores=4 /path/to/image 

Windows 정품 인증을 트리거할 만큼 하드웨어 정보가 변경되었습니다. 저는 최근 libvirt와 virt-manager를 사용하기 시작했습니다. 이 Windows 컴퓨터를 가져오기 시작할 때까지는 모든 것이 잘 진행되었습니다. 마침내 부팅했을 때 Windows 정품 인증 문제가 발생했습니다.

보고된 하드웨어 사양(msinfo32)을 스크린샷으로 찍고 종료한 후 문제 없이 명령으로 다시 시작한 후 보고된 하드웨어를 비교했습니다. 모든 것이 동일해 보입니다. 그래서 더 자세한 정보를 얻을 수 있는지 알아보기 위해 WMIC를 조사하기 시작했습니다. 내가 알아차린 유일한 점은 두 시작 사이에 CPU ProcessorID 필드가 다르다는 것입니다. 를 사용하여 내 구성(주로 CPU 매개변수(일치='정확한', 모드='호스트-모델', 모드='호스트-통과' 등))에 대한 다양한 조정을 시도했지만 virsh edit machinename소용이 없었습니다.

ps를 사용하면 libvirt가 다음 명령을 실행하고 있음을 알 수 있습니다(가독성을 위해 여러 줄로 구분됨).

qemu-system-x86_64 -enable-kvm -name win7 -S \
-machine pc-i440fx-trusty,accel=kvm,usb=off -m 4096 \ 
-realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 \
-uuid 71ca9116-a4a1-b799-dab5-01a483bce024 \
-no-user-config -nodefaults \
-chardev socket,id=charmonitor,path=/var /lib/libvirt/qemu/win7.monitor,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc -no-shutdown -boot strict=on \
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
-drive file=/media/paul/VirtualMachines/win7.vmdk,if=none,id=drive-ide0-0-0,format=vmdk \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-netdev tap,fd=25,id=hostnet0 \
-device \
    rtl8139, \
    netdev=hostnet0, \
    id=net0, \
    mac=52:54:00:bf:2c:b2,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 \
-device VGA,id=video0,bus=pci.0,addr=0x2 \
-device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

이것은 내 구성 파일입니다.http://pastebin.com/0e2Mf4RE

여전히 간단한 명령으로 시작할 수 있습니다. 문제 없습니다. libvirt qemu 명령은 내 하드웨어가 게스트 시스템에 보고하는 방식과 관련하여 뭔가를 변경한 것 같습니다. 매개변수가 MAC 주소와 하드 드라이브 UUID를 설정하는 것처럼 보이지만 그것은 중요하지 않습니다. 나는 Windows 하드웨어 잠금이 주로 마더보드 및/또는 CPU 조합을 기반으로 한다고 확신합니다.

왜 이런 일이 발생하고 해결 방법을 아는 사람이 있습니까?

고쳐 쓰다

위에서 실행한 qemu 명령을 사용하여 libvirt를 직접 실행해 보았습니다. 시작될 때까지 매개변수를 제거한 다음 Windows에서 활성화되었음을 표시할 때까지 시도했습니다. -uuid문제가 발생하는 것 같습니다 . 왜 그런지 잘 모르겠습니다. uuid 매개변수는 단지 보안 프로필(내 경우에는 AppArmor)을 위한 것이라고 생각했는데, 게스트의 일부 하드웨어 식별자도 변경하는 것 같습니다.

부팅에 성공한 후 wmic csproduct get uuidWindows에서 실행하고 복사한 후 종료했습니다. 그런 다음 다음을 수행했습니다.

virsh dumpxml win7 > win7.xml
virsh undefine win7
[Edited win7.xml -> changed uuid to match the one I copied]
virsh define win7.xml

virt-manager를 열고 시작했습니다. 효율적인! uuid가 마더보드 일련번호를 설정하는 것 같은데요? 흥미롭게도 내 것은 0의 문자열이었기 때문에(분명히 많은 마더보드는 UUID를 보고하지 않습니다), 그래서 그것은 실제로 고유하지 않았으며 전체 모험을 매우 어리석게 만들었습니다.

이것이 왜 작동하는지 확신할 수 없기 때문에 답변으로 게시하지 않습니다. 작동할 때까지 장난을 쳤고 위에서 가정했습니다. 이 주제에 대해 더 많이 아는 사람이 더 나은 답변을 게시할 수 있을까요?

관련 정보