rootfs Linux 파일에서 부팅 가능한 iso 파일 만들기

rootfs Linux 파일에서 부팅 가능한 iso 파일 만들기

일반적인 Linux 배포판에서 부팅 가능한 iso 파일을 만들고 싶습니다. grub 부트로더를 만들려고 합니다. 먼저 grub.cfg를 사용하여 템플릿을 만들고 grub-mkconfig시작 부분에 다음 구성을 추가합니다.

set default=0
set timeout=5

menuentry "LinuxTest" {
    set root=(hd0)
    linux /boot/bzImage root=/dev/sda1
}

그런 다음 나는grub-mkrescue -o /path/to/file.iso /path/to/linux/files

그런데 실행하려고 하면 "오류: 알 수 없는 파일 시스템"이라고 뜹니다.

이 작업을 수행하기 위해 내가 무엇을 잘못했거나 하지 않았습니까?

리눅스 파일

grub-cli의 ls

답변1

두 번째 이미지의 텍스트를 복사합니다.

grub> ls
(proc) (hd0) (cd) (cd,apple4) (cd,apple3) (cd,apple2) (cd,apple1) (cd,gpt4) (cd,gpt3) (cd,gpt2) (cd,gpt1)
grub> _

BIOS가 아닌 UEFI: 시스템이 항상 현재 부팅 미디어를 (hd0)GRUB로 예약하지는 않습니다. 이 경우 부팅 미디어가 로 인식되는 것처럼 보일 수 있습니다 (cd).

매우 간단한 GRUB 구성 조각은 파티션되지 않은 단일 장치로 읽으려고 시도 (hd0)하지만 파티션되지 않은 빈 디스크처럼 보이거나 GRUB의 GPT 파티션 감지 모듈이 인식하지 못하는 일종의 파티션처럼 보입니다.

GRUB 구성 조각은 자체 일관성도 없습니다. Linux 커널이 이를 처리한다고 가정하면 (hd0)( /dev/sda어쨌든 보장되지는 않습니다!) 이는 path 를 포함하는 파일 시스템이 set root=(hd0)있음을 나타냅니다 ./dev/sda/boot/bzImage

반면, Linux 커널 부팅 매개변수는 파티셔닝을 root=/dev/sda1권장하며 /dev/sda루트 파일 시스템은 첫 번째 파티션에 있습니다.

분할되지 않았 으며 /dev/sda전체 디스크/이미지를 포함하는 단일 파일 시스템만 포함하거나 분할되어 /dev/sda1첫 번째 파티션일 수 없습니다.

grub-mkrescue교육적인 경험을 위해 결과 ISO 이미지를 루프 장치에 연결하고 다음 위치에서 감지된 파티션의 내용을 조사하는 것이 좋습니다 .

ls /dev/loop*
sudo losetup -P --show -f /path/to/file.iso
ls /dev/loop*          # you might see more than one new device!
file -s /dev/loop*     # to identify the filesystem types within

이 명령은 스타일 루프 장치 이름을 losetup출력 하지만 실제로 포함된 파티션에 대한 루프 장치도 생성합니다. X 위치의 숫자를 기록하고 다음 명령 중 하나로 /dev/loopX바꿉니다 .X

시도해 보세요 fdisk -l /dev/loopX: 단일 ISO 파일로 보이는 것은 실제로 다음과 같은 유효한 GPT 파티션 테이블을 포함합니다(파티션 크기는 다를 수 있음).

# fdisk -l /dev/loop0
Disk /dev/loop0: 13,22 MiB, 13867008 bytes, 27084 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7FB1CA87-86D8-4C32-A49D-F5CEB184C045

Device       Start   End Sectors  Size Type
/dev/loop0p1    64   251     188   94K Microsoft basic data
/dev/loop0p2   252  6011    5760  2,8M EFI System
/dev/loop0p3  6012 26435   20424   10M Apple HFS/HFS+
/dev/loop0p4 26436 27035     600  300K Microsoft basic data

이는 단순히 오래된 ISO-9660 이미지가 아니기 때문입니다.하이브리드 ISO-9660/하드디스크 이미지. 이는 Linux 관련 ISO 이미지에서 매우 일반적인 트릭입니다.

