Làm cách nào để tắt nỗ lực khởi động iPXE không mong muốn trong Libvirt / qemu-kvm?


12

Bằng cách nào đó sau khi nâng cấp lên 12.04, các máy ảo của tôi luôn khởi động với nỗ lực khởi động từ mạng trước. Xem cái này:

ảnh chụp màn hình virt-manager

trong khi tôi không có bộ cấu hình PXE nào:

Cấu hình khởi động PXE

Tôi đã thử:

  • để vô hiệu hóa SPICE, bằng cách thay đổi emulatorthành /usr/bin/kvmtừ /usr/bin/kvm-spicebằng cách chỉnh sửa XML.
  • Ctrl+ Bđể định cấu hình iPXE, nhưng nó không cho phép tắt tùy chọn này làm tùy chọn khởi động.
  • thiết lập một loại NIC khác - không phải là một tùy chọn, tôi cần virtiovì lý do hiệu năng. Tuy nhiên, e1000ecũng không hoạt động.
  • loại bỏ NIC: hoạt động. Tuy nhiên, tôi cần mạng.
  • Googling xung quanh. Cứng. Rất nhiều kết quả là về việc không khởi động được PXE khởi động.

Không phải là một vấn đề lớn, nhưng nó làm tăng thời gian khởi động lên 50 - 100% tại đây (khởi động từ SSD), vì vậy nó tương đối dài và làm tôi khó chịu.

Làm thế nào tôi có thể vô hiệu hóa điều này và khởi động từ đĩa cứng ảo trực tiếp?

Câu trả lời:


6

Câu trả lời ngắn

Nâng cấp lên libvirt 0.9.10+ (có sẵn trong Quantal) và thêm <rom bar='off'/>tùy chọn vào cấu hình giao diện của định nghĩa XML của máy.

Câu trả lời dài

Bây giờ tôi thực sự đang sử dụng tùy chọn khởi động iPXE, tôi thấy rằng sự chậm trễ xảy ra trong màn hình SeaBIOS không phải là một nỗ lực khởi động thực tế. Nó chỉ tải ROM tùy chọn mạng Virtio và mất vài giây khó chịu, tức là nó chưa thực hiện một nỗ lực khởi động iPXE . Điều này dẫn tôi đọc tài liệu libvirt một lần nữa và tôi đã thực hiện một khám phá thú vị.

Theo như tôi có thể tìm thấy, vì libvirt 0.9.7, hành vi đã thay đổi để tải ROM tùy chọn của giao diện theo mặc định. Ubuntu 11.10 được vận chuyển với 0.9.2, Ubuntu 12.04 đi kèm với 0.9.8. Điều này chắc chắn có lý do tại sao tôi thấy điều này xảy ra kể từ khi nâng cấp lên 12.04.

Hơn nữa, điều này đã trở thành cấu hình trong phiên bản libvirt 0.9.10 với <rom bar='off'/>tùy chọn trong XML! (xem tại đây ) Tuy nhiên, phiên bản libvirt đó không có sẵn trong Ubuntu 12.04 và tôi sẽ phải nâng cấp lên 12.10 hoặc nhập lại nó. Điều này làm cho Ubuntu 12.04 rơi vào giữa hai phân.

Các cách giải quyết khác đang xóa các tệp ROM tùy chọn như được chỉ ra bởi @AH 'và thay đổi' hệ thống tệp 'của SeaBIOS như được chỉ ra bởi @NlightNFotis. Tuy nhiên, cả hai cách về cơ bản sẽ vô hiệu hóa hoàn toàn iPXE và nó không thể định cấu hình (nếu chỉ dính vào virtiocác thiết bị mạng). Vì tôi có một thiết lập hỗn hợp giữa máy iPXE và máy không PXE, tôi thực sự cần cấu hình này.


Định nghĩa XML của máy ở đâu?
Bryce Guinta

1
@BryceGuinta Trước tiên, hãy tạo một VM, sau đó chỉnh sửa định nghĩa XML của nó (nâng cao) bằng lệnhvirsh edit <domain>
gertvdijk

5

Các thí nghiệm của tôi về cùng một vấn đề đã cho tôi một số gợi ý:

