创建自定义的 Ubuntu Live USB,其只读文件系统 squashfs 大于 4GB

创建自定义的 Ubuntu Live USB,其只读文件系统 squashfs 大于 4GB

结论

如何创建一个可启动的 Ubuntu Live USB,其压缩filesystem.squashfs大小大于 4GB,具体来说是 4,294,967,295 字节,这是 FAT32 格式的驱动器的文件限制。

更多详情

我正在尝试创建一个不保留数据的自定义可启动 Ubuntu Live USB,但遇到了限制:

我尝试过的方法

  • 立方体这很棒,但是一旦我完成自定义图像,filesystem.squashfs即使使用 XZ 压缩,其大小也可能超过 4GB
  • 使用这个脚本filesystem.squashfs使用从当前正在运行的安装(首选)构建mksquashfs,但即使使用 XZ 压缩,我也遇到了相同的 FAT32 文件大小限制

期望的结果

  • 我想要一个在会话之间不会持续存在的 Live Ubuntu USB
  • 我希望完成这个文件大小限制,而不必担心修剪包或删除已安装的包(我已经运行了类似的东西apt clean/autoclean等)
  • 我想自定义和添加任意数量的软件包,无论是通过 Cubic 之类的应用程序,还是通过一些实时运行的 Ubuntu 安装,都无需担心压缩的 FS 文件大小

总结

  • 是否可以将其拆分filesystem.squashfs为多个文件卡斯帕menuentrylinux参照压扁的FS就明白了?
  • mksquashfs除了与 grub/casper 兼容的只读文件系统之外,还有其他替代品吗?
  • 这是否可能是编写我自己的程序来解决这个问题的机会,或者这将是一个过于艰巨的任务?

答案1

据我所知,据我所知, initramfs 文件中的脚本通过 overlayfs 从ISO 文件夹中casper以 结尾的所有文件中创建新的根。.squashfscasper

所以我在重建 ISO 文件时简单地拆分了文件系统,它就成功了!我最近才这样做(squashfs split),现在正在测试这种系统的稳定性。

OP 解决问题的方式也很有趣,split 的好处是使用 ISO 文件可以使用 Ventoy 等工具在一个 USB 上安装多个系统。

PS 免责声明:尝试查看您的 ISO 文件,如果不行,也许在 ISO 上您尝试自定义不同的 casper 脚本。

答案2

我能够解决这个问题。UEFI 无法读取 FAT 以外的任何内容,但 Casper 可以。以下是有关如何创建具有压缩 FS > 4GB 的可启动 Live USB 的说明。与其他可启动 USB 创建方法不同,此方法不会破坏整个 USB。

环境

  • 操作系统:Ubuntu 22.04
  • ISO 创建器:立方
  • 源图像:从 ubuntu.com 下载最新的 22.04 桌面

可启动 USB 分区

  • 分区 1
    • 格式:FAT32
    • 大小:~5GB
    • 标志:boot
  • 分区 2
    • 格式:ext4
    • 大小:10-15GB(足够用于 squashfs 文件系统)

您可以随意对 USB 的其余部分进行分区,而无需在安装过程中删除任何数据。请务必记下分区的设备安装,例如/dev/sda1(FAT32)、/dev/sda2(ext4)。

指示

  1. 使用创建您的自定义 ISO立方体

  2. 按照指示操​​作,直到到达选项页。

在这里,我们告诉 casper 从不同于 FAT32 启动分区的位置加载压缩的 FS。

首先,我们要引用 ext4 分区的 UUID,而不是它的设备 ID(/dev/sda2在我的情况下),因为设备 ID 可以改变。

您可以使用以下说明找到您创建的 ext4 分区的 UUID:https://linuxhint.com/uuid_storage_devices_linux/。由于我的 ext4 分区是/dev/sda2,我可以这样做来获取我的 ext4 UUID:

$ ll /dev/disk/by-uuid | grep sda2
lrwxrwxrwx 1 root root  10 Oct 10 20:38 727cac18-044b-4504-87f1-a5aefa774bdb -> ../../sda2

这表明我的 ext4 分区的 UUID 是727cac18-044b-4504-87f1-a5aefa774bdb

修改 grub 配置“启动”选项卡。您需要menuentry像这样修改第一个:

menuentry "Ubuntu RAM" {
    set gfxpayload=keep
    linux   /casper/vmlinuz boot=casper live-media=/dev/disk/by-uuid/727cac18-044b-4504-87f1-a5aefa774bdb toram file=/cdrom/preseed/ubuntu.seed quiet splash noprompt --- 
    initrd  /casper/initrd.gz
}

确保将 /dev/disk/by-uuid/<UUID> 更改为您在此步骤中找到的正确的 ext4 分区 UUID!

可以找到 Casper 启动选项文档这里

我们已经添加以下启动选项

  • toram(注意:如果没有足够的 RAM 来容纳整个 squashfs 文件系统,请删除此启动选项)
  • noprompt
  • live-media=<DEVICE_UUID_PATH>

我们已经已删除以下启动选项

  • maybe-ubiquity
  1. 当系统提示您输入压缩方法时压缩页面,请随意选择 LZ4,因为它速度最快并且filesystem.squashfs文件大小不再是问题。

  2. 生成您的自定义 ISO

  3. 将您的自定义 ISO 提取到某个空目录,例如~/Documents/my-ubuntu-folder

  4. 将解压的 ISO 中除 FAT32 分区之外的所有文件复制casper/filesystem*到 FAT32 分区。casper/vmlinuz并且casper/initrd.gz必须位于 FAT32 启动分区上。

您可能会看到一些无法复制符号链接的警告,因为 FAT32 不支持它们;这是没问题的,您可以跳过这些文件,同时保持可启动 USB 的可用性。

  1. casper在您的 ext4 分区中创建一个名为的目录,并将所有提取的casper/filesystem*文件复制到此目录中。

完成后casperFAT32分区应该像这样:

$ ls -1 casper/
initrd.lz  
vmlinuz

并且casper你的目录ext4分区应该看起来像这样

$ ls -1 casper/
filesystem.manifest
filesystem.manifest-minimal-remove
filesystem.manifest-remove
filesystem.size
filesystem.squashfs

live-media现在,您已经通过 casper 的启动选项创建了一个 UEFI 可启动 USB,它为其只读文件系统使用单独的存储分区。

相关内容