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


353

有什么方法可以在不使用YUMIUnetbootinStartup Disk Creator等任何第三方应用程序的情况下从终端创建可启动的Ubuntu USB闪存驱动器。

我试图用dd方法创建可启动的Ubuntu闪存驱动器,

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

它在USB磁盘上创建文件,但是当我尝试引导USB磁盘时,它显示Operating System Not Found错误。


您必须确保未安装USB闪存驱动器。检查lsblk。如有必要,请执行sudo umount / dev / sdb(可能是sdb1,sdb2)。添加; echo $?在dd copy命令之后。所以:sudo dd if = ... of = ... bs = 4M; 回声$?如果commandd结束,则返回值应为0

我遵循了您的步骤,但是它也创建与创建的文件相同的文件。sudo umount /dev/sdb sudo dd if=/path/to/ubuntu.iso of=/dev/sdb bs=1M它不会创建任何ubninit,ldlinux.sys,etc对linux操作系统启动至关重要的文件。
Avinash Raj

最后,我将在USB磁盘的MBR上安装grub。
年长者极客

2
使用终端使用内置工具的最简单方法是dd按此处所述使用。它适用于所有混合iso文件。但这dd是一种危险的工具,因为它可以毫无疑问地完成您要说的事情。因此,如果您告诉它擦拭全家福...这是一个很小的输入错误。许多工具更安全。它们可帮助您识别和选择目标驱动器,并提供最终检查点,您可以在其中进行双重检查,以将您写入正确的驱动器。其中大多数是GUI工具,有些也可以在文本模式下工作,例如mkusb-dus
sudodus

1
以下链接显示了一个示例,其中使用了一个命令行dd来创建可启动的Ubuntu USB闪存驱动器时,内部驱动器被错误地覆盖,askubuntu.com / questions / 982552 / accidentally-did-dd-dev- sda
sudodus

Answers:


431

您可以使用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。

然后,接下来(这是一个破坏性命令,并使用iso的内容擦除整个USB驱动器,因此请小心):

 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


13
这对我不起作用。
Avinash Raj

7
真?您确定具有正确的.iso文件名(包括路径)和USB驱动器的正确/ dev吗?它怎么会失败?是否有错误消息,或者只是无法启动?您确定.iso没有损坏?
Marc 2013年

8
您可能拥有损坏的.iso。你检查了吗?您确定.iso实际上可引导内容的副本吗?
2013年

5
最初的问题和最受好评的答案是说此方法不适合他的人。;-)对我来说,批准的答案不起作用,而这个答案可以。:-)投票。
Drachenfels

20
status=progress在命令行中添加a 也很有帮助,以查看剩余的顶部副本。
超常

101

您几乎可以与呆在一起dd,但是您错过了一步。

sudo umount /dev/sdX
sudo dd if=/path/to/ubuntu.iso of=/dev/sdX bs=4M && sync

sdX您的USB设备在哪里(可以通过验证lsblk)。

sync位很重要,因为dd可以在写操作完成之前返回。


17
+1提及sync。没有它,您将不知道内容是否实际上已被复制。另外,如果您不着急,则应md5sum同时确定两个文件。
戴夫

4
也许值得一提的是,可能首先需要将USB重新格式化为FAT32 sudo mkfs.msdos -F 32 /dev/sdX
Nemo

10
@Nemo,这可能有所作为吗? dd/ dev / sdX将覆盖现有的任何文件系统。
mwfearnley '16

5
sync在这里毫无意义。它仅影响文件系统操作。
punund

3
conv=fdatasync- 在完成之前以物理方式写入输出文件数据时,应注意同步,但是最好确保先卸载设备。
Johnathon Havens

98

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

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

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

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

GParted屏幕截图

  • 您的驱动器可能会自动安装在内部/media/。假设它安装在中/media/xxx/

  • /media/iso/通过运行以下命令将所有文件复制到已安装的USB闪存驱动器(确保包括点):

    cp -a /media/iso/. /media/xxx/
    
  • 接下来,您需要ldlinux.sysUSB闪存驱动器中的文件以使USB 可启动。我的USB分区是/dev/sdd1;输入lsblk以查看您的内容。运行以下命令:

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

  • 重新启动PC并更改BIOS中的启动顺序,以允许从USB驱动器启动。现在,您的Ubuntu USB闪存驱动器将启动,您可以安装它。

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


3
我目前正在尝试,请您指定使用什么/为什么:cp -a而不是cp -r
Moldovean 2014年

2
您需要sudosyslinux命令。
Cammy_the_block 2014年

9
这种方法对我不起作用。cp -a给出:'cp:无法创建符号链接'/media/xxx/./ubuntu':不允许操作'等,因为目标是fat32。我试着无视...没有用

6
需要特别注意的是,USB必须是fat32文件系统,否则syslinux将无法正常工作
Ricardo BRGWeb

2
控制台显示与@sheß相同的错误。我验证了文件系统(FAT32)并标记了BOOT。
Chofoteddy

40

您有两种选择。

如果需要图形界面,请使用usb-creator(在ubuntu存储库中)

在此处输入图片说明

如果要使用命令行工具,请使用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


1
我只需要命令行工具,而不需要gui工具(如启动盘创建器)。根据该dd方法,在我的usb中仅创建了3个文件夹和1个文件。当我尝试启动它时,显示operating system not found错误。像这样的ubninit,menu.c32,ubnpathl.txt,ubnfilel.txt,ldlinux.sys文件丢失了(引导实时ubuntu USB非常重要)。
Avinash Raj

