如何获取一个可用于持久化的分区的实时USB?

我想将Ubuntu安装到USB硬盘上,以便它能在所有能运行LiveCD的系统上运行,并将持久数据存储在常规的ext4分区中,而不是一个casper-rw文件。在其他方面,它应该表现得像一个常规的Ubuntu安装。

问题

使用启动磁盘创建器可以将LiveCD映像放入USB设备中。更改可以被持久化,但是存储在一个大小受限的文件中(仅几GB)。该持久文件(除了大小受限外)的问题在于它不像普通分区上的数据那样可读。

我的问题

那么,如何将LiveCD放入USB磁盘中,使更改存储在一个普通分区中,而不是一个持久性文件?此外,持久性更改的大小不应受到几GB的限制,而是可以使用多达几百GB的整个分区。

我怀疑这方面可能有教程,但是我的搜索技巧还不足以找到它。

简而言之:

系统应该在所有硬件配置上运行,具有LiveCD的完整功能,并存储在常规的ext4分区上,而不使用ramdisk和casper-rw。去死吧casper-rw。
我知道可以从另一个操作系统中挂载casper-rw文件以此获取数据,但这很麻烦。

为什么不按常规方式安装到USB存储设备呢?运行一个Live CD,并将其设置为您的根分区。(相比于Live-CD设置,可能会稍微麻烦一些,但还是很容易的。) - jpaugh
因为在live-CD上的版本不是针对特定硬件的,最重要的是它有安装Ubuntu到其他设备的选项。 - con-f-use
附加问题:如何使fstab的更改持久化?http://askubuntu.com/q/56719/17789上的答案似乎已过时。 - con-f-use
现在的syslinux(6.03)可以安装到NTFS文件系统,因此不再受4GB FAT32大小限制的限制。请参考YUMI。 - C.S.Cameron
3个回答

这很容易做到,尽管“casper-rw”名称仍然会显示一次 :)
你的目标USB盘必须至少有两个分区;我建议使用GParted来创建一个新的分区表。
第一个分区必须是vfat/FAT32格式,最小大小为750MB(如果你使用的是live DVD镜像,则更大)。
第二个分区应该是ext4格式,大小可以根据你想要的持久存储空间来设定(没有限制),但它必须被标记为casper-rw(全部小写,不带引号)。
当然,你也可以添加第三、第四个分区,扩展/逻辑分区等。
注意:我更喜欢使用UNetbootin,因为它使得编辑syslinux配置变得容易。你可以使用自己的USB创建工具,但你需要相应地修改下面的步骤。另外请注意,GParted 0.18.0似乎在分区USB盘时存在问题。所以如果你遇到这个问题,请使用live GParted CD进行分区。
使用UNetbootin将你选择的live CD ISO写入第一个(vfat)USB分区。
为UNetbootin的持久选项设置一个很小的大小(比如10MB),以便简化操作;别担心,我们实际上不会使用这个casper-rw文件。
一切都完成后,最后一步是删除安装了live CD的vfat分区上创建的小casper-rw文件,以便使用较大的ext4 casper-rw分区。挂载这个分区(这里是sdb1),然后删除/casper-rw。
如果你使用了UNetbootin,持久性(通过persistent内核选项)应该已经设置好了,所以安全地弹出USB盘,你就可以开始使用了!
PS:如果你不想使用UNetbootin,而是在Ubuntu中使用“启动盘创建器”,那么你需要对你的syslinux/txt.cfg文件进行一些编辑,具体如下所示:
默认实时 标签实时 菜单标签 ^尝试安装Ubuntu 内核 /casper/vmlinuz.efi 追加 文件=/cdrom/preseed/ubuntu.seed boot=casper cdrom-detect/try-usb=true persistent noprompt floppy.allowed_drive_mask=0 ignore_uuid initrd=/casper/initrd.lz quiet splash -- 标签实时安装 菜单标签 ^安装Ubuntu 内核 /casper/vmlinuz.efi 追加 文件=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity cdrom-detect/try-usb=true persistent noprompt floppy.allowed_drive_mask=0 ignore_uuid initrd=/casper/initrd.lz quiet splash -- 标签检查 菜单标签 ^检查光盘是否有缺陷 内核 /casper/vmlinuz.efi 追加 boot=casper integrity-check cdrom-detect/try-usb=true persistent noprompt floppy.allowed_drive_mask=0 ignore_uuid initrd=/casper/initrd.lz quiet splash -- 标签内存测试 菜单标签 ^测试内存 内核 /install/mt86plus 标签硬盘 菜单标签 ^从第一块硬盘启动 localboot 0x80