이 명령을 사용하여 fdisk /dev/loopX파티션 에 대한 추가 정보를 얻으면 "Microsoft 기본 데이터" 파티션의 이름이 각각 "Microsoft 기본 데이터" 및 "Microsoft 기본 데이터" 로 표시되어 숨기기 위해 존재함을 나타 냅니다. ISO-9660 파일 시스템 메타데이터 등은 "하드 디스크 이미지" 보기의 "숨기기"에서 제거해야 합니다.ifdiskGap0Gap1

EFI 시스템 파티션에는 FAT 파일 시스템 제품군이 포함되어 있으며 efi/boot/bootx64.efi.

Apple HFS+ 파티션에는 GRUB 모듈의 전체 세트를 포함하는 디렉터리 계층 구조와 EFI 시스템 파티션의 파일과 동일한 파일을 포함하는 디렉터리 등 /path/to/linux/files몇 가지 추가 파일도 포함하는 복사본이 포함되어 있습니다.boot/grub/System/Library/CoreServices/boot.efiSystemVersion.plistbootx64.efi

bootx64.efi/는 boot.efiMBR, GPT 및 레거시 macOS 파티션을 기본적으로 지원하는 64비트 UEFI 아키텍처용 GRUB이며, 가능한 경우 이국적인 파티션 유형도 지원하기 위해 내장 구성을 통해 더 많은 모듈을 로드합니다. (기본적으로 boot/grub/x86_64-efi/part_*.mod가능하면 모든 GRUB 모듈 파일을 알파벳순으로 로드하도록 구성되어 있습니다.)

ISO-9660 파일 시스템 태그가 로 설정되어 있는 것을 isoinfo -i /path/to/file.iso볼 수 있으므로 최소한 GRUB 구성 조각을 다음과 같이 설정해야 합니다.grub-mkrescueISOIMAGE

set default=0
set timeout=5

menuentry "LinuxTest" {
    search --label --set root "ISOIMAGE"
    linux /bzImage root=/dev/sda
}

이렇게 하면 GRUB가 레이블로 파일 시스템을 검색하고 이후의 모든 파일 경로 참조에 대한 새 루트로 만들어야 합니다.

첫 번째 사진에서 파일이 디렉터리가 아닌 ISO-9660 파일 시스템의 루트에 bzImage있음 을 알 수 있으므로 경로 이름도 수정해야 합니다./boot

마지막으로 커널의 루트 파일 시스템 매개변수는 어려울 수 있습니다. initramfs를 사용하지 않기 때문에 루트 파일 시스템을 지정하는 방법에 몇 가지 제한 사항이 있습니다. 파일 시스템 레이블이 아닌 /dev/*이름, PARTUUID=구문 또는 PARTLABEL=구문 만 사용할 수 있습니다 .

루트 파일 시스템의 콘텐츠는 전체 디스크 장치에서 ISO-9660 파일 시스템으로 액세스할 수 있지만 PARTUUID=안타깝게도 PARTLABEL=.

이에 액세스하는 또 다른 방법은 세 번째 파티션에서 HFS+ 파일 시스템을 사용하는 것입니다(명령에서 PARTLABEL=HFSPLUS알 수 있듯이). 하지만 커널 이미지에 Apple HFS+ 파일 시스템 지원을 포함시킬 선견지명이 있는지 의심스럽습니다.ifdisk /dev/loopX

GRUB ls명령은 CD/이미지 외에도 시스템에 HDD도 있으므로 시스템에 포함하는 스토리지 드라이버 bzImage와 시스템이 드라이버를 검색하는 순서에 따라 작동할 수도 있고 작동하지 않을 root=/dev/sda수도 있음을 보여줍니다 root=/dev/sdb.

이는 부팅 가능한 미디어의 일회성, 크랙으로 충분할 수 있지만 여러 시스템에서 작동해야 하는 경우에는 보다 강력한 솔루션이 필요합니다. 이 경우에는 grub-mkrescue원래 의도되지 않은 용도로 사용하지 말고 먼저 USB 스틱/하드 드라이브 부팅과 CD-ROM/DVD 부팅(필요한 경우)을 위한 별도의 이미지를 설정하는 것이 좋습니다 . 하드 드라이브에서 부팅하는 것과 CD/DVD 미디어에서 부팅하는 것의 차이점에 익숙해지면 두 가지를 모두 수행하는 이미지에 혼합해 보는 것이 더 쉬울 것입니다.

관련 정보