如何通过终端创建可启动的Ubuntu USB闪存驱动器?

有没有办法在终端中创建一个可启动的Ubuntu USB闪存驱动器,而不使用任何第三方应用程序,如YUMI、Unetbootin、Startup Disk Creator等等?
我尝试使用dd方法创建一个可启动的Ubuntu闪存驱动器,
sudo umount /dev/sdb
sudo dd if=/path/to/ubuntu.iso of=/dev/sdb bs=1M

它在USB磁盘上创建文件,但当我尝试启动USB磁盘时,它显示一个“操作系统未找到”的错误。

Debian 11在这里,这个链接很有帮助:https://workaround.org/article/updating-the-bios-on-lenovo-laptops-from-linux-using-a-usb-flash-stick/。底线是:安装genisoimage,使用geeltorito从ISO生成一个img文件,然后(我的部分)使用cp将img文件复制到USB上创建一个可启动的USB驱动器。 - RichieHH
这是一个非常有用的问题。我喜欢它。 - Andre Leon Rangel
8个回答

你可以使用 dd
sudo umount /dev/sd<?><?>  

<?><?>是一个字母后面跟着一个数字的情况下,通过运行lsblk来查找它。
它会看起来像这样
sdb      8:16   1  14.9G  0 disk 
├─sdb1   8:17   1   1.6G  0 part /media/username/usb volume name
└─sdb2   8:18   1   2.4M  0 part 

我要卸载 sdb1。
然后,接下来(这是一个具有破坏性的命令,会擦除整个USB驱动器上的iso文件内容,所以请小心):
sudo dd bs=4M if=path/to/input.iso of=/dev/sd<?> conv=fdatasync  status=progress

其中input.iso是输入文件,而/dev/sd<?>是你要写入的USB设备(运行lsblk命令查看所有驱动器,找到适用于你的USB设备的<?>)。

这种方法快速且从未出现问题。


编辑:对于那些使用Mac的人,使用小写字母bs=4m
sudo dd if=inputfile.img of=/dev/disk<?> bs=4m && sync

编辑:如果USB驱动器无法启动(我遇到了这个问题),那是因为目标是驱动器上的特定分区,而不是整个驱动器。所以目标应该是/dev/sdc而不是/dev/sdc<?> 对我来说是/dev/sdb

参考链接:https://superuser.com/a/407327https://askubuntu.com/a/579615/669976


请问,这个U盘的结果格式会是什么?我在Mac上使用了上面展示的命令,结果的U盘格式是isofs。但是这种格式在Mac OS X下无法阅读,但在Linux Mint下可以阅读。请问在dd命令中是否有参数可以定义结果的格式,比如fat32? - Adolfo Correa
这个操作结束后,你能看到U盘的内容吗? - ychaouche
@ychaouche 是的,你之后将能够看到U盘驱动器的内容。 - Antonin GAVREL
dd: 无效数字:'4m' -> 替换为 4M - Andrey Tyukin
我的MAC上没有安装"lsblk"命令,但是"df -h"命令可以使用。 - Samuel Åslund

你对于 dd 差不多就快到了,但是你还缺了一步。
sudo umount /dev/sdX
sudo dd if=/path/to/ubuntu.iso of=/dev/sdX bs=4M && sync

在这里,sdX代表你的USB设备(可以通过lsblk来验证)。

sync这个选项很重要,因为dd可能会在写操作完成之前返回。


从终端创建可启动的Ubuntu USB闪存驱动器

  • ubuntu.iso文件放置在任何硬盘分区中。

  • 然后在终端中使用以下命令挂载ubuntu.iso文件:

    sudo mkdir /media/iso/
    sudo mount -o loop /path/to/ubuntu.iso /media/iso
    
  • 插入您的USB闪存驱动器。我的驱动器是/dev/sdd。这是一个截图:

GParted screenshot

  • 你的驱动器可能会自动挂载在/media/目录下。假设它被挂载在/media/xxx/目录下。

  • 通过运行以下命令(确保包含点号),将所有文件从/media/iso/复制到你挂载的USB闪存驱动器中:

    cp -a /media/iso/. /media/xxx/
    
  • 接下来,你需要在USB闪存驱动器中拥有ldlinux.sys文件,以使USB能够启动。我的USB分区是/dev/sdd1;输入lsblk查看你的分区。运行以下命令:

    sudo apt-get install syslinux mtools
    sudo syslinux -s /dev/sdd1
    
  • 进入/media/xxx挂载文件夹,并将isolinux目录重命名为syslinux。然后进入重命名后的文件夹,并将文件isolinux.cfg重命名为syslinux.cfg

  • 重新启动计算机并在BIOS中更改启动顺序,允许从USB驱动器启动。现在,你的Ubuntu USB闪存驱动器将启动,你可以进行安装。

这种方法适用于任何Linux发行版,不仅限于Ubuntu。您无需安装任何第三方软件即可制作Linux USB闪存驱动器。

2这会产生错误,指出无法创建符号链接,因为目标是FAT文件系统,而源似乎是某种支持符号链接的文件系统。 - Michael
这个解释有来源吗? - erikbstack

你有两个选择。
如果你想要一个图形界面,可以使用usb-creator(它在Ubuntu仓库中)。

enter image description here

如果你想要一个命令行工具,使用dd。

#Replace X accordingly in both commands

sudo umount /dev/sdX
sudo dd if=/path/to/ubuntu.iso of=/dev/sdbX bs=1M

请确保/dev/sdX是您希望使用的闪存驱动器(它将销毁闪存驱动器上的数据)。
有关更多信息,请参阅https://help.ubuntu.com/community/Installation/FromUSBStick

