我在 Ubuntu 22.04 上,我正在尝试从(可启动)Debian ISO 中提取所有文件,然后重新生成可启动的 ISO 映像。下面您可以看到我发出的命令。由于某些未知原因,生成的 ISO 映像无法启动。有人能帮我理解原因吗?谢谢。
apt update && apt -y install xorriso genisoimage
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.5.0-amd64-netinst.iso
xorriso -osirrox on -indev debian-11.5.0-amd64-netinst.iso -extract / isofiles/
genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o debian-11-unattended.iso isofiles
正如您所见,我没有对 ISO 映像内的文件做任何修改,因此错误最有可能出现在最新命令上。
根据这篇文章:
我也尝试过这个命令:
mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -v -T -V 'd-live 11.5.0 xf amd64' "isofiles/" > file.iso
但在这种情况下生成的 ISO 是不可启动的:https://ibb.co/GstvTvR
我省略了参数“-可重现日期=20221009“因为它还没有被接受。产生的错误是:“genisoimage:哎呀,我找不到启动映像‘producible-date=20221009’并且制作的ISO只有32k。
上述命令生成的 debian ISO 文件的内部结构如下:
# isoinfo -d -i debian-11-unattended.iso
CD-ROM is in ISO 9660 format
System id: LINUX
Volume id: d-live 11.5.0 xf amd64
Volume set id:
Publisher id:
Data preparer id:
Application id: GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 224756
El Torito VD version 1 found, boot catalog is in sector 1020
Joliet with UCS level 3 found
Rock Ridge signatures version 1 found
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 3FD 1021
问题在于缺少 EFI 启动映像:USB 驱动器的 EFI 系统分区、CD-ROM 的 EFI El Torito 启动映像。
解决方案是:
orig_iso=debian-live-11.5.0-amd64-xfce.iso
new_files=debian-live-11.5.0-amd64-xfce
new_iso=debian-live-11.5.0-amd64-mod-xfce.iso
mbr_template=isohdpfx.bin
# Extract MBR template file to disk
dd if="$orig_iso" bs=1 count=432 of="$mbr_template"
xorriso -as mkisofs \
-r -J --joliet-long \
-V 'd-live 11.5.0 xf amd64' \
-o "$new_iso" \
-isohybrid-mbr "$mbr_template" \
-partition_offset 16 \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus \
"$new_files"