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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章