在一个分为两个分区的USB驱动器上创建一个可启动的Live USB

我想知道是否可以在USB驱动器上创建两个分区,一个用于将其作为常规的USB安装磁盘启动(分区1),另一个用于在Windows / Ubuntu下进行常规存储(分区2)。我希望拥有这样一个磁盘:
/dev/sdb (16GB)
 - sdb1 : ext4/fat32, LiveUSB (2GB)
 - sdb2 : fat32, storage (14GB)

那个钥匙能够启动并且用作普通的USB驱动器吗?

附注:这是因为我厌倦了每次需要救援电脑时都要安装/卸载Ubuntu在我的USB驱动器上,而且我不愿意为Ubuntu安装盘购买一个专用的USB驱动器。


2使用Ubuntu 20.04 LTS非常容易实现类似的操作。mkusb-plug可以为您自动完成此操作,无论是否需要持久化。 - sudodus
@sudodus 谢谢!这真的对我有帮助。 - Sharpey
7个回答

是的,您可以将USB闪存驱动器分区,以引导到Ubuntu Live会话,并在单独的分区上将其用作普通USB驱动器(可在Windows中访问)。我曾经在安装有UEFI和Windows 8.0的索尼Vaio T系列超极本笔记本电脑上,使用32GB PNY USB 2.0闪存驱动器成功实现了这一点。我还在我的16TB RAID5 i7-290服务器上从Ubuntu服务器12.04进行了测试。
我使用GParted对USB闪存驱动器进行了分区,配置如下:

32GB USB Flash Drive GParted

sdh1是可以从Windows访问的“存储”分区。sdh2是Ubuntu桌面12.04可引导分区。以下是我的步骤:

 1. 创建一个新的10 GB的ntfs逻辑分区,前面有25 MB的空闲空间和后面没有空间,标记为存储(必须是驱动器上的第一个分区)
 2. 创建一个新的5 GB的fat32逻辑分区,前面和后面都没有空间
 3. 为第二个分区设置引导标志
 4. (创建其他不需要的分区)
 5. 引导到加载在DVD上的Ubuntu Live会话,并从GRUB菜单中选择“尝试Ubuntu而不安装”
 6. 插入USB闪存驱动器,打开启动磁盘创建器
 7. Ubuntu-Desktop 12.04镜像和pny USB 2.0闪存驱动器(/dev/sdh2)5.0 GB分区已经被选中,将滑块移动到保留额外空间中存储文档和设置,并选择制作启动磁盘

如果不选择引导标志,启动磁盘创建器将只识别整个闪存驱动器作为/dev/sdh,而不是所需的第二个分区/dev/sdh2

如果不将Windows分区放在第一位,可移动介质位...

“可移动介质设备设置是包含在SCSI Inquiry命令的SCSI Inquiry数据响应中的标志。字节1(从0开始索引)的第7位是可移动介质位(RMB)。RMB设置为零表示该设备不是可移动介质设备。RMB为1表示该设备是可移动介质设备。驱动程序通过使用StorageDeviceProperty请求获取此信息。”

...意味着在Windows中只会显示一个分区:

“问:什么是超软盘?
答: 没有GPT或MBR格式化的可移动介质被视为“超软盘”。整个介质被视为单个分区。 介质制造商对可移动介质进行任何MBR分区。如果介质具有MBR,则仅支持一个分区。MBR分区的可见差异很小。 可移动介质的示例包括软盘驱动器、JAZ磁盘盒、磁光介质、DVD-ROM和CD-ROM。外部总线上的硬盘驱动器,如SCSI或IEEE 1394,不被视为可移动介质。”

以下是翻转RMB的工具(在这种情况下不必要):
Laxar's USB Format Tool
Bootice
RMPrepUSB

这些是软件方法(在这种情况下也不必要):
创建一个dummy.sys驱动程序
使用Hitachi Microdrive Filterdriver

来源:
TSJNachos117 Live USB on a 2-partition usb-drive
http://ubuntuforums.org/showthread.php?t=1020293
{{link11:https://stackoverflow.com/questions/2598502/howto


谢谢,我会试试看。我知道我可以在同一个分区内使用文件夹,但那样做不够优雅。我想要一个好看的东西,它是我日常生活中的一部分,我想要一些品味 :) // 不是为了炫耀,但我也知道如何使用分区工具;我问的问题是我是否可以使用分区的USB驱动器启动。 - MrVaykadji
没错,我刚刚验证过了。我喜欢你的想法,并且正在扩展它来创建三个分区:Ubuntu12.04(可启动),Hirens(可启动)和存储。我也想变得像那样高雅一些 ;) - musicman1979
比我在网上找到的任何东西都容易,终于搞定了。 - musicman1979
6为什么在分区之前有25 MB的空间?这个数字为什么是25?这个大小是否根据闪存驱动器的总容量而有所不同? - stevendesu
为什么在分区之前有25 MB的空间呢? - Gabriel Staples
我没有在那里添加它,是GParted自动添加的,我相信这是有充分理由的。 - musicman1979
1我刚刚在Ubuntu 16.04上完成了这个操作,我发现unetbootin是创建启动盘最简单的工具。它按照你建议的方式选择了引导标志。而启动盘创建器一直想要擦除整个磁盘。 - Colin Newell
4这篇帖子已经过时了。自从14.04版本以来,SDC就没有持久性指针了。 - C.S.Cameron
不,这似乎不起作用。按照您的指示操作后,当我打开启动盘创建工具时,它只显示整个USB驱动器而不是分区。我猜这可能与CS Cameron的评论有关。Unetbootin似乎也无法使用了;我甚至无法通过apt安装它,当我手动下载二进制文件时,它似乎也无法正常工作。 - Jack M

