수정된 ISO 이미지로 부팅

수정된 ISO 이미지로 부팅

ISO 파일, 특히 데비안 설치 프로그램(debian-11.4.0-i386-netinst.iso)을 수정한 다음 부팅해 보았습니다. 다음 코드는 iso 파일의 내용을 추출하고 새 iso 파일을 다시 만듭니다.

mkdir -p tmp_dir

bsdtar -C tmp_dir -xf debian-11.4.0-i386-netinst.iso

genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat \
            -no-emul-boot -boot-load-size 4 -boot-info-table \
            -o new_image.iso tmp_dir

그런 다음 새 iso 파일을 USB 드라이브에 복사했습니다.

sudo dd if=new_image.iso of=/dev/sdg status=progress

그러면 lsblk다음과 같은 출력이 제공됩니다.

$ lsblk /dev/sdg
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdg    8:96   1 29,4G  0 disk 

하지만 시작할 수가 없어요. 이유를 아시나요?

다음은 몇 가지 추가 정보입니다.

  • 먼저, 원본 이미지를 사용하여 USB 스틱을 생성하면 USB 스틱으로 부팅할 수 있습니다.

sudo dd if=debian-11.4.0-i386-netinst.iso of=/dev/sdg status=progress

그 후에는 lsblk다음과 같은 결과가 나옵니다.

$ lsblk /dev/sdg
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdg      8:96   1 29,4G  0 disk 
├─sdg1   8:97   1  471M  0 part 
└─sdg2   8:98   1  1,9M  0 part 

두 개의 파티션을 볼 수 있습니다(새 이미지에는 파티션이 없습니다).

  • 둘째, 새 이미지는 vmware에서 제대로 실행됩니다. 표준 컴퓨터에서는 작동하지 않는다는 것을 잘 모르겠습니다.

어떤 아이디어가 있나요?

답변1

부팅 가능한 USB 미디어 생성 도구 개발자인 Rufus는 다음과 같이 썼습니다.SuperUser.SE에 대한 훌륭한 답변입니다.문제를 일으키는 이면의 복잡성을 이해할 수 있는 방식으로 설명합니다.

를 사용하면 genisoimageISO 파일을 (실제 또는 가상) CD/DVD로만 부팅 가능하게 만들 수 있습니다.

HDD와 같은 장치로 부팅하려면(예: USB 스틱에 쓸 때) 이미지 시작 부분에 마스터 부트 레코드가 필요하며 유효한 MBR 파티션 테이블을 포함해야 하므로 이미지도 유효할 수 있습니다. 하드 디스크 이미지로 해석됩니다.

이는 이 목표를 달성하기 위해 개발된 최초의 도구를 기반으로 하는 "isomixed ISO 이미지"라고도 합니다. Debian 11에서는 xorriso이러한 이미지 파일을 만드는 것이 가능합니다.

xorriso -indev debian-11.4.0-i386-netinst.iso -report_el_torito cmd및/또는 를 사용하면 xorriso -indev debian-11.4.0-i386-netinst.iso -boot_image any show_status원본 xorriso이미지를 검사하고 피드백할 수 있는 옵션으로 해당 이미지의 부팅 구조를 설명할 수 있습니다 xorriso. 이것이 내가 얻는 것입니다:

$ xorriso -indev debian-11.4.0-i386-netinst.iso -report_el_torito cmd
xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :    1651 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'debian-11.4.0-i386-netinst.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Media summary: 1 session, 241152 data blocks,  471m data, 1781g free
Volume id    : 'Debian 11.4.0 i386 n'
-volid 'Debian 11.4.0 i386 n'
-volume_date uuid '2022070910381400'
-boot_image isolinux system_area=--interval:imported_iso:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'debian-11.4.0-i386-netinst.iso'
-boot_image any partition_cyl_align=on
-boot_image any partition_offset=0
-boot_image any partition_hd_cyl=64
-boot_image any partition_sec_hd=32
-boot_image any mbr_force_bootable=on
-boot_image any apm_block_size=2048
-boot_image any iso_mbr_part_type=0x00
-boot_image any cat_path='/isolinux/boot.cat'
-boot_image isolinux bin_path='/isolinux/isolinux.bin'
-boot_image any platform_id=0x00
-boot_image any emul_type=no_emulation
-boot_image any load_size=2048
-boot_image any boot_info_table=on
-boot_image any next
-boot_image any efi_path='/boot/grub/efi.img'
-boot_image any platform_id=0xef
-boot_image any emul_type=no_emulation
-boot_image any load_size=2031616
-boot_image isolinux partition_entry=gpt_basdat
-boot_image isolinux partition_entry=apm_hfsplus