1
我用ubuntu.iso尝试了dd方法,它起作用了!但是要花费很多时间才能将其写入USB。我想知道bs = 1M代表什么。我找到了此网站manpages.ubuntu.com/manpages/karmic/en/man1/dd.1.html。现在,我想知道更改值是否会使复制到USB的速度更快?还有什么风险..也许有人知道。
Moldovean 2014年

4
bs是块大小。dd会将1MB的数据读取到内存中,然后将其作为一个整体写入磁盘。使用非常小的块大小,您将获得大量CPU开销。使用非常大的块大小可能会导致意外的副作用,例如更长的暂停(无磁盘活动)和/或大量的RAM使用。从ISO制作磁盘时,通常1M或4M是一个不错的选择。上块大小更多信息:stackoverflow.com/questions/6161823/...
ApolloLV

我认为制作可启动USB是我不常做的事情,但是当我这样做时,我希望它做对。较小的块大小可能需要更长的时间,但这是一个问题吗?不。
Marc

2
@Marc-唯一的问题是速度,较小的块大小不会或多或少会出现错误,然后出现较大的块大小,从而导致较小的块大小!=“正确”。正确完成是指检查iso的md5sum并确认写入图像的md5sum。确认m5dsums后,您就知道它做对了。

28

首先,卸载USB设备,然后用于lsblk验证设备。

有时(通常是较旧的iso文件)dd不够,并且pendrive不会启动。在这种情况下,您可能需要安装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

或代替dd,您可以cat改用:

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


我需要提及的是,其他所有方法都失败了,但这还是可行的-我选择了该cat命令。
Digital Dracula's

对于那些坚持认为dd仅此一个就够了的人,我也需要这样做。
GuiRitter

如果要使用dd在ISO混合安装时使用的工具,请复制ISO文件并在不使用ISO时安装SYSLINUX,请bootiso改用。
朱尔斯·伦道夫

1
您能否解释一下这些命令的实际作用?在设备上制作vfat文件系统,然后立即用iso文件的内容覆盖它有什么意义?什么是isohybrid真正做到?会以某种方式修改ISO吗?
cheshirekow

10

如果“第三方”是“ gui”,我建议Avinash Raj回答后使用一个名为bootiso的轻量级脚本,因为dd它并不总是有效。最大的优点是它非常安全(执行许多安全检查以免干扰系统),易于安装和便携式。

另外,bootiso将检查ISO文件以从两种模式中进行选择:ddISO文件为混合格式(USB友好)时的图像复制()。如果ISO文件是非混合文件,则为mount-rsync模式,在这种情况下,如果支持,将自动安装SYSLINUX引导程序[ 有关自动行为的更多详细信息 ]。

如何使用它

第一种选择,只需提供ISO作为第一个参数,系统将提示您从lsblk以下列表中提取驱动器:

bootiso myfile.iso

或明确提供USB设备:

bootiso -d /dev/sde myfile.iso

快速安装

curl -L https://git.io/bootiso -O
chmod +x bootiso

实际观看:


1
我同意,这是一个非常不错的脚本,可以消除过程中的恐怖内容。此处有更多详细信息:tecmint.com/create-bootable-usb-in-linux-commandline
kr37

它甚至支持Windows 10 Oct 2018,因为它支持“ wim拆分”> 4Gb的“ install.wim”文件(使用“ wimlib-imagex”命令),否则无法存储在FAT32上。
mevdschee

7
$ 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/sdXX可以是任何字母。


2
dd命令中bs = 1MB的意义是什么???
juggernauthk108

1
@ juggernaut1996没有。它是复制时要使用的块大小。由于未提供count参数,它将以1MB的块复制整个输入。可以将其删除。
sjbx

“不要使用位的路径”是一个错误的信息。该过程本身不会在任何步骤中将路径组件烘烤到复制的映像中,因此,如果您导航到包含ISO映像的目录或仅提供完整路径,则该过程无关紧要。而且,dd也可以接受来自stdin的输入,因此您可以简单地将两个dd通过管道相互传递,以确保没有路径散布到映像中。
加博·加拉米

这仅适用于混合ISO,目前已经解决了大多数情况,但还有一些例外,例如UltimateBootCD。使用bootiso代替。
朱尔斯·伦道夫

-5

试试这个,从来没有让我失败超过100次:

格式化卡:

$ sudo mkfs.vfat -F32 /dev/sdx

挂载ISO映像:

$ sudo mount ubuntu.iso /mnt

将内容复制到卡中:

$ sudo cp -rvf /mnt/* /SD_CardMountPoint

然后:

  • 重命名isolinux文件夹为syslinux
  • 重命名syslinux/isolinux.cfgsyslinux/syslinux.cfg
  • 重命名syslinux/isolinux.binsyslinux/syslinux.bin
  • syslinux -s /dev/sdx

4
-1。你甚至测试过吗?sudo cp -rvf /mnt/* /dev/sdx将无法正常运作(或至少无法达到您的预期)。您不会将文件复制到原始设备(/dev/)。相反,您应该挂载卡并将ISO文件的内容复制到卡(挂载点到挂载点)。而且目前采用相同方法的已接受答案出了什么问题。
gertvdijk 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.