为什么dd命令不是一个可靠的工具来将可启动的.iso文件写入USB闪存驱动器?

一個回答這裡指出,如果使用dd將Ubuntu的.iso文件複製到USB閃存驅動器上,則不會預期其能夠引導。為什麼有些Linux發行版可以直接使用dd將可引導的.iso文件寫入閃存驅動器,但其他(Ubuntu?)不能呢?
在Ubuntu中,我認為它必須先轉換為.img文件。這是真的嗎?
這是因為.iso文件的某些架構差異嗎?還是由於dd本身的限制?
我不知道這是否適合在這裡討論。如果社區認為不適合或建議其他地方,我可以將其移至更適當的位置。希望能得到一些解釋。

1以前Ubuntu ISO文件是不兼容dd命令的,但从11.10版本开始,它们可以说是兼容了。 - mikewhatever
@mikewhatever 谢谢你的信息。不幸的是,我试图使用 11.04 iso 进行操作。 - Samik
3个回答

使用Ubuntu 12.04,可以将.iso文件使用dd命令复制到磁盘上,创建一个可启动的磁盘。这只适用于某些iso文件(包括Ubuntu 12.04,但不包括早期的Ubuntu版本),因为在基于BIOS的系统中,从CD启动和从磁盘启动是以不同的方式处理的。
除其他外,要使硬盘可启动,它必须包含第一个扇区中的引导代码,要使CD可启动,它必须根据El Torito规范在CD的最后一个会话的第11个扇区(十进制17)中包含引导代码。由于引导代码(至少是由BIOS加载的初始部分)在CD和硬盘上存储在不同的位置,因此磁盘镜像可以在这两个位置都有引导代码,以便在将镜像作为硬盘或CD启动时加载引导程序。
大多数ISO文件只是设计为可引导为CD,因此它们在映像的第一扇区不包含任何引导代码,因此,包含这样的映像的硬盘不会在其第一扇区中具有引导代码,因此无法引导。

这就是我一直在寻找的解释。谢谢你花时间解释。如果能提供一些链接会更好,但问题已经得到了回答。所以UNetbootin的作用就是将引导加载程序代码从第17扇区复制到U盘的第一个扇区,对吗? - Samik
3不,这并不像简单地复制引导代码那样简单。即使可能的话,它也需要擦除整个设备(就像使用dd命令一样),这对于大多数Unetbootin用户来说是不可接受的。相反,Unetbootin会“下载并提取ISO文件到您的USB驱动器上,生成适当的syslinux配置文件,并使用syslinux使您的USB驱动器可引导。” http://unetbootin.sourceforge.net/#faq - Jordan Uggla
+1 对于El Torito规范。还有谢谢上面的解释。 :) - Samik

Ubuntu目前的ISO文件是可以使用dd命令进行复制的,而且已经有一段时间了。它们是“混合”ISO文件:它们具有MBR引导扇区。正确使用dd命令将创建一个完全可启动的USB驱动器。

顺便提一下,引用的文章只有一个回答声称Ubuntu的ISO文件不能使用dd命令复制,这是不正确的。

请查看我在这里的回答:如何将iso9660格式的ISO文件转换为USB ISO文件

这个回答提供了一种确定ISO文件是否是混合化的方法(您可以验证Ubuntu的ISO文件),以及如果不是的话如何进行混合化(适用于其他情况),以及如何正确使用dd命令创建可启动的驱动器。


注意,以上发布的解决方案没有任何更改。

问题是关于可靠的、可引导的iso和使用dd的。在大多数情况下,Linux用户使用iso这个词来表示光盘的特殊镜像。在这种情况下,可引导可能是BIOS或UEFI理解并允许从光盘运行的几种方法之一。

dd通常被认为是可靠的,但它可能因为自身的原因而失败,并与源或输出无关。在大多数情况下,它似乎只会因为没有询问“你确定要清除吗?”而失败。

现代计算机倾向于将USB视为真正的内部硬盘。

也可以使用类似7z的工具将一些iso复制到fat32闪存驱动器上。

所有这些都假设有一些现代硬件和现代USB闪存驱动器。

在未来,我们将不得不创建UEFI可引导媒体。