Khởi động qemu / kvm trực tiếp từ hệ thống tệp


8

Đã sử dụng Xen và được pygrubmột thời gian, giờ tôi đang cố gắng làm điều gì đó tương tự với KVM / qemu.

Về cơ bản, tôi có một khối logic LVM (mặc dù đó cũng có thể là một tệp) có chứa hệ thống tệp gốc của bản phân phối Linux (không phân vùng, chỉ có FS trực tiếp trên đĩa) cũng chứa /boot/grub/grub.cfg, và tôi muốn có thể khởi động nó.

Tôi có ấn tượng rằng gói grub-firmware-qemu trên Debian / Ubuntu được dành cho điều đó, nhưng tôi đã không quản lý để làm cho nó hoạt động. AFAICT, hình ảnh grub.bin chứa một memdisk được mã hóa cứng với tệp grub.cfg với một vài tùy chọn menu (như tìm kiếm multiboot.img hoặc tìm kiếm grub.cfg), nhưng tất cả những gì tôi nhận được khi chạy kvm -bios grub.binlà "giấy phép không tương thích " thông báo lỗi. Và tôi không chắc chắn làm thế nào để tạo ra một sự khác biệt grub.binvới một grub.cfg khác (một điều sẽ chỉ làm configfile (hd0)/boot/grub/grub.cfg).

Tất nhiên, tôi có thể tạo một hình ảnh đĩa mềm hoặc cdrom hoặc đĩa với cấu hình grub tối thiểu chỉ có vậy nhưng tôi có cảm giác rằng nên có một cách sạch hơn / chính tắc để làm điều đó và nghiên cứu của tôi đã mang lại rất ít xa.

Tôi cho rằng người ta cũng có thể sử dụng -kerneltùy chọn của qemu , nhưng một lần nữa, tôi không biết cách tạo ra một thứ grub.imgcho nó. (sử dụng grub.img được tạo với grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modthông báo lỗi "giấy phép không tương thích" một lần nữa).

Đó là trên debian với phiên bản 1.99-23 của gói grub và 1.1.2 + dfsg-2 của kvm / qemu.

Vì vậy, trong ngắn hạn, tôi nên tạo một grub.bin (sẽ được sử dụng với kvm -bios) hoặc grub.img (được sử dụng với kvm -kernel) để có kvm khởi động một hình ảnh grub có thể phân tích cú pháp / boot / grub /grub.cfg trên đĩa ảo?

Câu trả lời:


6

Khi nó xảy ra, nó trông giống như một lỗi trong gói của debian grub.

Cách -kernel grub.imgtiếp cận hoạt động nếu tôi chỉ bao gồm các mô-đun grub tôi cần grub-mkimage.

Các -bios grub.binhoạt động với gói grub mới hơn từ experimental(2.00-7). Tuy nhiên, grub.binđi kèm với nó không phải là rất hữu ích.

Nó đi kèm với một memdiskđi kèm với grub.cfg. Sẽ tốt hơn nếu sử dụng memdisk đó để giữ các mô-đun và grub.cfgđược chỉ định với -ctùy chọn grub-mkimage. Chẳng hạn, một trong những mục menu tìm kiếm /boot/grub/grub.cfgvà tìm thấy chính nó trong memdisk. Ngoài ra, gói debian không bao gồm các mô đun qemu grub, vì vậy bạn không thể xây dựng một grub.bin khác (mặc dù bạn có thể chỉnh sửa tệp nhị phân để thay đổi grub.cfg) trừ khi bạn thực hiện từ gói nguồn.

Cách -bios grub.bintiếp cận nghe có vẻ là cách tiếp cận sạch nhất với tôi, nhưng tôi sẽ sử dụng -kernelcách tiếp cận hoặc đĩa mềm cho đến khi gói debian được sửa.

EDIT : tốt, ata.modmô-đun grub để đọc các ổ đĩa IDE mô phỏng chậm hơn rất nhiều so với sử dụng biosdisk.modkết hợp với seabios(bios mặc định khi không sử dụng -bios grub.bin). Ngoài ra, có vẻ như phần mềm grub không hỗ trợ các đĩa virtio-blk hay virtio-scsi, vì vậy kvm -bios grub.binsẽ không phải là một lựa chọn cho tôi.

Trong trường hợp bất cứ ai muốn đi theo con đường đó, tôi hiện đang sử dụng (cú pháp zsh):

grub-mkimage -O i386-pc -c =(print -l serial 'terminal_input serial' \
  'terminal_output serial' 'set prefix=(hd0)/boot/grub' '. grub.cfg') -o grub.img \
  at_keyboard configfile biosdisk ext2 linux test serial halt minicmd terminal cat

-kernel grub.img -nographictruyền cho kvm. Đó là khởi động máy ảo Linux không có đồ họa (chỉ có giao diện nối tiếp, vì vậy hãy đảm bảo rằng mạng lưới của máy ảo được cấu hình để sử dụng nối tiếp (hoặc ít nhất là không được định cấu hình để sử dụng đồ họa), bảng điều khiển hạt nhân đi đến ttyS0 và bạn chạy getty trên đó). Nó cũng có thể dễ dàng được điều chỉnh để hoạt động cho các bảng điều khiển VGA.


2

Sau rất nhiều lần duyệt web, tôi không tìm thấy bất kỳ giải pháp nào và tôi đã tạo một trình bao bọc cho pygrub được sử dụng với libvirt / kvm.

Có lẽ giải pháp này hữu ích cho bạn, thậm chí muộn, vì vậy tôi muốn chia sẻ nó. Đó là một kịch bản hook libvirt. Kịch bản phân tích cấu hình miền trong sự kiện chuẩn bị / bắt đầu, cho phép pygrub tìm kernel thông qua các đĩa có sẵn và sau đó sao chép hình ảnh vào thư mục mong muốn trong máy chủ.

Hãy xem github.com/baquilla/pygrub-kvm-wrapper .

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.