mkisofs에서 iso를 "부팅 가능(dos/MBR 섹터)"으로 설정합니다.

mkisofs에서 iso를 "부팅 가능(dos/MBR 섹터)"으로 설정합니다.

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 용어 x64ia32)도 포함되어 있으므로 총시작 모드.

그런 짐승을 만드는 것은 복잡하고, 아치는특수 도구archiso이 일을 하는 데에는 그럴 만한 이유가 있을 것 같아요. 바퀴를 재발명하려고 하는 대신 그것을 사용해 보는 것이 좋을 것 같습니다.소스 코드를 archiso사용자 정의해야 하는 경우 Gitlab에서 찾을 수 있습니다.

보고서를 올바르게 해석 하면 xorrisoISO 이미지는 다음 두 가지 방법으로만 부팅 가능하다고 주장합니다.

  • BIOS 모드에서 (실제 또는 가상) ISO9660 CD/DVD로
  • UEFI 모드의 HDD 이미지로(단, MBR 파티션 테이블에만 해당)

또한 이미지에서 부트 레코드 상태가 cyl-align-off반대 로 나타나 isohybrid cyl-align-allISO 이미지의 다양한 구성 요소가 제대로 정렬되지 않았을 수 있음을 나타냅니다.

실제 Arch ISO에서 MBR은 첫 번째 파티션(주 Iiso9660 파일 시스템 콘텐츠)이 BIOS 모드(상태 0x80)에서 부팅 가능하고 파티션 유형 ID가 0x00임을 나타냅니다. 이는 파티션 유형이 아니기 때문에 ISO9660 파일 시스템에 일반적입니다. 표준 MBR에 의해 할당된 ID입니다. 이미지에서 MBR은 첫 번째 파티션을 부팅할 수 없다고 선언하고 유형 ID는 0x83입니다. 이는 ext4다른 Linux 또는 다른 파일 시스템에서 예상되는 것입니다.

관련 정보