使用自定义 iso 文件启动 USB

使用自定义 iso 文件启动 USB

我按照 Ubuntu 文档中的步骤进行操作https://help.ubuntu.com/community/LiveCDInternetKiosk

我尝试用 xorriso 替换使用 mkisofs 的最后一步,但没有帮助。我的 USB 无法读取,我得到空白提示。我认为它可能与文件系统有关(隐藏的 NTFS/FAT 而不是 VFAT),但使用 cfdisk 更改它并不能解决问题。分区表是“dos”,看起来不错,/dev/sdb1 处于活动状态,即可启动。原始 .iso 映像是新的 Ubuntu 服务器 17.10,修改后的映像是使用 dd 复制的。修改后的版本中的系统文件未受影响。

如果我随后尝试在 USB 上安装 syslinx(syslinux -i /dev/sdb),我会出现以下错误:“syslinux:无效的媒体签名(不是 FAT/NTFS 卷?)”

如果我使用 unetbootin 将 .iso 上传到 USB,系统加载正常。我只需执行 isolinux -> sysline 重命名即可避免 unetbootin 的默认启动提示。

我希望能够编写这最后一步的脚本,而根本不使用 X 或用户交互。

一些相关步骤:

sudo rm extract-cd/casper/filesystem.squashfs
sudo mksquashfs edit extract-cd/casper/filesystem.squashfs

sudo chmod a+w extract-cd/casper/filesystem.size
printf $(sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size


cd extract-cd
sudo rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v syslinux/boot.cat | sudo tee md5sum.txt
cd ..

xorriso -as mkisofs \
  -o xgogi.iso \
  -isohybrid-mbr /usr/lib/SYSLINUX/mbr.bin \
  -c syslinux/boot.cat \
  -b syslinux/syslinux.bin \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
  extract-cd/

#copy to USB works, needs X
sudo unetbootin lang=en method=diskimage isofile=xgogi.iso installtype=USB targetdrive=/dev/sdb1 autoinstall=yes

# doesn't work and I am badly frustrated why
sudo dd bs=4M if=gogi.iso of=/dev/sdb

答案1

正如您所发现的,您需要一个专门准备的 MBR 作为 xorriso 的输入。它有一项不寻常的工作,即在 ISO 中查找并启动程序“isolinux.bin”。

SYSLINUX 项目提供了一个合适的 MBR,名称为“isohdpfx.bin”。Debian 二进制包“isolinux”将其作为 /usr/lib/ISOLINUX/isohdpfx.bin 。

尽管 SYSLINUX 的开发很少,但应注意仅将兼容版本的 isohdpfx.bin 和 isolinux.bin 组合在一起。因此,在修改 ISO 并保留其文件 isolinux.bin 时,最好从该 ISO 中提取前 432 个字节并将其用作 MBR 输入。(复制第一个块的所有 512 个字节不会造成任何损害。xorriso 将用适当的值覆盖多余的字节。)

答案2

我的 mbr.bin 不正确。相反,我必须从原始 .iso 创建一个新文件。如下所示:

$ sudo dd if=ubuntu-16.04-desktop-amd64.iso bs=512 count=1 of=custom-iso/isolinux/isohdpfx.bin

在这篇精彩的文章中发现: https://linuxconfig.org/legacy-bios-uefi-and-secureboot-ready-ubuntu-live-image-customization

相关内容