Gói kvm-ipxecài đặt một số ROM tùy chọn PXE vào /usr/share/qemu/:

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

Bằng cách nào đó, chúng được tự động tìm thấy và sử dụng bởi seabios khi khởi động với một trong các NIC này. Khi tôi thực hiện một chmod a= pxe*.romtrong các tệp này và khởi động máy ảo, tôi nhận được thông báo "lỗi"

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

nhưng nó khởi động sạch sẽ và không có PXE.


Cảm ơn. Điều đó mang lại cho tôi một chút cách giải quyết: sử dụng virtiocho các thiết bị mạng nói chung và e1000echo các máy ảo cần PXE. Tuy nhiên, tôi vẫn nghĩ đó là một lỗi. Bằng cách nào đó Libvirt không chuyển thành công các tham số khởi động đúng cho SeaBIOS.
gertvdijk

Không gì chmod a=làm gì?
Bryce Guinta

5

Tôi đã có thể khắc phục điều này trong Ubuntu 12.04 bằng cách chuyển các tùy chọn sau cho qemu-kvm trên dòng lệnh (đặt romfile thành trống là mẹo):

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

Thật tuyệt, nhưng tôi có thể chỉ định điều này trong định nghĩa máy Libvirt XML của mình không?
gertvdijk

Nếu bạn đang thực hiện khởi động lại nhiều lần từ dòng lệnh, đây là cách nên làm. Nó thêm một chút tiếng ồn, nhưng ngay lập tức giết chết iPXE mà không yêu cầu bạn chỉnh sửa các tệp XML, nuke tất cả các mạng hoặc tương tự.
i336_

0

Từ hình ảnh của bạn, tôi có thể thấy rằng rất có thể nó phải làm với VM BIOS. Cấu hình VM không được ghi đè lên SeaBIOScác cài đặt, thứ gì đó phải khiến VM khởi động từ PXEđầu.

Để có giải pháp khả thi đầu tiên, hãy thử xem bạn có thể nhập BIOS của Máy ảo không và chỉnh sửa các tùy chọn phổ biến ở đó.

LƯU Ý: Sẽ tiếp tục cập nhật câu trả lời trong khi nghiên cứu của tôi tiết lộ nhiều giải pháp hoặc nguyên nhân có thể hơn.

[EDIT # 1]: Bạn có thể tìm thấy thông tin về cách thiết lập thứ tự khởi động trong SeaBIOS tại đây . Điều đó sẽ giải quyết vấn đề.


Làm cách nào tôi có thể nhập BIOS của VM? Wikipedia về SeaBIOS cho tôi biết tôi nên thử F12 khi khởi động, nhưng điều đó chỉ kích hoạt bỏ qua nỗ lực iPXE một lần.
gertvdijk

@gertvdijk Tôi hiện đang xem xét nó. Tôi sẽ lấy lại cho bạn ngay khi tôi phát hiện ra.
NlightNFotis

@gertvdijk này dường như bằng cách nào đó liên quan: seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis

Cảm ơn, học những thứ mới ngày hôm nay. Tuy nhiên, điều này dường như áp dụng trên toàn hệ thống và về việc xây dựng một CBFS (hệ thống tập tin khởi động lõi) mới. Theo như tôi có thể thấy, nó cũng vô hiệu hóa việc khởi động PXE hoàn toàn. Tôi không thích cách tiếp cận này và tôi nghĩ rằng có thể ngăn chặn việc khởi động iPXE trong thời gian chạy như có thể trong GUI của trình quản lý.
gertvdijk

@gertvdijk Làm sao bạn biết nó vô hiệu hóa nó? Tất cả những gì tôi có thể thấy là thiết lập thứ tự khởi động, nghĩa là một cái gì đó được khởi động trước một thứ khác .
NlightNFotis

-1

Tôi đã có thể ngăn chặn điều này bằng cách sử dụng "-net none":

# qemu-system-i386 -net none

Nhưng sau đó bạn không có bất kỳ mạng nào cả! Tôi coi đây không thực sự là một câu trả lời.
gertvdijk

Xin lỗi, tôi đã bỏ lỡ thực tế là OP vẫn cần kết nối mạng. Trong trường hợp của tôi chạy không có mạng là chấp nhận được.
Catalin P
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.