일반적인 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
그런데 실행하려고 하면 "오류: 알 수 없는 파일 시스템"이라고 뜹니다.
이 작업을 수행하기 위해 내가 무엇을 잘못했거나 하지 않았습니까?
답변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 파일 시스템 메타데이터 등은 "하드 디스크 이미지" 보기의 "숨기기"에서 제거해야 합니다.i
fdisk
Gap0
Gap1
EFI 시스템 파티션에는 FAT 파일 시스템 제품군이 포함되어 있으며 efi/boot/bootx64.efi
.
Apple HFS+ 파티션에는 GRUB 모듈의 전체 세트를 포함하는 디렉터리 계층 구조와 EFI 시스템 파티션의 파일과 동일한 파일을 포함하는 디렉터리 등 /path/to/linux/files
몇 가지 추가 파일도 포함하는 복사본이 포함되어 있습니다.boot/grub/
System/Library/CoreServices/
boot.efi
SystemVersion.plist
bootx64.efi
bootx64.efi
/는 boot.efi
MBR, GPT 및 레거시 macOS 파티션을 기본적으로 지원하는 64비트 UEFI 아키텍처용 GRUB이며, 가능한 경우 이국적인 파티션 유형도 지원하기 위해 내장 구성을 통해 더 많은 모듈을 로드합니다. (기본적으로 boot/grub/x86_64-efi/part_*.mod
가능하면 모든 GRUB 모듈 파일을 알파벳순으로 로드하도록 구성되어 있습니다.)
ISO-9660 파일 시스템 태그가 로 설정되어 있는 것을 isoinfo -i /path/to/file.iso
볼 수 있으므로 최소한 GRUB 구성 조각을 다음과 같이 설정해야 합니다.grub-mkrescue
ISOIMAGE
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+ 파일 시스템 지원을 포함시킬 선견지명이 있는지 의심스럽습니다.i
fdisk /dev/loopX
GRUB ls
명령은 CD/이미지 외에도 시스템에 HDD도 있으므로 시스템에 포함하는 스토리지 드라이버 bzImage
와 시스템이 드라이버를 검색하는 순서에 따라 작동할 수도 있고 작동하지 않을 root=/dev/sda
수도 있음을 보여줍니다 root=/dev/sdb
.
이는 부팅 가능한 미디어의 일회성, 크랙으로 충분할 수 있지만 여러 시스템에서 작동해야 하는 경우에는 보다 강력한 솔루션이 필요합니다. 이 경우에는 grub-mkrescue
원래 의도되지 않은 용도로 사용하지 말고 먼저 USB 스틱/하드 드라이브 부팅과 CD-ROM/DVD 부팅(필요한 경우)을 위한 별도의 이미지를 설정하는 것이 좋습니다 . 하드 드라이브에서 부팅하는 것과 CD/DVD 미디어에서 부팅하는 것의 차이점에 익숙해지면 두 가지를 모두 수행하는 이미지에 혼합해 보는 것이 더 쉬울 것입니다.