1 简介
在创建小型嵌入式Linux系统时,存储设备(软盘、闪存盘等)的每个字节都非常重要,因此压缩在任何可能的地方都被使用。此外,经常需要压缩文件系统来进行归档。对于庞大的公共数字档案,以及个人媒体数字档案,这是必不可少的。
SquashFS把这一切带到一个新的水平。它是一个只读文件系统,允许您压缩整个文件系统或单个目录,将它们写入其他设备/分区或普通文件,然后直接(如果是设备)或使用环回设备(如果是文件)挂载它们。
SquashFS是作为 Linux内核源补丁(在内核中支持SquashFS读取)、mksquashfs工具(创建压缩文件系统(在文件或块设备中))和 unsquashfs 工具(从现有压缩文件系统中提取多个文件)分发的。
SquashFS是一种用于Linux的压缩的只读文件系统,它也可以作为一种灵活的通用压缩归档格式,通过支持Unix权限、稀疏文件和扩展属性,为快速随机访问进行了优化。
SquashFS支持通过zlib、lz4、lzo、lzma、xz或zstd对数据和元数据进行压缩。
为了快速随机访问,压缩文件被分割成固定大小的块,并分别压缩。
块大小可以设置在4k到1M之间( squash -tools 和squash -tools-ng 的默认值是128K)。本文档试图详细指定磁盘上的格式。
2 概述
SquashFS总是以小端序格式存储整数。
组成SquashFS存档的数据块是按字节对齐的,也就是说,它们通常不关心对齐。Linux内核中的实现要求归档本身的大小是1k或4k的倍数(称为设备块大小),用户空间工具通常使用4k来与两者兼容。
SquashFS归档文件最多由九个部分组成:
Superblock 超级块 |
关于存档的重要信息,包括其他部分的位置。 |
---|---|
Compression options 压缩选项 |
如果使用了非默认的压缩选项,可以选择将它们存储在这里,以便以后离线编辑归档文件。 |
Data blocks & frgments 数据块 和 片段 |
归档文件内容,分成单独的压缩块 |
Inode table 索引表 |
存档中条目的元数据(所有权、权限等)。 |
Directory table 目录表 |
目录清单(包括文件名)和索引节点的引用 |
Fragment table 片段表 |
在Datablocks & Fragments部分中描述片段位置。 |
Export table 导出表 |
从inode编号到磁盘位置的映射,需要NFS导出。 |