![创建自定义的 Ubuntu Live USB,其只读文件系统 squashfs 大于 4GB](https://linux22.com/image/949389/%E5%88%9B%E5%BB%BA%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%20Ubuntu%20Live%20USB%EF%BC%8C%E5%85%B6%E5%8F%AA%E8%AF%BB%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%20squashfs%20%E5%A4%A7%E4%BA%8E%204GB.png)
结论
如何创建一个可启动的 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
为多个文件卡斯帕的menuentry
linux参照压扁的FS就明白了? mksquashfs
除了与 grub/casper 兼容的只读文件系统之外,还有其他替代品吗?- 这是否可能是编写我自己的程序来解决这个问题的机会,或者这将是一个过于艰巨的任务?
答案1
据我所知,据我所知, initramfs 文件中的脚本通过 overlayfs 从ISO 文件夹中casper
以 结尾的所有文件中创建新的根。.squashfs
casper
所以我在重建 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)。
指示
在这里,我们告诉 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
当系统提示您输入压缩方法时压缩页面,请随意选择 LZ4,因为它速度最快并且
filesystem.squashfs
文件大小不再是问题。将您的自定义 ISO 提取到某个空目录,例如
~/Documents/my-ubuntu-folder
。将解压的 ISO 中除 FAT32 分区之外的所有文件复制
casper/filesystem*
到 FAT32 分区。casper/vmlinuz
并且casper/initrd.gz
必须位于 FAT32 启动分区上。
您可能会看到一些无法复制符号链接的警告,因为 FAT32 不支持它们;这是没问题的,您可以跳过这些文件,同时保持可启动 USB 的可用性。
casper
在您的 ext4 分区中创建一个名为的目录,并将所有提取的casper/filesystem*
文件复制到此目录中。
完成后casper
,FAT32分区应该像这样:
$ 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,它为其只读文件系统使用单独的存储分区。