Squashfs 简述

squashfs

Squashfs 简述

Squashfs(.sfs) 是一套供Linux核心使用的GPL开源许可文件系统。Squashfs的设计是专门为一般的只读文件系统的使用而设计,它可应用于数据备份,或是系统资源紧张的电脑上使用。最初版本的Squashfs采用 gzip 的数据压缩。版本2.6.34 之后的Linux内核增加了对LZMA[1 ]LZO [[2]](https: //zh.wikipedia.org/wiki/SquashFS#cite_note-2)压缩算法的支持,版本2.6.38 的内核增加了对LZMA2的支持,该算法同时也是xz使用的压缩算法。

Squashfs常被用于各Linux发行版LiveCD中,也用于OpenWrtDD-WRT 的路由器固件。Chromecast也是该文件系统的用户。在LiveCD中,Squashfs通常与UnionFSOverlayFSaufs等联合挂载文件系统结合使用,以便在LiveCD系统中提供可读写支持。Appimage项目也使用Squashfs作为镜像。

使用示例

Tina5 SquashFS 文件系统镜像制作命令

mksquashfs rootfs/ rootfs.squashfs -noappend -root-owned -comp xz -b 256k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 4

mksquashfs rootfs/ rootfs.squashfs:
rootfs/ 是你要打包为 SquashFS 镜像的根文件系统目录。
rootfs.squashfs 是生成的 SquashFS 镜像文件的名称。
-noappend:

这个选项表示不要将新内容追加到现有的 SquashFS 镜像中,而是创建一个全新的镜像文件。如果目标镜像文件已经存在,它将被覆盖。
-root-owned:

该选项指定所有的文件和目录在生成的 SquashFS 镜像中都将被设置为 root 用户拥有(UID=0,GID=0)。
-comp xz:

指定使用 xz 压缩算法进行文件系统的压缩。xz 通常比默认的 gzip 有更高的压缩率,但速度较慢。
-b 256k:

这个参数设置了压缩块的大小为 256KB。SquashFS 文件系统以块为单位进行压缩,较大的块可能带来更好的压缩率,但解压时的内存消耗也会增加。256KB 是一个平衡的选择,较为常用。
-p '/dev d 755 0 0'
这个参数用于创建设备节点。它表示创建一个目录 /dev,权限为 755,拥有者和组为 0(即 root)。格式为:
d: 表示这是一个目录。
755: 这是权限,代表所有者可以读、写、执行,组和其他用户可以读和执行。
0 0: 表示所有者和组的 UID 和 GID 均为 0,即 root。
-p '/dev/console c 600 0 0 5 1'
这个参数用于创建字符设备节点 /dev/console,权限为 600。格式为:
c: 表示这是一个字符设备。
600: 表示文件的权限,所有者可以读写,其他用户无权限。
0 0: 代表该文件的所有者 UID 和 GID 均为 0(root)。
5 1: 表示该字符设备的主设备号(5)和次设备号(1),对应于 /dev/console。
-processors 4:

该选项指定使用 4 个处理器核心并行压缩。这个参数可以提高压缩的速度,尤其是在使用较高压缩率的 xz 算法时,使用多个处理器可以显著加快镜像创建的过程。
总结:
这个命令会使用 xz 压缩算法将 rootfs/ 目录打包成一个 SquashFS 镜像 rootfs.squashfs,压缩块大小为 256KB,使用 4 个处理器来加速压缩过程,并在 /dev 下创建权限为 755 的目录以及权限为 600 的字符设备 /dev/console。