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 部分。
