LiveCD가 아닌 사용자 정의 부팅 가능한 Linux 이미지를 만듭니다.

LiveCD가 아닌 사용자 정의 부팅 가능한 Linux 이미지를 만듭니다.

그래서 커널과 initrd를 컴파일했습니다. 그런 다음 이미지를 생성하고 grub을 설치하여 실제로 디스크에서 이미지를 로드하려면 어떻게 해야 합니까? 내 목표는 USB에서 부팅 가능한 livecd를 만드는 데 이를 사용하지 않는 것입니다. 이에 대한 기사가 많이 있기 때문입니다. 내 목표는 이미지를 생성한 다음( dd if=/dev/zero of=linux.img ...전체 이미지를 생성하는 데 필요한 것이 무엇인지 알고 있음) 간단히 dd를 사용하여 해당 이미지를 디스크의 첫 번째 섹터에 쓴 다음 거기에서 부팅하는 것입니다. 그런데 내 커널과 initrd는 img에서 어디로 갔나요? 바로 뒤에요? 디스크에는 파티션이 없습니다. 이는 사용자 정의 커널이며 최소한의 busybox 설정을 제거했습니다. 따라서 /boot 파티션이 필요하지 않으며 하나 이상의 파일이 없기 때문에 다른 파티션에는 "파일"이 존재하지 않습니다.

MBR이 512바이트라는 것을 알고 있으므로 grub첫 번째 섹터에 512바이트를 덮어쓴다고 가정합니다. 하지만 이미지에 grub을 어떻게 설치합니까? 작동 할 수도 있나요 grub-install linux.img? /boot에 있기 때문에 일반 설정에서 커널과 initrd를 로드할 위치를 알고 있지만 grub이 "이미지"에는 살펴볼 파티션이 없습니다 /boot. 그냥 루트를 그 자체로 설정합니까?

어떤 도움이라도 대단히 감사하겠습니다.

initrd 생성 프로세스:https://pastebin.com/ti9LXakx

initrd의 현재 init 스크립트:

#!/bin/sh   
mount -t sysfs sysfs /sys 
mount -t proc proc /proc 
mount -t devtmpfs udev /dev 
exec /bin/sh

답변1

512바이트는 GRUB에 비해 너무 작습니다. 클래식 BIOS 부팅 MBR 파티션 디스크에서 GRUB는 또한 일반적으로 사용되지 않는 블록 #1..#2047에 자신의 일부를 배치합니다. 최신 운영 체제에서는 정확하게 배치합니다. 첫 번째 파티션의 시작 부분은 1입니다. 블록 #2048의 디스크 시작 부분부터 MiB입니다. 일반적으로 GRUB 코어 이미지에 구축하기 위해 선택한 기능과 GRUB 모듈로 로드할 기능에 따라 약 100개의 블록을 사용할 수 있습니다.일부파일 시스템).

그리고 MBR 블록(블록 #0)에서 512바이트를 모두 얻을 수도 없습니다. MBR 블록 끝에 있는 최소 2바이트는 서명에 의해 차지되며 BIOS에 디스크가 부팅 가능함을 알려줍니다.

GRUB에는 구성 파일, 커널 및 initrd를 찾는 디스크/파티션/논리 볼륨/암호화된 볼륨에 대한 기본 기대치가 있습니다.일종의 파일 시스템을 포함합니다.. 디스크의 연속 블록을 읽어 커널과 initramfs를 읽으려는 경우 이는 고대 LILO 부트로더가 했던 것과 더 비슷해 보입니다... 이것이 현대 커널에서도 여전히 작동하는지 궁금합니다.

간단히 말해서, 파티션 테이블을 생략하는 것은 여러분이 생각하는 장점이 아닙니다. 사용자 정의 구성을 사용하면할 수 있다GRUB이 블록 #A.. #B를 커널로, #(B+1).. #C를 initramfs 파일로 읽도록 하세요. 그러나 이는 아무 이유 없이 여러분의 삶을 더 어렵게 만들 뿐입니다.

Live CD를 언급했으므로 CD-ROM/DVD에 구울 때 또는 가상 머신에서 가상 CD로 사용할 때 이미지가 작동하도록 하려면 HDD 이미지와 MBR 모두에서 작동하는 하이브리드 이미지를 생성해야 합니다. 부트 로더 및 El Torito 부트 확장이 포함된 유효한 ISO9660 CD/DVD 이미지 - 이를 위해서는 이미지의 다른 위치에 별도의 부트 로더가 필요합니다.

UEFI 호환성을 원한다면… "배운 것을 잊어야 한다."

UEFI를 사용하면시스템 펌웨어FAT 파일 시스템(FAT32가 선호되지만 최신 버전의 UEFI에서는 다른 형태의 FAT도 허용됨)과 해당 파일 시스템에서 특정 이름을 가진 파일인 부트로더를 찾을 것으로 예상됩니다. 파일 시스템은 이미 UEFI 부팅 가능성에 대한 펌웨어 요구 사항을 충족하므로 이를 사용하여 커널, initramfs 및 부트로더의 구성을 일반 파일로 저장할 수도 있습니다.

이미지를 생성하려면 losetup이를 장치에 바인딩한 /dev/loop<device_number>다음 실제 디스크처럼 사용할 수 있습니다. 이미지에 파티션 테이블이 포함된 경우 losetup -P자동으로 생성된 파티션 장치 형식을 사용하여 /dev/loop<device_number>p<partition_number>이미지 파일 내의 모든 파티션에 쉽게 액세스할 수 있습니다.

관련 정보