Libvirt / qemu-kvm에서 원하지 않는 iPXE 부팅 시도를 비활성화하려면 어떻게합니까?


12

어떻게 든 12.04로 업그레이드 한 후 가상 머신은 항상 네트워크에서 먼저 부팅을 시도하면서 부팅됩니다. 이것 좀 봐:

virt-manager 스크린 샷

PXE 구성 세트가없는 동안 :

PXE 부팅 구성

난 노력 했어:

  • 비활성화 SPICE 때문에,을에 의해 변화 emulator/usr/bin/kvm에서 /usr/bin/kvm-spiceXML을 편집하여.
  • Ctrl+ B는 iPXE를 구성하지만 부팅 옵션으로 비활성화하지는 않습니다.
  • 다른 유형의 NIC 설정-옵션이 아니라 virtio성능상의 이유로 필요 합니다. 그러나 e1000e작동하지 않습니다.
  • NIC 제거 : 작동합니다. 그러나 네트워크가 필요합니다.
  • 인터넷 검색 단단한. 많은 결과는 구성된 PXE 부팅 실패에 관한 것입니다.

큰 문제는 아니지만 여기에서 부팅 시간이 50-100 % 증가합니다 (SSD에서 부팅). 비교적 길고 짜증납니다.

이 기능을 비활성화하고 가상 하드 디스크에서 직접 부팅하려면 어떻게해야합니까?

답변:


6

짧은 답변

libvirt 0.9.10+ (Quantal에서 사용 가능)로 업그레이드 <rom bar='off'/>하고 시스템 XML 정의의 인터페이스 구성에 옵션을 추가하십시오 .

긴 대답

실제로 iPXE 부팅 옵션을 사용하고 있으므로 SeaBIOS 화면에서 발생하는 지연이 실제 부팅 시도가 아님을 알 수 있습니다. Virtio 네트워크 옵션 ROM을로드하는 데 몇 초의 시간이 걸립니다. 즉, 아직 iPXE 부팅 시도를하지 않습니다 . 이로 인해 libvirt 문서를 다시 읽었으며 흥미로운 발견을했습니다.

내가 찾을 수있는 한 libvirt 0.9.7부터 동작은 기본적으로 인터페이스의 옵션 ROM을로드하도록 변경되었습니다. 0.9.2와 함께 제공되는 Ubuntu 11.10, Ubuntu 12.04는 0.9.8과 함께 제공됩니다. 이것은 왜 12.04로 업그레이드 한 이후에 이런 일이 발생하는지 알 수 있습니다.

또한 이것은 <rom bar='off'/>XML 의 옵션으로 libvirt 버전 0.9.10에서 구성 가능 합니다! ( 여기 참조 ) 그러나 해당 버전의 libvirt는 Ubuntu 12.04에서 사용할 수 없으므로 12.10으로 업그레이드하거나 백 포트해야합니다. 이것은 우분투 12.04가 두 개의 변에 빠지게합니다.

다른 해결 방법은 @AH가 지적한 옵션 ROM 파일을 제거하고 @NlightNFotis가 지적한 SeaBIOS '파일 시스템'을 변경하는 것입니다. 그러나 두 가지 방법 모두 기본적으로 iPXE를 완전히 비활성화하며 구성 할 수 없습니다 ( virtio네트워크 장치에만 고정 된 경우). iPXE 시스템과 비 PXE 시스템의 혼합 설정이 있으므로이를 구성 할 수 있어야합니다.


머신의 XML 정의는 어디에 있습니까?
브라이스 Guinta

1
@BryceGuinta 먼저 VM을 만든 다음 명령을 사용하여 XML 정의 (고급)를 편집하십시오.virsh edit <domain>
gertvdijk

5

같은 문제에 대한 실험을 통해 힌트를 얻었습니다.

패키지 kvm-ipxe는 여러 PXE 옵션 ROM을 /usr/share/qemu/다음 위치에 설치합니다 .

