![为什么 Linux 发行版的 Live ISO 的基本系统通常使用 squashfs 存储?](https://linux22.com/image/199250/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E5%8F%91%E8%A1%8C%E7%89%88%E7%9A%84%20Live%20ISO%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%B3%BB%E7%BB%9F%E9%80%9A%E5%B8%B8%E4%BD%BF%E7%94%A8%20squashfs%20%E5%AD%98%E5%82%A8%EF%BC%9F.png)
为什么 Live ISO 不能只是一个带有安装程序的最小 Linux 系统?有什么理由使用squashfs来保存文件系统的根目录吗?是为了更好的压缩,还是还有其他原因?
我看到一些答案(和评论)说这是出于只读原因。持久性怎么样,比如 Ubuntu 或 EndeavourOS 的 Live USB 中的持久性?
答案1
造成这种情况有几个重要原因,但最主要的两个原因是空间限制和文件系统本身的要求。
SquashFS 是一个高度优化的文件系统映像格式具有以下优点:
- 高水平的数据压缩。
- 内置块级重复数据删除(任何给定块仅存储一次,包含该块副本的所有文件仅引用该副本)。
- 对文件大小没有实际限制(这通常并不重要,但在我看来值得一提)。
- 对文件所有权、文件权限、扩展属性的适当支持(例如 SELinux 所需)
- 尽管具有上述优点,但运行时开销非常低。
- 相当不错的性能。
可刻录的实时系统映像需要符合其所使用的媒体类型所需的文件系统格式,如果是光盘,则为 ISO 9660(因为虽然它可以使用 UDF,几乎没有人真正这样做),或者在大多数 USB 连接的存储设备上使用 FAT32。 FAT32 众所周知支持没有任何上面列出的前四个好处。 ISO 9660技术上支持 POSIX 风格的文件所有权和权限(Rock Ridge 扩展),但缺乏对压缩和重复数据删除的实际支持。
然而,Linux需要POSIX 风格的文件所有权和权限能够正常工作,在大多数情况下,最终的实时系统映像非常希望尽可能小,因此需要良好的压缩,并且因为 SquashFS 比 Linux 可用的任何其他选项在这方面做得更好现在,它用于实时映像的根文件系统(因为它通常是映像的最大部分,而且也是引导加载程序不需要理解的唯一部分)。
答案2
ISO 通常不存储为 squashfs,因为 ISO 通常指的是 ISO 9660 标准文件系统及其后继者,专门设计用于 cdrom 和后来的 DVD 等。
不要将其与通用文件系统映像混淆,通用文件系统映像可以使用任何格式(并且通常使用 .img 而不是 .iso 作为文件名)。
ISO 文件系统通常用于以下情况:可能或可能将映像刻录到 CDROM,或者为了从 CDROM、USB 记忆棒或某些类似介质启动时实现 BIOS 兼容性。
squashfs 在 Linux 中经常用于只读图像,并且针对此用途进行了高度优化,包括数据压缩和最小大小的数据结构以及低开销。这可以用于实时磁盘映像,但它无法启动,因为只有 Linux 可以识别这种格式,而计算机的固件则不能,除非它也是 Linux 或直接支持 Linux。然而,squashfs 映像经常作为大文件出现在 ISO live 磁盘中。除了压缩之外,squashfs 相对于 ISO 格式的优势还在于它支持完整的 Linux 文件系统标准(针对只读文件系统),包括文件属性。
其他格式(例如 vfat 或 ext4)也可用于文件系统映像,尽管这些格式针对读/写磁盘卷进行了优化。