我有一张由 ISO 文件创建的 CD,我用它通过 plop linux 安装自定义版本的 Ubuntu。
cd 工作正常,但我想改用可启动的 USB 驱动器。我使用命令 dd 尝试创建可启动的 USB:
dd if=filename.iso of=/dev/sdb1 bs=4k
现在,这确实复制了文件并使 USB 可启动,但我收到错误“缺少操作系统”
有任何想法吗?
答案1
好吧,经过一番研究,我找到了解决方案,我将逐步介绍它。问题有两个方面。
插入 USB 闪存驱动器并使用以下命令确定其所安装的设备:
sudo fdisk -l
这次对我来说是 /dev/sdc1,所以我将用它作为我的示例。
卸载设备
umount /dev/sdc1
不确定是否有必要,但我将驱动器格式化为 FAT32,以防万一
sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
现在我的 ISO 使用的是 isolinux 而不是 syslinux。我知道它可以与 CD 一起使用,所以我发现我需要调用 isohybrid 命令,该命令允许 BIOS 从硬盘驱动器识别 ISO。
isohybrid filename.iso
您可以了解有关此命令的更多信息这里,但这是导致“缺少操作系统”消息的原因,第一个问题已修复,但现在显示“isolinux.bin 丢失或损坏”
下一步是复制 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