iso 파일 "archlinux-2022.06.01-x86_64.iso"를 추출했습니다. "airootfs.sfs" 파일을 변경했습니다.
이제 추출한 원본 iso 파일과 마찬가지로 "부팅 가능한(dos/MBR 섹터)" iso 이미지를 다시 생성하겠습니다.
sudo xorriso -as mkisofs -d -l -r -no-emul-boot
-o archlinux.iso .
-append_partition 2 0xef ../compile-linux/efi_part.img -e "--interval:appended_partition_2:all::" -no-emul-boot ../compile-linux/bios_boot.img
-G ../compile-linux/mbr_code.img
-b syslinux/isolinux.bin
-c syslinux/boot.cat
산출file archlinux.iso
archlinux.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'ISOIMAGE' (bootable)
출력 명령xorriso -indev archlinux.iso -report-el-torito plain -report-system-area plain
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 114 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'archlinux.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito , MBR cyl-align-off
Media summary: 1 session, 445804 data blocks, 871m data, 178g free
Volume id : 'ISOIMAGE'
El Torito catalog : 42 1
El Torito cat path : /syslinux/boot.cat
El Torito images : N Pltf B Emul Ld_seg Hdpt Ldsiz LBA
El Torito boot img : 1 BIOS y none 0x0000 0x00 76 43
El Torito img path : 1 /syslinux/isolinux.bin
System area options: 0x00000a00
System area summary: MBR cyl-align-off
ISO image size/512 : 1783216
Partition offset : 0
MBR heads per cyl : 64
MBR secs per head : 32
MBR partition table: N Status Type Start Blocks
MBR partition : 1 0x00 0x83 0 1783216
MBR partition : 2 0x00 0xef 1783216 1600
위 출력은 제가 직접 만든 iso 파일입니다.
가상 머신 "Efi 옵션 비활성화됨"에서 iso 파일을 사용하려고 하는데 이러한 오류가 발생합니다.
저는 초보자라 이것에 대해 잘 모릅니다.
그래서 RAW ISO 출력에서 이미지를 만드는 올바른 방법을 찾으려고 노력했지만 성공하지 못했습니다.
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.
xorriso : NOTE : ISO image bears MBR with -boot_image any partition_offset=16
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 113 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 396800 * 2048 , 0 * 512
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev '../archlinux-2022.06.01-x86_64.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito , MBR isohybrid cyl-align-all GPT
Media summary: 1 session, 440998 data blocks, 861m data, 178g free
Volume id : 'ARCH_202206'
El Torito catalog : 118 1
El Torito cat path : /syslinux/boot.cat
El Torito images : N Pltf B Emul Ld_seg Hdpt Ldsiz LBA
El Torito boot img : 1 BIOS y none 0x0000 0x00 4 119
El Torito boot img : 2 UEFI y none 0x0000 0x00 0 396800
El Torito img path : 1 /syslinux/isolinux.bin
El Torito img opts : 1 boot-info-table isohybrid-suitable
El Torito img blks : 2 44032
System area options: 0x00000302
System area summary: MBR isohybrid cyl-align-all GPT
ISO image size/512 : 1763992
Partition offset : 16
MBR heads per cyl : 64
MBR secs per head : 32
MBR partition table: N Status Type Start Blocks
MBR partition : 1 0x80 0x00 64 1587136
MBR partition : 2 0x00 0xef 1587200 176128
GPT : N Info
GPT disk GUID : 3230323230363041b130303533353232
GPT entry array : 2 248 separated
GPT lba range : 64 1763928 1763991
GPT partition name : 1 490053004f00480079006200720069006400
GPT partname local : 1 ISOHybrid
GPT partition GUID : 1 3230323230363041b131303533353232
GPT type GUID : 1 a2a0d0ebe5b9334487c068b6b72699c7
GPT partition flags: 1 0x1000000000000001
GPT start and size : 1 64 1587136
GPT partition name : 2 490053004f004800790062007200690064003100
GPT partname local : 2 ISOHybrid1
GPT partition GUID : 2 3230323230363041b132303533353232
GPT type GUID : 2 a2a0d0ebe5b9334487c068b6b72699c7
GPT partition flags: 2 0x1000000000000001
GPT start and size : 2 1587200 176128
내가 뭘 잘못했나요? ISO 이미지 파일을 만들어 라이브로 사용하려고 합니다.
당신의 도움을 주셔서 감사합니다
답변1
xorriso -as mkisofs 실행에는 최소한 -e와 수정 옵션, -b와 수정 옵션 -eltorito-alt-boot 사이의 구분 기호가 없습니다. 따라서 -e가 -b로 재정의되므로 결과 ISO에는 EFI에 대한 El Torito 항목이 누락됩니다.
어떤 경우에도 ISOLINUX의 실패를 이러한 단점으로 돌릴 수는 없습니다. 나는 이것이 누락된 -b 수정 옵션과 관련이 있다고 생각합니다.
xorriso에게 부팅 가능한 ISO 재생을 위한 부팅 관련 옵션에 대한 조언을 요청할 수 있습니다(ISO가 xorriso에서 만들어진 경우 가장 잘 작동합니다). Archlinux ISO를 올바르게 분석하려면 xorriso-1.5.4 이상이 필요합니다. 이전 버전에서는 부팅 옵션 조합을 사용할 필요가 없기 때문입니다.
$ xorriso -indev archlinux-2022.06.01-x86_64.iso -report_el_torito as_mkisofs
...
-V 'ARCH_202206'
--modification-date='2022060115352200'
-isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'archlinux-2022.06.01-x86_64.iso'
-partition_cyl_align all
-partition_offset 16
-partition_hd_cyl 64
-partition_sec_hd 32
--mbr-force-bootable
-append_partition 2 0xef --interval:local_fs:1587200d-1763327d::'archlinux-2022.06.01-x86_64.iso'
-iso_mbr_part_type 0x00
-c '/syslinux/boot.cat'
-b '/syslinux/isolinux.bin'
-no-emul-boot
-boot-load-size 4
-boot-info-table
-eltorito-alt-boot
-e '--interval:appended_partition_2_start_396800s_size_176128d:all::'
-no-emul-boot
-boot-load-size 0
-isohybrid-gpt-basdat
일부는 ISO에 특정하기 때문에 이들 모두를 제공할 필요는 없습니다(-V 'ARCH_202206' --modification-date='2022060115352200'). xorriso가 자체적으로 계산할 수 있으므로 일부는 실제로 필요하지 않습니다(-partition_cyl_align all -partition_hd_cyl 64 -partition_sec_hd 32 -boot-load-size 0).
옵션 목록과 비교하면 이것이 (가상) 광학 미디어에서 BIOS를 통해 부팅할 수 없는 직접적인 원인이라고 확신합니다.
- -b 수정 옵션 누락: -no-emul-boot -boot-load-size 4 -boot-info-table (-no-emul-boot 버그가 적용되었습니다.)
하지만 더 많은 질문이 있습니다.
-eltorito-alt-boot가 누락되어 EFI를 광학 미디어에서 부팅할 수 없습니다.
-e 수정 옵션 -isohybrid-gpt-basdat가 누락되었으므로 까다로운 EFI 구현을 통해 USB 스틱에서 GPT를 부팅할 수 없습니다.
-isohybrid-mbr이 누락되어 USB 스틱에서 BIOS를 통해 부팅할 수 없습니다. 대신 중복된 -G와 흐릿한 MBR 이미지 mbr_code.img가 있습니다(이것을 어디서 얻었습니까?).
난독화된 입력 파일 ../compile-linux/bios_boot.img는 ISO의 루트 디렉터리에 매핑됩니다.
-b와 -e는 역순이지만 괜찮습니다. EFI 이미지의 부팅 로드 크기 0은 너무 커서 부팅 디렉터리에 실제 크기를 나열할 수 없기 때문에 올바른 것입니다(32MiB로 제한).
xorriso-1.5.4를 사용하여 Archlinux ISO를 작동하는 더 쉬운 방법이 있습니다:
xorriso -indev archlinux-2022.06.01-x86_64.iso \
-outdev archlinux.iso \
... xorriso manipulation commands like -map or -rm ... \
-boot_image any replay
(xorriso 질문과 지원 요청은 다음 주소로 제출하는 것이 가장 좋습니다. [이메일 보호됨].)
좋은 하루 보내세요 :)
도마
답변2
archlinux-2022.06.01-x86_64.iso
총 부팅 가능4개다른 방법:
- BIOS 모드에서 (실제 또는 가상) ISO9660 CD/DVD로
- UEFI 모드의 (실제 또는 가상) ISO9660 CD/DVD
- BIOS 모드에서 HDD 이미지로
- UEFI 모드에서 HDD 이미지로
archiso
프로필 구성 에 따라 UEFI 부팅 모드에는 64비트 및 32비트 x86 UEFI 구현을 위한 두 개의 별도 부트로더(UEFI 용어 x64
로 ia32
)도 포함되어 있으므로 총육시작 모드.
그런 짐승을 만드는 것은 복잡하고, 아치는특수 도구archiso
이 일을 하는 데에는 그럴 만한 이유가 있을 것 같아요. 바퀴를 재발명하려고 하는 대신 그것을 사용해 보는 것이 좋을 것 같습니다.소스 코드를 archiso
사용자 정의해야 하는 경우 Gitlab에서 찾을 수 있습니다.
보고서를 올바르게 해석 하면 xorriso
ISO 이미지는 다음 두 가지 방법으로만 부팅 가능하다고 주장합니다.
- BIOS 모드에서 (실제 또는 가상) ISO9660 CD/DVD로
- UEFI 모드의 HDD 이미지로(단, MBR 파티션 테이블에만 해당)
또한 이미지에서 부트 레코드 상태가 cyl-align-off
반대 로 나타나 isohybrid cyl-align-all
ISO 이미지의 다양한 구성 요소가 제대로 정렬되지 않았을 수 있음을 나타냅니다.
실제 Arch ISO에서 MBR은 첫 번째 파티션(주 Iiso9660 파일 시스템 콘텐츠)이 BIOS 모드(상태 0x80)에서 부팅 가능하고 파티션 유형 ID가 0x00임을 나타냅니다. 이는 파티션 유형이 아니기 때문에 ISO9660 파일 시스템에 일반적입니다. 표준 MBR에 의해 할당된 ID입니다. 이미지에서 MBR은 첫 번째 파티션을 부팅할 수 없다고 선언하고 유형 ID는 0x83입니다. 이는 ext4
다른 Linux 또는 다른 파일 시스템에서 예상되는 것입니다.