Grub 2를 설치하려는 1Gb HDD 이미지(Bochs의 bximage를 사용하여 생성)가 있습니다.
내가 아는 한, Grub 설치는 세 부분으로 구성됩니다.
- boot.img 이미지, 첫 번째 섹터를 차지
- core.img 이미지, 첫 번째 섹터 이후부터 다음 트랙이 시작될 때까지의 공간을 차지합니다.
- grub.cfg 및 기타 모듈이 있는 /boot/grub/ 디렉터리입니다.
먼저 /boot/grub/ 디렉터리에 있는 내 Linux boot.img 이미지를 사용합니다.
다음으로 다음 명령을 사용하여 core.img 이미지를 생성했습니다.
sudo grub-mkimage -v --format=i386-pc -o core.img -p\(hd0,msdos1\)/boot/grub ls ext2 part_msdos
최종 디스크 이미지에 설치하려면 다음 명령을 사용합니다.
sudo dd if=boot.img of=/dev/loop0 bs=446 count=1
덮어쓰기를 방지하려면 446 블록 크기를 사용하세요.MBR에 있는 파티션 데이터sudo dd if=core.img of=/dev/loop0 bs=512 seek=1
여기서seek=1
목적은 방금 작성한 MBR을 덮어쓰는 것이 아닙니다.
디스크는 2048 섹터에서 시작하여 마지막 섹터로 끝나는 ext2 파티션으로 포맷되었으며 grub.cfg(아무 것도 로드하지 않는 가짜 메뉴 항목 포함)를 포함하는 boot/grub/ 디렉터리와 /의 모듈을 포함합니다. boot/grub/i386-pc/ 디렉토리.
Bochs는 이 grub 설치를 grub> 프롬프트로 성공적으로 부팅했습니다. ~처럼이 우분투 가이드이 동작은 grub.cfg를 찾을 수 없음을 나타냅니다.
통화 후 ls
흥미로운 문제에 직면했습니다. 연결된 장치가 전혀 없는 것 같았습니다!
문제의 본질을 더 자세히 설명하기 위해 grub-mkrescue
슬레이브 드라이브에서 이미지를 부팅할 때 ls
복구 드라이브에 대한 호출이 자신의 이미지를 표시하는 것을 관찰했습니다.그리고이전에 "존재하지 않았던" 기본 디스크 드라이브 및 ext2 파티션. /boot/grub.cfg가 실제로 액세스 가능한지 확인했습니다.
이 관찰을 바탕으로 나는 내 core.img에 일부 기본 모듈이나 기능이 누락되어 있다고 가정합니다. 그런데 어떻게 수정하나요?
또한 USB 스틱을 사용하여 실제 컴퓨터에서 이 연습을 실행했는데 똑같은 일이 발생하여 문제가 Bochs에 있지 않다는 것을 확인할 수 있습니다.
답변1
실제로는 다음과 같은 모듈, 특히 디스크 드라이버가 누락된 것으로 나타났습니다 biosdisk
.
OSDev 위키에서:
biosdisk - This module is required for GRUB 2 to be able to boot from a LiveCD.
답변2
원저자가 자신의 사례가 실패한 이유를 찾아 커뮤니티의 다른 사람들과 공유했지만, 저는 똑같은 동작을 일으키는 또 다른 문제를 발견했습니다.
ls
그럽 구조 셸 내에서 이를 호출하면 어떤 장치도 생성되지 않습니다.
어떤 이유로 *.mod
든 파일에서 중요한 기호 정보가 제거 되면 grub-install
자동으로 빌드되지만 core.img
패키지 core.img
된 모듈은 사용할 수 없습니다.
이 "무해한" 제거 옵션조차도 --strip-unneeded
두 가지 중요한 기호 grub_mod_init
와 grub_mod_fini
. 이러한 기호가 없으면 grub 모듈이 로드되지만 초기화되지 않으므로 사용할 수 없습니다.
grub 모듈을 정말로 제거하려면 명령줄 -K grub_mod_init -K grub_mod_fini
에 추가해야 합니다.strip's