pxe-e1000.rom
pxe-ne2k_isa.rom
pxe-pcnet32.rom
pxe-rtl8139.rom
pxe-virtio.rom

어떻게 든 이들은 이들 NIC 중 하나로 부팅 할 때 seabios가 자동으로 찾아서 사용합니다. 나는이 작업을 수행 할 때 chmod a= pxe*.rom이러한 파일과 가상 컴퓨터를 시작 나는 "오류"메시지

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"

그러나 PXE없이 깨끗하게 부팅됩니다.


감사. virtio일반적인 네트워킹 장치 및 e1000ePXE가 필요한 VM에 사용하면 약간의 해결 방법이 제공 됩니다. 그러나 여전히 버그라고 생각합니다. 어떻게 든 Libvirt가 올바른 부팅 매개 변수를 SeaBIOS에 성공적으로 전달하지 못합니다.
gertvdijk

무엇을 chmod a=합니까?
브라이스 Guinta

5

명령 행에서 qemu-kvm에 다음 옵션을 전달하여 우분투 12.04 에서이 문제를 해결할 수있었습니다 (romfile을 공백으로 설정하는 것이 트릭입니다).

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0

쿨하지만 내 Libvirt XML 머신 정의에서 이것을 지정할 수 있습니까?
gertvdijk

명령 줄에서 임시 반복 재부팅을 수행하는 경우이 방법을 사용하십시오. 약간의 노이즈가 추가되지만 XML 파일을 편집하거나 모든 네트워킹을 핵 처리하는 등의 작업을하지 않아도 iPXE가 즉시 종료됩니다.
i336_

0

사진에서 VM BIOS와 관련이있을 가능성이 가장 높습니다. VM 구성은 SeaBIOS'설정을 덮어 쓰지 않아야합니다. 이로 인해 VM이 PXE먼저 부팅되어야합니다 .

가능한 첫 번째 해결책은 가상 머신의 BIOS로 들어가서 해당 옵션을 편집 할 수 있는지 확인하십시오.

참고 : 내 연구 결과가 더 많은 해결책이나 원인을 밝히는 동안 대답을 계속 업데이트합니다.

[편집 # 1] : SeaBIOS 에서 부팅 순서를 설정하는 방법에 대한 정보는 여기 를 참조 하십시오 . 문제를 해결해야합니다.


VM의 BIOS에 들어가려면 어떻게해야합니까? SeaBIOS에 관한 Wikipedia 는 부팅시 F12를 시도해야한다고 말하지만 iPXE 시도를 한 번만 건너 뛰는 트리거 만합니다.
gertvdijk

@gertvdijk 나는 현재 그것을 찾고 있습니다. 내가 알게 되 자마자 다시 연락 드리겠습니다.
NlightNFotis

@gertvdijk 이것은 어떻게 든 관련이 있습니다 : seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis

감사합니다. 오늘 새로운 것을 배웠습니다. 그러나 이것은 시스템 전체에 적용되고 새로운 CBFS (코어 부트 파일 시스템)를 구축하는 것 같습니다. 내가 볼 수있는 한, 그것은 또한 PXE 부팅을 완전히 비활성화합니다. 이 접근 방식이 마음에 들지 않으며 virt-manager GUI에서 가능한 한 iPXE 부팅 시도가 런타임을 막는 것이 가능해야한다고 생각합니다.
gertvdijk

@gertvdijk 어떻게 비활성화하는지 아십니까? 내가 볼 수있는 것은 부팅 순서를 설정하는 것입니다 . , 부팅 전에 무언가가 부팅 됩니다.
NlightNFotis

-1

"-net none"을 사용하여이를 방지 할 수있었습니다.

# qemu-system-i386 -net none

그러나 당신은 전혀 네트워킹이 없습니다! 나는 이것이 실제로 대답이 아니라고 생각합니다.
gertvdijk 1

죄송합니다. OP에 여전히 네트워킹이 필요하다는 사실을 놓쳤습니다. 내 경우에는 네트워크없이 실행하는 것이 허용되었습니다.
카탈린 P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.