2013-05-03 20:11:23 +0000 2013-05-03 20:11:23 +0000
50
50

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

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

光盘工作正常,但我想用一个可启动的U盘来代替。我使用命令dd来尝试创建可启动的USB:

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

现在这确实复制了文件并使USB可启动,但我得到了错误 “Missing operating system”

有什么办法吗?

答案 (4)

58
58
58
2013-05-07 16:46:56 +0000

好吧,经过研究,我想出了一个解决方法,我一步一步来。问题有两个方面。

1.插上U盘,用命令确定它挂载的设备。

  1. Umount设备

  2. 不知道是否有必要,但我把U盘格式化为FAT32,以防

  3. 现在我的ISO使用的是olinux而不是syslinux。我知道它可以和CD一起使用,所以我发现我需要调用isohybrid命令,它可以让BIOS从硬盘上识别ISO。

  4. 下一步就是复制iso。我的第二个问题就出在这里,我复制的是分区SDC1,而不是设备SDC。

3
3
3
2013-05-03 20:25:22 +0000

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

如果不是这两种情况,那么很可能是棒子分区顺序或syslinux.cfg文件的问题。

1
1
1
2016-01-20 13:42:39 +0000

isohybrid不一定能用。例如,我有一个.iso与FreeDOS和isohybrid无法找到一些重要的文件有(我不知道他们应该被放在那里的syslinux,我也使用,或任何其他)。我在这里提出几个备选方案。

1) 在那里安装另一个引导程序,比如GRUB。这在这里有解释。

“假设你的U盘的第一个分区是FAT32,它的分区是/dev/sdy1” (我的Fedora Core上有grub2,所以我改变了一下命令):

# 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>的 - 我无法从U盘启动到那个阶段)。

3) 这里 是一个可能有用的帖子–它说'只要command.com, kernel.sys, syslinux.cfg, ldlinux.sys 和 fat32lba.bss 文件在硬盘根部,并且 MBR 和启动扇区没有被重写,硬盘就应该保持可启动状态。

4) 这里 解释了如何用syslinux引导加载器生成一个可启动的.iso文件。他们甚至没有使用 isohybrid。不幸的是,这并没有帮助我(也许是因为syslinux)。

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

我警告你,不幸的是,我无法解决这个问题,我的设备无法启动,但我希望这可能对其他人有用(也是那些想要在usb上安装非Linux的人)。虽然由htaube生成的usb镜像对我来说是有效的,所以我认为这些方法是正确的。

UPD: 第3种方法真的有效(对于自定义安装文件,有一个修正)。

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

== end UPD2 == end UPD2==

0
0
0
2018-04-09 23:44:32 +0000

你可以使用 bootiso utility ,它正是这样做的,安全的:

bootiso -d /dev/sdb filename.iso

bootiso会检查所选设备/dev/sdb是否通过USB连接,如果没有就会失败,这是一个很大的安全加分项。如果你的系统正好连接了一个U盘,它还会自动检测USB设备,请看实际操作。

如果你想安装syslinux bootloader来规避@xsdf提到的问题,使用-b选项。

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

要安装它:

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