如何使用 Linux 上的命令行从可启动 ISO 创建可启动 USB?

如何使用 Linux 上的命令行从可启动 ISO 创建可启动 USB?

我有一张由 ISO 文件创建的 CD,我用它通过 plop linux 安装自定义版本的 Ubuntu。

cd 工作正常,但我想改用可启动的 USB 驱动器。我使用命令 dd 尝试创建可启动的 USB:

dd if=filename.iso of=/dev/sdb1 bs=4k

现在,这确实复制了文件并使 USB 可启动,但我收到错误“缺少操作系统”

有任何想法吗?

答案1

好吧,经过一番研究,我找到了解决方案,我将逐步介绍它。问题有两个方面。

  1. 插入 USB 闪存驱动器并使用以下命令确定其所安装的设备:

    sudo fdisk -l
    

    这次对我来说是 /dev/sdc1,所以我将用它作为我的示例。

  2. 卸载设备

    umount /dev/sdc1
    
  3. 不确定是否有必要,但我将驱动器格式化为 FAT32,以防万一

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. 现在我的 ISO 使用的是 isolinux 而不是 syslinux。我知道它可以与 CD 一起使用,所以我发现我需要调用 isohybrid 命令,该命令允许 BIOS 从硬盘驱动器识别 ISO。

     isohybrid filename.iso
    

    您可以了解有关此命令的更多信息这里,但这是导致“缺少操作系统”消息的原因,第一个问题已修复,但现在显示“isolinux.bin 丢失或损坏”

  5. 下一步是复制 iso。我的第二个问题就在这里,我复制到分区 sdc1,而不是设备 sdc。

    sudo dd if=filename.iso of=/dev/sdc bs=4k
    

    这似乎工作得很好,但是在我得到最后一个修复的论坛上,建议在拔下设备之前执行以下操作:

    sync
    sudo eject /dev/sdc
    

答案2

这是 SanDisk USB 记忆棒或未以 FAT32 格式格式化的记忆棒的常见问题。

如果不是上述任何一个,那么很可能是您的分区顺序或 syslinux.cfg 文件存在问题。

答案3

isohybrid可能并不总是有效。例如,我有一个带有 FreeDOS 的 .iso,但 isohybrid 无法在那里找到一些重要文件(我不知道它们是否应该由 syslinux(我也用过)或任何其他东西放在那里)。我在这里提出了几种替代方案。

1) 安装另一个引导程序,例如 GRUB。解释如下这里

“假设你的 USB 驱动器的第一个分区是 FAT32,其分区是 /dev/sdy1”(我grub2的 Fedora Core 上是这样的,所以我稍微改变了命令):

# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb
# grub2-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub2-mkconfig -o /mnt/usb/boot/grub2/grub.cfg

# optional, backup config files of grub.cfg
# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc

# sync; umount /mnt/usb

2)FreeDOS wiki 提供了一种与 GRUB 和 syslinux 结合的方法这里(虽然我不明白它们是如何启动的grub>——我无法从 USB 启动到那个阶段)。

3)这里是一篇可能有用的帖子 - 它说“只要 command.com、kernel.sys、syslinux.cfg、ldlinux.sys 和 fat32lba.bss 文件位于驱动器的根目录中,并且 MBR 和引导扇区没有被重写,驱动器就应该保持可引导。”

4)这里它解释了如何使用 syslinux 引导加载程序生成可引导的 .iso 文件。他们甚至不使用 isohybrid。不幸的是,这对我没有帮助(可能是因为 syslinux)。

5*) 通过 使用 Windows 程序wine。我尝试了 rufus,但是没有用,它找不到设备。

我警告你,不幸的是我无法解决这个问题,我的设备无法启动,但我希望这对其他人有用(包括那些想在 usb 上安装 Linux 的人)。不过,chtaube 生成的 usb 映像对我有用,所以我认为这些方法是正确的。

UPD:第三种方法确实有效(使用更正自定义安装文件)。

UPD2:(修复链接)。问题isohybrid可能是因为 iso 上的 isolinux.bin 版本与我的系统不同。genisoimage按照建议重新编译了 iso这里

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

也遇到了一些问题,通过方法解决了这里genisoimage 之前:

cp /boot/extlinux/*.c32 fd11new/isolinux/
extlinux --install /boot/isolinux

== 结束 UPD2 ==

答案4

你可以使用bootiso公用事业,它可以安全地完成这一任务:

bootiso -d /dev/sdb filename.iso

bootiso 将检查所选设备是否/dev/sdb通过 USB 连接,如果没有,则失败,这是一个很大的安全优势。如果只有一个 USB 驱动器连接到您的系统,它还将自动检测 USB 设备,查看其运行情况:

如果您想安装 syslinux 引导加载程序来规避@xsdf 提到的问题,请使用-b选项:

 bootiso -b -d /dev/sdb filename.iso

安装方法:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso

相关内容