squashfs介绍和安装

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

编译和安装成功后会在安装路径下生成mksquashfsunsquashfs两个命令工具。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将mksquashfsunsquashfs安装到指定路径下。

注:使用支持xz的mksquashfs压缩得到的文件系统,用不支持xz的unsquashfs不能解压。

注:若需要一直使用mksquashfsunsquashfs,需要将对应路径添加到环境变量。

实例

有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


版权声明:本文为mayue_web原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。