pygrub
한동안 Xen과 Xen을 사용한 후 KVM/qemu를 사용하여 비슷한 작업을 수행하려고 합니다.
기본적으로 Linux 배포판의 루트 파일 시스템(파티션 없음, 디스크에 직접 FS만 있음)을 포함하는 LVM 논리 볼륨(파일일 수도 있음)이 있습니다. 여기에는 /boot/grub/grub .cfg도 포함되어 있습니다. 부팅할 수 있기를 원합니다.
나는 Debian/Ubuntu의 grub-firmware-qemu 패키지가 이를 위해 설계되었다는 인상을 받았지만 아직 작동시키지 못했습니다. AFAICT, grub.bin 이미지에는 grub.cfg 파일과 일부 메뉴 옵션(예: multiboot.img 검색 또는 grub.cfg 검색)이 포함된 하드코드된 메모리 디스크가 포함되어 있지만 실행할 때 얻는 것은 kvm -bios grub.bin
"호환되지 않는 라이센스"뿐입니다. " 오류 메시지. 그리고 다른 grub.cfg를 사용하여 다른 grub.cfg를 생성하는 방법을 잘 모르겠습니다 grub.bin
(이것이 유일한 방법입니다 configfile (hd0)/boot/grub/grub.cfg
).
물론 이 작업을 수행하기 위해 최소한의 그럽 구성을 사용하여 플로피, CDROM 또는 디스크 이미지를 만들 수 있지만 이를 수행하는 더 깨끗하고 정식적인 방법이 있어야 한다고 생각하며 내 연구에서는 지금까지 아주 작은 무언가를 가져왔습니다.
나는 qemu의 옵션을 사용할 수도 있다고 생각 하지만, 다시 한번 이것을 생성하는 -kernel
방법을 모르겠습니다 . ( grub.img
생성된 grub.img와 함께 grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.mod
동일한 "호환되지 않는 라이센스" 오류 메시지가 다시 나타납니다 ).
이것은 데비안에 있고 grub 패키지 버전은 1.99-23이고 kvm/qemu 버전은 1.1.2+dfsg-2입니다.
즉, 가상 디스크에서 /boot/grub을 확인하기 위해 kvm 부팅을 활성화하는 grub image/grub.cfg를 grub.bin(와 함께 사용 kvm -bios
) 또는 grub.img(와 함께 사용 ) 생성하려면 어떻게 해야 합니까?kvm -kernel
답변1
공교롭게도 Debian에서 온 것처럼 보입니다 grub
.
-kernel grub.img
필요한 grub 모듈만 포함하면 작동합니다 grub-mkimage
.
-bios grub.bin
최신 grub 패키지(2.00-7) 에서 작동합니다 . experimental
그러나 grub.bin
함께 제공되는 것은 그다지 유용하지 않습니다.
이 메모리 디스크를 사용하여 모듈을 저장하고 옵션을 memdisk
사용 하여 지정하는 것이 좋습니다 . 예를 들어, 메뉴 항목 중 하나는 메모리 디스크를 검색하여 자체적으로 찾습니다. 또한, 데비안 패키지에는 qemu grub 모듈이 포함되어 있지 않으므로 소스 패키지에서 빌드하지 않는 한 다른 grub.bin을 빌드할 수 없습니다(파일을 바이너리 편집하여 grub.cfg를 변경할 수는 있지만).grub.cfg
grub.cfg
-c
grub-mkimage
/boot/grub/grub.cfg
이 -bios grub.bin
방법이 나에게는 가장 깔끔해 보이지만 -kernel
데비안 패키지가 수정될 때까지 플로피 방법을 사용하겠습니다.
편집하다: ata.mod
그럽 모듈은 BIOS biosdisk.mod
와 함께 사용할 때보다 훨씬 느리게 에뮬레이트된 IDE 드라이브를 읽습니다(사용하지 않을 때의 기본 BIOS ). 또한 grub 펌웨어는 virtio-blk 또는 virtio-scsi 디스크를 지원하지 않는 것 같으므로 내 선택이 아닙니다.seabios
-bios grub.bin
kvm -bios grub.bin
누구든지 이 경로로 가고 싶다면 현재 (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 -nographic
kvm으로 넘어갔습니다 . 즉, 그래픽 없이 Linux VM을 부팅합니다(단지 직렬 인터페이스이므로 VM의 grub이 직렬을 사용하도록 구성되었거나 적어도 그래픽을 사용하도록 구성되지 않았는지 확인하고 커널 콘솔이 ttyS0으로 이동하여 거기서 getty를 실행합니다). 또한 VGA 콘솔에도 쉽게 적용할 수 있습니다.
답변2
웹을 많이 검색했지만 해결책을 찾지 못한 후에 libvirt/kvm과 함께 사용할 pygrub용 래퍼를 만들었습니다.
비록 늦었지만 이 솔루션이 여러분에게 도움이 될 수도 있으므로 공유하고 싶었습니다. 이것은 libvirt 후크 스크립트입니다. 스크립트는 준비/시작 이벤트에서 도메인 구성을 구문 분석하고 pygrub이 사용 가능한 디스크를 통해 커널을 찾도록 한 다음 이미지를 호스트의 필수 폴더에 복사합니다.