我找到了一种更直接的替代方法。关于为什么这个方法有效,有两个重要的信息需要理解。第一个是关于启动过程以及初始自检(由BIOS执行)如何在连接的设备的第一个引导扇区上寻找引导记录。这是一个小文件,基本上将引导执行过程传递给引导加载程序/管理器,例如新版Linux安装中的GRUB2。想要了解更多信息,请阅读这篇非常详细的文章
第二条信息是要了解,Linux操作系统的ISO下载是设计用于安装在磁盘(CD/DVD/USB)上,而不是分区上。这些ISO需要使用一个名为isohybrid的小工具进行修改,该工具可以在syslinux-utils软件包中找到。用于在分区上安装的ISO修改是使用--partok标志完成的。我从描述完全相同问题的post中找到了这些信息。我不确定--partok魔法的工作原理,我搜索了一些解释但没有找到任何内容。
总之,这是我做的事情,以便让我的livePureOS安装从usb分区引导:
1. 使用GNOME磁盘对我的USB进行分区,我最初使用MBR/DOS格式化了磁盘。我创建了一个4GB的FAT32分区,然后在剩余空间中创建了一个ext4 Linux分区用于备份。
2. 接下来,我修改了下载的ISO文件,使其可以从分区启动。为此,我需要从软件源安装syslinux-utils,其中包含isohybrid工具:
sudo apt-get install syslinux-utils
然后,我使用以下命令修改ISO文件:
isohybrid --partok pureos.ISO

3. 我使用dd命令将这个ISO文件复制到上述分区。你可以从GNOME磁盘详细信息中获取分区设备。
dd if=pureos.ISO of=/dev/sdb1 bs=1M

4. 在GNOME磁盘中,我编辑了该分区并勾选了可引导选项,这样就安装了所需的引导记录。
我现在可以从USB键启动到Live CD,并将其用作恢复解决方案,同时将系统备份存储在其他分区上。

我在一年前尝试让它工作,但失败了。显然我当时没有找到这篇帖子。现在它可以工作了!但我希望能有更多的说明文档-我收到一个关于某些BIOS无法引导我的U盘的警告,实际上确实是这个情况。但这已经比之前进步很多了。 - Matthew
2即使有多个分区(包括ext4和luks加密),也可以正常工作。 - David

这应该很容易做到。但是,请事先注意,Windows只能看到第一个分区(/dev/sdb1),第二个分区将会是不可见的(我不知道为什么)。因此,我建议通用存储分区是第一个,而LiveUSB分区是第二个。
如果在这样做之后,你无法启动密钥,你应该可以使用GParted设置“引导”标志。
请注意:虽然我以前成功地做过这样的事情,但我从未在基于UEFI的系统上测试过这样的操作,更不用说使用Secure Boot的系统了。

我恐怕不得不争论这一点。我自己有一个闪存驱动器,我既用它作为Ubuntu的LiveUSB版本,也用它作为通用存储设备。我的第一个分区是一个NTFS分区,在XP和7上都能完美运行。我的第二个分区是一个FAT32分区,里面装有Ubuntu的实时版本。我甚至无法从Windows中看到这个分区,即使从磁盘管理器(diskmgmt.msc)中也不行。然而,我可以从它启动,并且可以在Ubuntu中读写它。请参考这里的第四段。 - TSJNachos117
对于给你的评论点了个踩,我表示道歉。在阅读了你的评论后,我意识到我的测试Ubuntu Live引导分区并不是第一个。如果你做出一点小修改,我会给你一个应得的赞。 - musicman1979
1如今,Windows 10允许访问多个“Windows文件系统类型”的分区。包括Fat32、NTFS和UDF。 - C.S.Cameron
1@conman253 已经进行了小的编辑... - Zanna

简单的回答是是的,但你可以更简单!

确保您有所需的 Linux 版本的 ISO 文件以及 UNetbootin,可以从这里下载:http://unetbootin.sourceforge.net/

在下拉菜单中选择硬盘安装,并在开始之前将驱动器上的所有数据复制。您应该能够将其余空间用于其他目的!


