6.8 超高压缩率的squashfs文件系统

squashfs是一种只读型的超高压缩率文件系统,这种文件系统能够将2GB-3GB的数据压缩成一个700MB的文件。你有没有想过Linux Live CD是怎么样运行的?当Live CD启动后,它会加载一个完整的Linux环境。这就是利用了一种被称为squashfs的只读型压缩文件系统。它将根文件系统保存在一个压缩过的文件系统文件中。这个文件可以使用环回的形式来挂载并对其中的文件进行访问。因此当进程需要某些文件,可以将它们解压,然后载入内存中使用。如果需要构建一个定制的Live OS,或是需要使用超高压缩率的文件并且无需解压就可以访问文件,那么squashfs的相关知识就能派得上用场。要解压个头较大的压缩文件,那可得花上一阵工夫。但如果将文件以环回形式挂载,速度就会飞快,因为只有出现访问请求的时候,对应的那部分压缩文件才会被解压缩。而普通的解压缩方式是首先解压缩所有的数据。让我们来看看如何使用squashfs

6.8.1 预备知识

如果你有一张Ubuntu CD,可以在CDRom ROOT/casper/filesystem.squashfs中找到文件.squashfs。squashfs在内部采用了gziplzma这类压缩算法。所有最新的Linux发行版都支持squashfs。但要想创建squashfs文件,需要额外安装squshfs-tools软件包。

6.8.2 实战演练

通过添加源目录和文件,创建一个squashfs文件:

  1. $ mksquashfs SOURCES compressedfs.squashfs

SOURCES部分可以使用通配符或文件、目录路径。

例如:

  1. $ sudo mksquashfs /etc test.squashfs
  2. Parallel mksquashfs: Using 2 processors
  3. Creating 4.0 filesystem on test.squashfs, block size 131072.
  4. [=======================================] 1867/1867 100%
  5.  
  6. 还有更多的细节信息会出现在终端上。由于版面的限制,这里就不再列出这些信息了

要挂载squashfs文件,利用环回形式进行挂载:

  1. # mkdir /mnt/squash
  2. # mount -o loop compressedfs.squashfs /mnt/squash

你可以通过访问 /mnt/squashfs复制其中的内容。

6.8.3 补充内容

可以指定额外的参数来创建squashfs文件系统。让我们来看一些其他的命令选项。

在创建squashfs文件时排除部分文件

创建squashfs文件时,我们可以排除部分文件,这些文件可以用文件列表的形式指定,也可以用通配符来指定。

使用选项 -e,将需要排除的文件列表以命令行参数的方式来指定。例如:

  1. $ sudo mksquashfs /etc test.squashfs -e /etc/passwd /etc/shadow

其中,选项 -e用于排除文件passwd和shadow。

也可以将需要排除的文件名写入文件,然后用 -ef指定该文件:

  1. $ cat excludelist
  2. /etc/passwd
  3. /etc/shadow
  4.  
  5. $ sudo mksquashfs /etc test.squashfs -ef excludelist

如果希望在排除文件列表中使用通配符,那么可以使用 -wildcard选项。