squashfs介绍
SquashFS 是一套基于Linux内核使用的压缩只读文件系统。该文件系统能够压缩系统内的文档,inode以及目录,文件最大支持2^64字节。
SquashFS是基于GPL协议的开源软件。初始的版本使用gzip压缩,2.6.34版本Linux内核增加了支持LZMA和LZO压缩,并且在2.6.38内核版本上增加支持XZ压缩。
squashfs版本
SquashFS有几个不同的版本,这里给出一些主要的信息
Squashfs 4.2 : 最新的版本,并适用于2.6.29版本以后的Linux内核。
Squashfs 4.1 : 支持XZ压缩,并适用于2.6.29版本以后的Linux内核。
Squashfs 3.4 : 该版本是3.X的最后一个版本,并适用于2.6.29版本之前的内核。
squashfs源码下载
下载地址:
https://sourceforge.net/projects/squashfs/
https://www.squashfs-lzma.org
我下载的版本squashfs4.2.tar.gz
https://www.squashfs-lzma.org/downloads/squashfs4.2.tar.gz
squashfs编译安装
tar -xvzf squashfs4.2.tar.gz
cd squashfs4.2/
cd squashfs-tools/
vim Makefile #没有root权限要修改安装路径,修改INSTALL_DIR为你有安装权限的目录,例如我修改的路径是/home/mayue/usr
make
make install
编译和安装成功后会在安装路径下生成mksquashfs
和unsquashfs
两个命令工具。mksquashfs
负责压缩只读文件系统,unsquashfs
负责解压文件系统。
注:Squashfs编译安装默认不支持xz。
支持XZ_SUPPORT
打开squashfs-tools目录下的Makefile文件,将XZ_SUPPORT = 1前面的注释去掉。
操作如下:
vi Makefile #修改XZ_SUPPORT = 1
make clean
make
结果报错,错误如下:
$ make
cc -O2 -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -DCOMP_DEFAULT=\"gzip\" -Wall -DGZIP_SUPPORT -DXZ_SUPPORT -DXATTR_SUPPORT -DXATTR_DEFAULT -c -o xz_wrapper.o xz_wrapper.c
xz_wrapper.c:28:18: 致命错误: lzma.h:没有那个文件或目录
编译中断。
make: *** [xz_wrapper.o] 错误 1
根据下面链接提示是需要下载和安装xz源码包 https://blog.csdn.net/snowpiaop/article/details/52982997
xz下载地址:https://tukaani.org/xz/
我这里下载的是 xz-5.2.5.tar.gz
xz安装
tar xzvf xz-5.2.5.tar.gz
cd xz-5.2.5
./configure --prefix=/home/mayue/usr
make
make install
编译安装成功就会在/home/mayue/usr目录下生产bin、include、lib、local、share目录和子文件。bin目录下有xz等命令、include目录下有lzma相关的头文件、lib目录下有liblzma.a等库。
将include下的头文件lzma.h和子目录lzma目录拷贝到squashfs-tools目录下。
将lib下的liblzma.a库拷贝到squashfs-tools目录下,这里准备使用静态库。
直接make编译提示找不到liblzma.a库。
再次修改squashfs-tools目录下Makefile文件,添加如下内容
LIBS += -L./ #添加当前目录到lib库文件搜索路径,为了找到liblzma.a库
再次进行make编译,编译成功。
执行make install将mksquashfs
和unsquashfs
安装到指定路径下。
注:使用支持xz的mksquashfs
压缩得到的文件系统,用不支持xz的unsquashfs
不能解压。
注:若需要一直使用mksquashfs
和unsquashfs
,需要将对应路径添加到环境变量。
实例
有app目录,目录下有myapp、initrun.sh、cmdtool三个文件,操作如下图
默认解压到squashfs-root目录,可指定目录,命令如下:
./unsquashfs -d mydir app.squash #解压到mydir目录,mydir目录不允许存在
查看帮助手册:
mksquashfs -h
unsquashfs -h
参考资料
https://baike.baidu.com/item/squashfs/6036237?fr=aladdin
https://blog.csdn.net/lurayvis/article/details/10242441#_Toc240991115
https://blog.csdn.net/qq_27901091/article/details/97617505
https://blog.csdn.net/wuqingwei/article/details/79235210