将可启动的BIOS更新.ISO文件写入USB闪存盘。

联想将BIOS更新以.iso文件的形式分发(示例),这些文件应该被刻录到光盘上并引导启动。将其刻录到光盘上后可以正确引导启动,但现在我想使用USB闪存驱动器代替(因为我不信任我的光驱),如何在Ubuntu上创建这个USB闪存驱动器?
有很多教程解释如何从基于Linux的ISO文件创建可引导的USB闪存驱动器(使用UNetbootin等工具,在USB闪存驱动器的根目录下创建与Linux相关的文件),以及从基于Windows的实用工具(使用FreeDOS等)。我认为这两种方法都不适用于此处,因为BIOS更新的ISO文件既不是基于Linux也不是基于DOS的(挂载ISO文件不显示任何已知的文件系统)。

1你有试过将ISO内容转储到USB吗?要这样做,请运行以下命令:# dd if=/path/to/iso of=/dev/yourusb bs=4M警告:你的USB将被擦除。还请仔细检查你的USB块设备路径 - leorize
@Archuser:只有当ISO镜像被制作成能够在特定配置下启动时,才能使用这种方法。常规的可引导ISO镜像无法这样启动。 - David Foerster
请确保在使用dd命令后调用"sudo sync"两次。否则,内核可能无法将已写入内核缓存的数据与驱动器同步。 - Matthias
3个回答

我找到了一个可能解决这个问题的方法,可以在http://positon.org/lenovo-thinkpad-bios-update-with-linux-and-usb中找到。
首先将iso镜像转换为img文件:
sudo apt-get install genisoimage
geteltorito -o bios.img gruj09us.iso

然后将其复制到USB键盘上。
sudo fdisk -l /dev/sdb  # double check that the device is right
sudo dd if=bios.img of=/dev/sdb #Will Erase the drive!! 

说实话,我认为你应该先尝试一下,看看是否可以正常启动,如果你只是像平常一样使用通用工具来写入.iso文件。(前提是它需要一些输入,并且在启动时不会自动开始在你的BIOS中搞砸。) 最近两次我安装Linux时都没有使用推荐的工具。(我用SUSE Studio Image Writer制作了一个15.04的可启动USB,因为Unetbootin多次出错。结果还不错。)

1在更新了BIOS之后,使用以下命令将USB恢复到完整容量:# dd count=1 bs=512 if=/dev/zero of=/dev/sdb,然后进行格式化。 - leorize
太好了!不确定什么是eltorito,但它解决了问题。 - Nicolas Raoul
4记录一下: ISO由一个空的根目录和一个隐藏的BIOS引导镜像组成,该镜像是一个模拟的硬盘。 geteltorito通过读取El Torito引导目录来找到磁盘镜像。然后它从镜像中的MBR分区表中获取镜像大小。最后,它将镜像提取到目标文件中。 这只能从USB闪存启动,因为所有所需的软件都在模拟的硬盘中。非常特殊的情况。 - Thomas Schmitt
我尝试过这个方法,但无法让Lenovo T510启动。我确实下载了可引导的BIOS文件,但当它烧录到USB后,里面什么都没有(这正常吗?)。当我尝试启动时,出现了没有操作系统的错误信息。有什么想法吗? - shaneonabike
请查看以下链接:https://ubuntuforums.org/showthread.php?t=1852425 和 http://www.thinkwiki.org/wiki/BIOS_Upgrade#Using_grub4dos_.28also_for_Linux.29 - TiloBunt
当我执行geteltorito命令时,它会输出Out of memory!。你有什么想法吗? - fIwJlxSzApHEZIl

如Arch用户在评论中所说,将可启动的ISO写入USB驱动器的最直接方法是使用dd命令将镜像写入驱动器。
首先三次检查您的USB驱动器当前映射到哪个块设备:
lsblk

将图像复制到USB驱动器中。例如,如果您的USB驱动器映射为/dev/sdb
sudo dd if=/path/to/image of=/dev/sdb bs=8M && sync

通常情况下,不同的块大小表现也不同,但是通常较大的块大小比较小的块大小表现更好;一个8M的块大小应该足够让进程以最快速度运行。
如果你想监控进程的进展,请安装pv
sudo apt-get update && sudo apt-get install pv

而是运行以下命令:
pv /path/to/image | sudo dd of=/dev/sdb bs=8M && sync

2你必须在 dd 命令中添加 && sync。 - xyz
@prakharsingh95 很好的评论。谢谢 - kos
2直接复制ISO文件到USB存储设备上,只能通过BIOS引导启动,前提是ISO文件使用MBR引导。这是一个额外的功能,通常被称为“isohybrid”。所有主要的Linux发行版都有安装ISO文件以此方式进行引导。 但是联想的ISO文件没有MBR,而是只有用于通过光盘(CD/DVD/BD)的BIOS引导的El Torito引导目录。尽管如此,在ISO块27开始的隐藏引导镜像中,它含有所有所需的内容,模拟了一个硬盘。 - Thomas Schmitt

以防万一,如果有人仍在寻找答案。

仅仅使用上述解决方案对于我的联想E470来说还不够,因为它支持UEFI。BIOS更新工具根本无法从USB闪存驱动器启动。

必须阅读与BIOS更新文件相对应的README文件。

重新启动后按Enter键中断正常启动,并在进入BIOS设置后:

...
-> 7. 在“UEFI / Legacy Boot”中,确保选择“仅UEFI”。
   8. 从菜单中选择“Boot”。注意当前的启动优先级顺序,
      以便在需要修改启动列表时进行恢复。
   9. 在“Boot Priority Order”中,确保以下设备位于
      “ATA HDD0”的顶部。
      - “ATAPI CD0”(使用ThinkPad内部光驱时)
      - “USB CD”(使用USB光驱时)
->    - “USB HDD”(对于我的USB闪存驱动器)

重新启动后,您应该能够从“USB HDD”启动。


1联想在其BIOS下载页面的README中提到了这一点,但是提醒大家还是很有必要的。 - user459652