Linux Squashfs只读文件系统是什么?

摘要:liwen01 2024.07.21 前言 嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省
liwen01 2024.07.21 前言 嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省空间的目的。 另外还有个特性就是它可以分块解压缩,使用数据会更加灵活,但同时也会引入读放大的问题。 (一)制作squash文件系统 使用mksquashfs可以将文件及文件夹制作成squash文件系统镜像文件,比如我们要将squashfs-root文件夹打包成squashfs镜像文件,可以使用命令: mksquashfs squashfs-root squashfs-root.sqsh -comp xz 这里是使用xz压缩方式进行文件压缩 (1)压缩比例测试 squashfs是一个只读压缩的文件系统,我们简单测试一下它的压缩功能 使用/dev/zero生成零数据写入到文件夹squashfs_zero对应的文件中 dd if=/dev/zero of=file1 bs=256K count=1 制作如下测试文件目录及测试文件: biao@ubuntu:~/test/squashfs/squashfs_zero$ tree . ├── test1 │ ├── file1 │ ├── file1_1 │ └── file1_2 ├── test2 │ ├── file2 │ ├── file2_1 │ └── file2_2 ├── test3 │ ├── file3 │ ├── file3_1 │ └── file3_2 └── test4 ├── file4 ├── file4_1 └── file4_2 4 directories, 12 files biao@ubuntu:~/test/squashfs/squashfs_zero$ 文件大小如下: biao@ubuntu:~/test/squashfs/squashfs_zero$ du -h 1.5M ./test3 2.1M ./test2 2.1M ./test1 1.7M ./test4 7.3M . biao@ubuntu:~/test/squashfs/squashfs_zero$ 使用xz压缩方式将squashfs_zero制作成镜像文件 mksquashfs squashfs_zero squashfs_zero.sqsh -comp xz 文件大小如下: biao@ubuntu:~/test/squashfs$ ll -h squashfs_zero.sqsh -rw-r--r-- 1 biao biao 4.0K Jun 26 23:48 squashfs_zero.sqsh biao@ubuntu:~/test/squashfs$ 这里是将7.3M大小squashfs_zero文件夹压缩成了一个4k大小的squashfs_zero.sqsh。当然,这里的测试是非常极端的,因为文件写入的数据都是0,如果写入随机数那压缩比例就会相差非常大了。 (二)squashfs数据分析 (1)数据布局 Squashfs的一个镜像文件它最多包含下面9个部分:Superblock、Compression options、Data blocks fragments、Inode table、Directory table、Fragment table、Export table、 UID/GID lookup table、Xattr table。 最多包含的意思,也就是有些部分不是必须的,比如Compression options 部分。
阅读全文