不着急,请您慢慢来,测试一下。如果有任何问题或疑问,请在评论中告诉我 :) - ish
有没有不将这些分区扩展的理由? - con-f-use
非常感谢,它确实起作用了。不知道它是否也适用于ntfs/fat32分区作为casper-rw?我猜应该不行... - con-f-use
1不,分区必须是ext2/ext3/ext4格式...但你可以有额外的NTFS分区,这样可以启动WinPE等操作系统。 - ish
+1个不错的技巧:)。我想要补充的是,在任何其他分区的根目录下,您不应该有任何其他的casper-rw文件。这可能会导致Ubuntu有时尝试使用那个文件。 - Anwar
我建议使用ext2而不是ext3ext4,因为它可以省去保持日志的开销。在USB驱动器上,这可能会稍微提高性能。 - Michael Härtl
3这个解决方案在使用Unetbootin安装LXLE时没有起作用。它卡在一个显示Busybox和一个带有(initramfs)提示符的屏幕上。 - luisgonzalez
@izx 如何在vfat文件系统中挂载sdb1?我可以在真实系统中进行挂载。但是当从Live USB启动时,挂载不是持久的,所以它无法识别ext2分区。 - Khurshid Alam

持久分区与SDC,UNetbootin,Rufus等syslinux安装类型不兼容,自14.04以来就一直如此(除非分区位于单独的驱动器上)。尝试引导将以BusyBox结束。
Syslinux 6.03完全支持NTFS(和许多其他fs),因此不再需要满足FAT32的4GB持久文件大小限制。 YUMI使用Syslinux 6.03,RUFUS也是如此。

https://www.pendrivelinux.com/yumi-multiboot-usb-creator/

https://rufus.akeo.ie/

Mkusb是一款使用FAT32分区进行引导的grub2类型的可启动闪存驱动器制作工具,它采用了一个只写的ISO9660分区用于操作系统,一个ext4 casper-rw分区用于持久性,并且还有一个NTFS数据分区可供Linux和Windows同时访问。

https://help.ubuntu.com/community/mkusb

它应该满足您的规格要求。

就我所知,以下是我制作持久化闪存驱动器的方法:

启动Live CD或Live USB。 插入闪存驱动器。 启动gparted。

创建一个2GB的FAT32分区(在条形图的左侧)。(大小可选,额外空间可用于文件存储和传输到Windows机器)。

在其右侧创建一个4GB的ext2分区,并将其标记为"casper-rw"。(ext3和ext4也可以使用)。

在剩余的空间中创建一个分区,并将其标记为"home-rw"。(可选,创建一个单独的主目录分区)。

关闭gparted。 卸载并重新挂载闪存驱动器。 启动"创建一个启动USB盘"(usb-creator)。 选择"关机时丢弃"。 点击"制作启动盘"。 当usb-creator完成后,进入您的Live USB的根文件夹 进入syslinux目录(或者对于UNetbootin,进入根目录)。 将syslinux.cfg文件设置为可写 用以下内容替换syslinux.cfg文件的内容:

default persistent
label persistent
  say Booting a persistent Ubuntu session...
  kernel /casper/vmlinuz
  append  file=/cdrom/preseed/ubuntu.seed boot=casper persistent initrd=/casper/initrd.lz quiet splash noprompt --

关机,取出光盘,重新启动。
首次启动时,进入用户和组,并创建一个以自己为管理员的帐户,如果需要,可以设置密码。
注意: 上述代码将绕过试用/安装和语言选择屏幕。

这个解决方案在使用Unetbootin安装LXLE时没有起作用。它在一个显示Busybox和一个带有(initramfs)的提示符的屏幕上卡住了。 - luisgonzalez
@luisgonzalez 自14.04以来,syslinux类型的安装(SDC、UNetbootin、Universal)不支持持久分区,但是grub2类型的安装(mkusb)支持持久分区。使用mkusb比上面任何答案都要容易得多。 - C.S.Cameron