SquashFS 官方网站位于 http://squashfs.sourceforge.net/ - 它包含最新版本的消息和更新日志,以及关于 SquashFS 的一般信息。你可以从 SourceForge 的 SquashFS 项目页面 获取最新版本。
Squashfs 也提供带有 LZMA 压缩的版本,网址为 http://www.squashfs-lzma.org/
为了读取 SquashFS,你需要内核支持它 - 就像对待reiserfs或者ext3文件系统一样。你必须确保你的内核版本有相应的补丁。它应该位于kernel-patches/linux-2.x.ySquashFS 源代码树的子目录中。另外,请记住,在大多数情况下,你需要从 kernel.org 获取干净(原始)的 Linux 内核源代码。如果你的内核源代码来自发行商,它可能已经预先打过自定义的发行商补丁,并且打 SquashFS 补丁几乎肯定会失败,因为 SquashFS 补丁是针对原始 Linux 内核制作的。然而,一些发行版从仓库中提供了 SquashFS-kernel-modules 和 SquashFS-tools 软件包。如果你考虑使用来自发行版的这些软件包,你不需要修补内核或从源代码构建 SquashFS 工具。在这种情况下,请确保从发行版仓库中获取适合你内核的模块。请注意,这样做你会有一个简单的安装步骤,但如果你介意为特定目的(例如,用于嵌入式系统)使用 SquashFS,则无法控制内核配置参数。
有了内核源代码和适当的 SquashFS 补丁,你所要做的就是(我们假设你的 Linux 内核源代码在/usr/src/linux并且你的 SquashFS 源代码位于/usr/src/squashfs):
切换到 SquashFS 源代码目录并复制内核补丁(我们假设它被命名为squashfs-patch)到/usr/src/linux.
bash# cd /usr/src/squashfs bash# cp linux-2.x.y/squashfs-patch /usr/src/linux |
进入 linux 内核源代码目录/usr/src/linux:
bash# cd /usr/src/linux |
注意:请记住,在所有后续的内核相关程序中,我们都不会离开此目录,并且所有路径都将相对于/usr/src/linux.
现在用 SquashFS 补丁打补丁源代码
bash# patch -p1 < squashfs-patch |
清理并准备内核源代码
bash# make distclean bash# make mrproper |
使用你喜欢的方法配置内核 (config/menuconfig/xconfig/gconfig)
bash# make menuconfig |
在 “文件系统” 部分,“杂项文件系统” 子部分,启用 “Squashed filesystem” 选项,无论是以模块形式还是与内核捆绑在一起。如果你计划使用 squashed 初始 RAM 磁盘(initrd),则必须将 SquashFS 编译到内核中。
在同一子部分,除非你正在为嵌入式系统配置内核,否则 “不要” 启用 “内存受限系统的附加选项”。
如果你想使用 squashed 初始 RAM 磁盘,请在 “设备驱动程序” 部分,“块设备” 子部分中启用 “Initial RAM disk support”。
如果你希望将来能够通过环回设备挂载 squashed 文件系统,你应该在 “设备驱动程序” 部分,“块设备” 子部分中启用 “Loopback device support”。
现在你可以编译内核和模块了
bash# make |
配置内核
bash# make menuconfig |
在 “文件系统” 部分,启用 “Squashed filesystem” 选项,无论是以模块形式还是与内核捆绑在一起。如果你计划使用 squashed 初始 RAM 磁盘(initrd),则必须将 SquashFS 编译到内核中。
如果你想使用 squashed 初始 RAM 磁盘,请在 “块设备” 部分中启用 “Initial RAM disk support”。
如果你希望将来能够通过环回设备挂载 squashed 文件系统,你应该在 “块设备” 部分中启用 “ Loopback device support ”。
现在你可以编译内核和模块了
bash# make dep bash# make bzImage bash# make modules |
现在是时候安装你新的支持 SquashFS 的内核了。下面的说明是在主机上安装和启动内核。你可能希望在目标系统上安装和测试它。
我们假设内核是为 x86 架构编译的,压缩的内核镜像位于arch/i386/boot/内核树的子目录中。现在将内核复制到/boot目录(并将其命名为bzImage-sqsh为了方便,如果你喜欢的话)
bash# cp arch/i386/boot/bzImage /boot/bzImage-sqsh |
如果你有任何内核模块,请不要忘记安装它们
bash# make modules_install |
修改你的引导加载程序的配置文件以包含你的新内核并安装(更新)引导加载程序。现在你可以用你的新内核重启了。当它启动时,检查一切是否正常
bash# cat /proc/filesystems |
或者,如果你将 SquashFS 支持构建为内核模块
bash# insmod squashfs bash# cat /proc/filesystems |
如果你看到squashfs行,与其他文件系统一起,这意味着你已成功在内核中启用 SquashFS。
现在你需要编译 mksquashfs - 用于创建 squashed 文件系统的工具和 unsquashfs - 它从现有的 squashed 文件系统中提取文件。
bash# cd /usr/src/squashfs/squashfs-tools |
编译并安装这些工具
bash# make bash# cp mksquashfs /usr/sbin bash# cp unsquashfs /usr/sbin |
如果一切顺利,在 shell 提示符下输入 mksquashfs 或 unsquashfs 应该会打印 “usage” 消息。
如果你使用 Debian(或其他 Linux 发行版),你可能希望从发行版仓库获取 SquashFS 模块和工具。对于 Debian,你必须使用以下命令安装适当的内核模块和工具
(假设你的架构是 x86)
bash# apt-get install squashfs-modules-2.6-486 squashfs-tools |
现在为 Linux 内核加载 squashfs 模块,如果它已正确加载,你应该在相关列表中找到它
bash# modprobe squashfs bash# lsmod|grep squash squashfs 39620 0 |
然后,如果你需要在启动时加载 squashfs 模块,则必须将其添加到 /etc/modules。
bash# echo squashfs >> /etc/modules |
请注意,在撰写本文时,Debian 软件包 (Etch. 4.0 r2) 与 squashfs 3.1 版本相关。可能不支持 3.2 版本的某些最新选项和功能。查看下一节了解详情。