首先,卸载USB设备,然后使用lsblk命令来验证设备。
有时候(通常是旧的iso文件),使用dd命令可能不足以使闪存驱动器启动。在这种情况下,您可能需要安装syslinux。
sudo apt-get install syslinux

然后运行以下命令:
sudo mkfs -t vfat -I /dev/sdX

你想运行最后一个命令到/dev/sdX而不是/dev/sdX1
然后,继续执行以下命令:
isohybrid /path/to/file.iso --entry 4 --type 0x1c
dd if='/path/to/file.iso' of=/dev/sdX bs=8M

或者,要查看图像的进度,请写入:
pv -tpreb /path/to/file.iso | dd of=/dev/sdX bs=8M

或者,你可以使用cat代替dd
sudo -s
cat /path/to/file.iso > /dev/sdX

记得发出同步命令以刷新写缓存。
sync

web.archive.org/web/20140327085331/https://tails.boum.org/doc/first_steps/installation/manual/linux/index.en.html


如果你说的"第三方"是指"图形用户界面(GUI)",我建议在Avinash Raj回答后使用一个名为bootiso的轻量级脚本,因为dd并不总是有效。它的一个重要优点是非常安全(执行许多安全检查以防止系统出错),易于安装和便携。
另外,bootiso会检查ISO文件并选择两种模式:当ISO文件是混合格式时(即:支持USB引导),会选择"image-copy"模式(dd)。当ISO文件是非混合格式时,在这种情况下,如果支持的话将自动安装SYSLINUX引导加载器[有关安装模式的更多详细信息]。
如何使用它
第一种选项,只需将ISO文件作为第一个参数提供,然后您将被提示从lsblk提取的驱动器列表中选择一个驱动器:
bootiso myfile.iso

或者明确提供USB设备:
bootiso -d /dev/sde myfile.iso

快速安装

curl -L https://git.io/bootiso -O
chmod +x bootiso
sudo apt install wimtools

看它如何运作


1这正是我一直在寻找的,非常感谢。 - Tim Strijdhorst
1感谢您提供的安装说明,让我的生活变得非常简单。 - supersan
哦!我的天啊!你的回答怎么不是被采纳的?这个工具超出了我之前看到的一切!谢谢你。 - Geppettvs D'Constanzo
这是最好的答案。我简直不敢相信这个东西这么难... - shredEngineer

$ dd if=ubuntu-14.04.1-desktop-amd64.iso of=/dev/sdX bs=1MB

不要使用位路径。
  1. 使用cd命令进入包含.iso文件的文件夹。
  2. 使用命令dd if=FILE NAME HERE.iso of=/dev/sdX bs=1MB
  3. 等待控制台输出类似于以下内容:

    1028+1 records in
    1028+1 records out
    1028653056 bytes (1.0 GB) copied, 55.4844 s, 18.5 MB/s
    
  4. 从USB启动。

注意:确保您写入正确的设备,USB 并不总是挂载在 dev/sdX 的位置,其中 X 可以是任意字母。


1不确定为什么每个人都忽略了 sudo :) 而且对于急躁的人来说,status=progress 总是受欢迎的。 - Sridhar Sarnobat

标题

如何从终端创建可启动的Ubuntu USB闪存驱动器?

有内置的文本模式工具,可以从文本屏幕或终端窗口运行。可以使用ddcpcat,但它们不安全,因为它们会按照您的指示执行操作而不问任何问题,而一个小的输入错误就足以覆盖具有重要数据的驱动器。

幸运的是,也有更安全的文本模式工具,但您需要安装它们。

通过PPA安装mkusb:如果您运行标准的Ubuntu Live版本,则需要额外的指令来获取宇宙存储库。(Kubuntu,Lubuntu ... Xubuntu会自动激活宇宙存储库。)

    sudo add-apt-repository universe  # only for standard Ubuntu

    sudo add-apt-repository ppa:mkusb/ppa  # and press Enter
    sudo apt-get update
    sudo apt-get install dus mkusb-nox usb-pack-efi

安装这种方式不仅会添加 dusmkusb-nox,还会添加一些 mkusb 依赖的程序包。(如果您尝试安装整个 mkusb 程序包,它还会带来一些需要图形环境的工具。)
  • 如果你想要一个小工具或者不喜欢PPA,也不想要任何额外的程序包,你可以使用mkusb-min。这个shell脚本相比其他版本非常小,但它的作用是在dd周围绑上一个安全带。

      $ wc mkusb-min
       208  736 5435 mkusb-min
    

通过在文本编辑器中阅读,应该很容易看出shell脚本在做什么。

从其Ubuntu帮助页面下载mkusb-min。将其运行在本地或安装到PATH目录中。

  • xorriso-dd-target是一个新的工具,旨在上传到Debian存储库。其目的是使创建启动驱动器(USB闪存驱动器或存储卡)变得非常安全。一个特殊功能是插件方法来识别目标设备。手册可以在这里找到。截至2020年1月,还没有任何安装程序,但您可以从上面的链接中复制并粘贴,并手动安装shell脚本和手册。

  • 最后我想提到bootiso,它在另一个答案中由开发者描述。

问题

有没有办法在终端中创建一个可启动的Ubuntu USB闪存驱动器,而不使用任何第三方应用程序,如YUMI、Unetbootin、Startup Disk Creator等?
如果我们必须寻找已经安装在Ubuntu中的文本模式工具,恐怕没有安全的工具可用。所以在这种情况下,我只能建议您根据其他答案中的方法使用dd、cp或cat命令。但是,在按下Enter键之前,请务必检查并再次确认您确实指向了预期的目标设备
(顺便说一句,Ubuntu Startup Disk Creator属于Ubuntu(不是第三方),但它需要一个图形桌面环境或至少一个图形窗口管理器。)