这并不是我真正想要做的事情,我想要分离分区的原因是为了拥有一个干净的存储空间,而不是带有Ubuntu安装盘上的所有文件夹。仅仅隐藏它们并不起作用,因为我在Windows和Ubuntu上都使用这个USB驱动器。 - MrVaykadji
此外,Unetbootin只允许我以英语启动系统,而我想使用我的母语。 - MrVaykadji
一旦安装了unetbootin,您可以使用分区管理器来缩小分区,并在其后添加一个用于您自己的文件的分区(gparted可以完美地完成此操作)。至于语言更改,您可以编辑引导加载程序以添加内核参数,请参阅https://help.ubuntu.com/lts/installation-guide/powerpc/boot-parms.html,了解有关debian-installer/language(语言)、debian-installer/country(国家)、debian-installer/locale(区域设置)的信息,以强制使用所需的区域设置。 - Viperfang
是的,但我还能启动我的USB键进行实时会话吗? - MrVaykadji

持久化的可启动驱动器

您可以使用mkusb创建一个持久化的可启动驱动器。它将创建5个分区。请参考此链接,

help.ubuntu.com/community/mkusb

  • 分区#1的标签为'usbdata',文件系统为NTFS,可用于Ubuntu和Windows之间存储和传输文件。

  • 其他分区属于Ubuntu持久化live系统。

    请参考此链接获取更多详细信息:

    help.ubuntu.com/community/mkusb/persistent#Partitions

    1. 分区:(NTFS)usbdata,用于存储和传输文件

    2. 分区:GPT:bios_grub标志,用于在BIOS模式下引导;MSDOS:扩展分区

    3. 分区:(FAT32)引导分区

    4. 分区:(ISO 9660)克隆的ISO文件

    5. 分区:(ext4)casper-rw或live-rw或持久化

详细信息

关于制作持久化live系统后的分区的详细信息:

...
parted -s "/dev/sdd" print
Model: SanDisk Extreme (scsi)
Disk /dev/sdd: 16,0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 2      1049kB  2097kB  1049kB               primary  bios_grub
 3      2097kB  258MB   256MB   fat32        primary  boot, esp
 4      258MB   1791MB  1533MB               primary
 5      1791MB  8902MB  7111MB  ext2         primary
 1      8902MB  16,0GB  7111MB  ntfs         primary  msftdata

lsblk -o MODEL,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE "/dev/sdd"
MODEL            NAME   FSTYPE  LABEL                    MOUNTPOINT  SIZE
Extreme          sdd                                                14,9G
                 |-sdd1 ntfs    usbdata                              6,6G
                 |-sdd2                                                1M
                 |-sdd3 vfat    usbboot                              244M
                 |-sdd4 iso9660 Ubuntu 16.04.1 LTS amd64             1,4G
                 `-sdd5 ext4    casper-rw                            6,6G
</pre>
 Done :-) 
The target device is ready to use.
'ubuntu-16.04.1-desktop-amd64.iso'
was installed

在16.04 LTS中,gparted无法识别iso 9660文件系统和bios_grub引导镜像。

enter image description here

在17.10版本中,gparted能够识别ISO 9660文件系统和bios_grub引导镜像。

enter image description here


1所以基本上:步骤1:使用mkusb,步骤2:根据需要修改usbdata分区。但我想没有办法告诉mkusb不要触碰某些已存在的分区。 - lucidbrot
1@lucidbrot,没错,mkusb会获取整个驱动器。如果你想要其他的东西,你应该使用另一种方法/工具。 - sudodus

你想将你的USB的主要部分保留为FAT32存储14GB。
你希望LiveUSB部分是Ext4的2GB。
那么你的USB的布局如下:
sdb1 14GB的FAT32存储和EFI文件夹
sdb2 2GB的Ext4 LiveUSB
首先,你必须创建FAT32分区,以便在Windows下可见。因为如果没有进行一些调整,Windows只会挂载USB的第一个分区。
这个FAT32分区也包含了EFI文件夹,用于引导你的LiveUSB部分。
如果你想要使用Ext4格式的LiveUSB分区sdb2。默认情况下,内置的LiveUSB bootx64.efi不会引导Ext4分区。
所以我制作了一个修改过的bootx64.efi。你只需将该文件复制到sdb1/EFI/boot/目录下。它就能引导你的Ext4 LiveUSB部分。
我在这里提供了详细的步骤https://github.com/sonvirgo/Ext4-LiveUSB

非常有趣。这种方法能否允许使用casper-rw分区? - C.S.Cameron
@C.S.Cameron 当然可以。你可以为casper-rw添加一个额外的ext4分区。只要这个仍然有效:source $prefix/x86_64-efi/grub.cfg,这样bootx64.efi就能找到grub的分区了。 更新我的回答 在Windows 10 1703+版本中,你可以自由地按任意顺序创建多个分区。所有分区都可以在1703+版本下挂载。 - Son Nguyen

一个简单的解决方案:
  1. 使用KDE Partition Manager删除所有分区,并创建一个 2,048 MB 的主分区,格式为FAT32。

  2. 将剩余的可用空间分配给您的数据分区。如果需要与Windows互操作,请选择NTFS作为文件系统,但请注意,当从Linux读取时,所有文件都会设置+x属性。否则,请选择ext4。

  3. 使用unetbootin写入ISO文件(Ubuntu 18.04大约有2GB大小)。不要担心它只写入/dev/sda而不是特定的分区。

在我的设置中,gparted无法正确识别分区,而KDE Partition Manager可以。不确定如何解释这个情况。