그리고

$ xorriso -indev debian-11.4.0-i386-netinst.iso -boot_image any show_status
xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :    1651 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'debian-11.4.0-i386-netinst.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Media summary: 1 session, 241152 data blocks,  471m data, 1781g free
Volume id    : 'Debian 11.4.0 i386 n'
------------------------------------
Status of loaded boot image        :
------------------------------------
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Boot catalog : '/isolinux/boot.cat'
Boot image   : '/isolinux/isolinux.bin' , boot_info_table=on
Boot image   : '/boot/grub/efi.img' , platform_id=0xEF 
------------------------------------
Boot image settings for next commit:
------------------------------------
-boot_image any discard
-boot_image any bin_path=''
-boot_image any emul_type=no_emulation
-boot_image any platform_id=0x00
-boot_image any boot_info_table=off
-boot_image grub grub2_boot_info=off
-boot_image any load_size=2048
-boot_image any sel_crit=0000000000000000000000000000000000000000
-boot_image any id_string=00000000000000000000000000000000000000000000000000000000
-boot_image isolinux partition_entry=off
-boot_image any appended_part_as=mbr
-boot_image any system_area=''
-boot_image any partition_offset=0
-boot_image any partition_sec_hd=0
-boot_image any partition_hd_cyl=0
-boot_image any partition_cyl_align=auto
-boot_image grub partition_table=off
-boot_image any mbr_force_bootable=off
-boot_image any appended_part_as=mbr
-boot_image any part_like_isohybrid=off
-boot_image any iso_mbr_part_type=default
-boot_image any gpt_disk_guid=random
-boot_image any chrp_boot_part=off
-boot_image any prep_boot_part=''
-boot_image any efi_boot_part=''
-boot_image any hfsplus_serial=0000000000000000
-boot_image any hfsplus_block_size=0
-boot_image any apm_block_size=0
------------------------------------

USB 스틱에 기록할 때에도 결과 ISO 이미지를 부팅 가능하게 만드는 대부분의 "마법"은 -boot_image isolinux system_area=....

그 이후에는 -boot_image any nextUEFI 지원과 관련이 있으며 사용하는 부팅 옵션에 따라 genisoimage신경 쓰지 않을 수도 있습니다.

답변2

특히 완전한 답변을 주신 @telcoM에게 감사드립니다.

나는 어떤 경우에도(DVD나 USB 스틱 또는...) 부팅 가능한 데비안의 EFI 부팅 가능 AMD64 이미지를 만드는 데 성공하지 못했습니다. 기본으로 돌아가서 다음 지침을 찾았습니다. 원래 부팅 장치를 사용하여 Debian ISO를 다시 패키지합니다..

2023년 ISO 조정을 바탕으로 다음 프로세스를 작성하고 성공적으로 테스트할 수 있었습니다.

예를 들어 Debian 11.6 AMD64 Stable ISO를 수정하겠습니다. 다음 3개의 데비안 패키지를 설치한 후, /firmware귀하의 데비안 컴퓨터에서 찾을 수 있는 모든 펌웨어를 해당 디렉터리에 추가하겠습니다 :/usr/lib/firmwarefirmware-linux firmware-linux-free firmware-linux-nonfree

sudo apt install firmware-linux firmware-linux-free firmware-linux-nonfree

계속해서 예제를 사용하여 ISO를 다시 패키지하고 USB 플래시 드라이브에 복사한 다음 레거시(MBR) 및 UEFI 모드에서 성공적으로 부팅하겠습니다. 이미지는 DVD로 구울 때도 작동합니다.

루트 디렉터리를 만듭니다 mkiso.

mkdir /home/nba/mkiso
cd /home/nba/mkiso
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-11.6.0-amd64-DVD-1.iso

소스 ISO 추출:

mkdir deb
sudo apt install xorriso
xorriso -osirrox on -indev deb11.6-nba-amd64.iso -extract / ./deb

또는

sudo apt install bsdtar
bsdtar -C ./deb -xf debian-11.6.0-amd64-DVD-1.iso

파일/펌웨어를 추가합니다. ISO 이미지에 펌웨어를 추가하고 싶습니다.

sudo apt install firmware-linux firmware-linux-free firmware-linux-nonfree

mkdir -p /home/nba/mkiso/fw
cp -rf /usr/lib/firmware /home/nba/mkiso/fw/

소스 ISO에서 xorriso 빌드 명령을 추출합니다.

cat deb/.disk/mkisofs


xorriso -as mkisofs -r -checksum_algorithm_iso sha256,sha512 -V 'Debian 11.6.0 amd64 1' -o /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.iso -checksum-list /srv/cdbuilder.debian.org/src/deb-cd/tmp/3bullseyeamd64/bullseye/checksum-check -jigdo-checksum-algorithm md5 -jigdo-force-checksum /pool/ -jigdo-min-file-size 1024 -jigdo-exclude 'README*' -jigdo-exclude /doc/ -jigdo-exclude /md5sum.txt -jigdo-exclude /.disk/ -jigdo-exclude /pics/ -jigdo-exclude 'Release*' -jigdo-exclude 'Packages*' -jigdo-exclude 'Sources*' -jigdo-jigdo /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.jigdo -jigdo-template /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.template -jigdo-map Debian=/srv/cdbuilder.debian.org/src/ftp/debian/ -jigdo-exclude boot1 -J -joliet-long -cache-inodes -isohybrid-mbr syslinux/usr/lib/ISOLINUX/isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus boot1 CD1

xorriso 빌드 명령 수정(-jidgo 옵션 + 관련 체크섬 제거...):

xorriso -as mkisofs -r -V 'deb11.6-nba-amd64' -o ./deb11.6-nba-amd64.iso -J -joliet-long -cache-inodes -isohybrid-mbr ./isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus deb fw

소스 ISO에서 처음 432바이트를 추출하여 MBR을 생성합니다.

cd /home/nba/mkiso
dd if=debian-11.6.0-amd64-DVD-1.iso of=isohdpfx.bin bs=1 count=432 

새 ISO 빌드(ISO에 추가 deb/) fw/firmware:

xorriso -as mkisofs -r -V 'deb11.6-nba-amd64' -o ./deb11.6-nba-amd64.iso -J -joliet-long -cache-inodes -isohybrid-mbr ./isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus deb fw

새로 생성된 ISO를 추출하여 확인합니다.

mkdir /home/nba/mkiso/deb2
cd /home/nba/mkiso/
xorriso -osirrox on -indev deb11.6-nba-amd64.iso -extract / deb2

다음 위치에 펌웨어가 있는지 확인하십시오 /home/nba/mkiso/deb2/firmware.

ls /home/nba/mkiso/deb2/firmware

테스트 부팅: xorriso -report_system_area소스 ISO와 새 ISO의 옵션을 사용하고 비교합니다.

xorriso -indev debian-11.6.0-amd64-DVD-1.iso -report_system_area as_mkisofs
xorriso -indev deb11.6-nba-amd64.iso -report_system_area as_mkisofs

다음 줄이 있는지 확인하세요.

-isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'deb11.6-nba-amd64.iso'

그리고 라인:

-eltorito-alt-boot
-e '/boot/grub/efi.img'
-no-emul-boot

USB 플래시 드라이브에 복사하고 부팅을 시도합니다.

sudo dd if=deb11.6-nba-amd64.iso of=/dev/sda bs=256M status=progress

버튼을 누르면 다시 시작됩니다!

관련 정보