为了从单个目录(例如,/some/dir)创建一个 Squash 压缩文件系统,并将其输出到一个常规文件(从而生成一个文件系统镜像),您只需要输入一个神奇的短语
bash# mksquashfs /some/dir dir.sqsh |
mksquashfs 将执行压缩,并打印生成的 inode 数量和写入数据的大小,以及平均压缩率。现在您已经有了您的/some/dir目录镜像在dir.sqsh文件中。您现在可以使用 mount 命令,使用回环设备挂载它
bash# mkdir /mnt/dir bash# mount dir.sqsh /mnt/dir -t squashfs -o loop |
检查是否符合预期
bash# ls /mnt/dir |
如果您想将文件系统直接输出到设备(例如,您的软盘在/dev/fd0):
bash# mksquashfs /some/dir /dev/fd0 |
),那么只需 mount 该设备
bash# mount /dev/fd0 /mnt/floppy -t squashfs |
并检查是否正常
bash# ls /mnt/floppy |
这里描述的操作适用于大多数可以使用只读压缩文件系统的情况,无论您希望它位于块设备还是文件中。这可以是任何东西,从不常更改的大型 FTP/HTTP 服务存档,到拥有一个 Squash 压缩的/usr分区以及类似的任何东西。
假设您有一个/var/arch目录,其中包含大量文件,并且您想将其转换为 Squash 压缩文件系统,并将其作为文件保存在您的根分区上(它将是一个文件系统镜像,您将通过回环设备挂载它)。执行所需的操作如下。
压缩目录,然后通过回环设备挂载它以进行测试
bash# mksquashfs /var/arch /var/arch.sqsh bash# mkdir /mnt/tmp bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop bash# ls /mnt/tmp |
如果一切如预期,通过将以下行添加到您的/etc/fstab:
/var/arch.sqsh /var/arch squashfs ro,defaults 0 0 |
来使此文件系统在启动时自动挂载
bash# umount /mnt/tmp bash# mount /var/arch |
从临时挂载点卸载文件系统,并使用其 fstab 条目进行挂载
bash# ls /var/arch |
4.2.2. 示例 2假设您有两个硬盘分区,/dev/hda6(是空的)和/dev/hda7假设您有两个硬盘分区,(比/var/arch更大,挂载在(是空的)和,包含一些数据并且已满)。现在,假设您想压缩假设您有两个硬盘分区,文件系统并将其移动到(是空的)和,然后将/etc/fstab用于其他目的。我们将假设您在(是空的)和):
/dev/hda7 /var/arch reiserfs defaults 0 0 |
中具有以下行(reiserfs 只是在
bash# mksquashfs /var/arch /var/arch.sqsh bash# mkdir /mnt/tmp bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop bash# ls /mnt/tmp |
上使用的示例文件系统)。(是空的)和与之前的示例类似如果一切顺利,卸载(如果需要),并使用 dd 复制假设您有两个硬盘分区,:
bash# umount /dev/hda7 bash# dd if=/var/arch.sqsh of=/dev/hda6 |
/var/arch.sqsh/etc/fstab到(是空的)和(如果需要),并使用 dd 复制
/dev/hda6 /var/arch squashfs ro,defaults 0 0 |
现在更改
bash# mount /var/arch bash# ls /var/arch |
中的行
bash# rm /var/arch.sqsh |
不要忘记删除不需要的文件系统镜像
通过“微型/嵌入式”,我的意思是为从软盘、IDE/USB 闪存盘、iso9660 CD-ROM、小型硬盘等启动而构建的 Linux 系统。无论您是希望将整个根文件系统放在单个介质上(单个分区、单个软盘),还是拥有模块化系统(多个软盘或磁盘分区),过程几乎相同。创建此类 Linux 系统本身不在本 HOWTO 的范围之内 - 有专门的 HOWTO 和指南(例如Bootdisk HOWTO 和 Linux From Scratch - 访问 www.tldp.org 以检索这些文档)。
为了使用 SquashFS 在小型磁盘上创建 Linux 系统,您只需按照创建最小系统的常用步骤进行操作,并在相应的点执行以下操作
在为您的系统开发内核时,请确保您启用 SquashFS 支持,以便它可以挂载 Squash 压缩文件系统使用 mksquashfs 创建只读的初始 ram 磁盘和/或根文件系统和/或其他文件系统不要忘记将文件系统类型设置为/etc/fstabsquashfs
在和/或系统的启动脚本中,用于挂载 Squash 压缩文件系统软盘示例。假设您的软盘系统树在/usr/home/user/floppylinux
bash# cd /home/user bash# mksquashfs floppylinux root.sqsh -e usr bash# mksquashfs floppylinux/usr usr.sqsh |
,并且您想将根文件系统放在一个软盘上,将/usr放在另一个软盘上。您应该做的是
注意 1:您可以在这里看到我们如何使用 -e 选项来排除使用 mksquashfs 创建只读的初始 ram 磁盘和/或根文件系统和/或其他文件系统目录以用于根文件系统的镜像。/etc/fstab注意 2:不要忘记在您的根磁盘的/usr或启动脚本中指定
,在挂载文件系统时。将根磁盘插入您的 3.5 英寸软盘驱动器(我假设您在其上安装了 lilo 或 grub,因此,此软盘上存在文件系统,并且根文件系统将位于此文件系统的
bash# mount /mnt/floppy bash# cp root.sqsh /mnt/floppy/boot |
/boot/usr目录下)完成后,卸载根软盘,将软盘更换为磁盘,并使用 dd 传输
bash# dd if=usr.sqsh of=/dev/fd0 |
文件系统
使用 SquashFS,您可以压缩将在 live CD 中使用的大型文件系统(仅举例)。为此,SquashFS 也与 UnionFS 一起使用。
在目标系统的 Linux 内核中启用 SquashFS/etc/fstab创建一个 Squash 压缩的根文件系统
修改目标系统的或启动脚本,以便在您需要时挂载 Squash 压缩文件系统, 如果您从正在运行的 Linux 系统创建一个根文件系统,请为 mksquashfs 使用 -e 选项来排除所有伪文件系统,例如/proc/sys(在 2.5.x 之后的 linux 内核上)和
(当使用 DevFS 时)。此外,不要忘记添加使用 mksquashfs 创建的文件系统镜像本身(我想您知道这些排除的原因)。
如前所述,SquashFS 的另一个有趣的用途是与 Unionfs 文件系统一起使用,后者为只读文件系统提供写入时复制语义,从而增强了可能性。(对于 unionfs,您可以查看 http://www.filesystems.org/project-unionfs.html)举个例子,您可能想将您的 /home/user 压缩,以压缩和备份您的文件,而不会失去应用更改或写入新文件的可能性。创建ro.fsSquash 压缩文件系统和
bash# mksquashfs /home/user1 ro.fs bash# mkdir /home/rw.fs |
rw.fs
bash# mount -t squashfs ro.fs /mnt -o loop |
目录。使用回环设备挂载 Squash 压缩的 ro.fs 文件系统挂载 unionfs 文件系统,使/mnt和/home/rw.fs表面上合并在
bash# cd /home bash# mount -t unionfs -o dirs=rw.fs=rw:/mnt=ro unionfs user1 |
/home/user1
bash# cd /home/user1 bash# touch file1 bash# ls |
位置下。
bash# cd .. bash# umount /home/user1 bash# umount /mnt bash# ls /home/user1 bash# ls /home/rw.fs |
如您所见,现在您可以在 /home/user1 中创建新文件。卸载 unionfs 和 squashfs 文件系统,并列出 /home/user1 和 /home/rw.fs 目录的内容您可以看到新的/mnt
file1
bash# mksquashfs /home/rw.fs /home/ro.fs |
是在
中创建的。
bash# echo squashfs >> /etc/modules bash# echo unionfs >> /etc/modules |
当您想将新创建的文件添加到稳定和压缩的 Squash 压缩文件系统时,您必须将它们添加到现有的文件系统中。
chown user1 /home/rw.fs |
现在,要在系统启动时挂载您的 Squash 压缩用户主目录,您可以按如下操作
... /home/ro.fs /mnt squashfs loop 0 0 unionfs /home/user1 unionfs dirs=/home/rw.fs=rw:/mnt=ro 0 0 |
上一页 | 使 squashfs 和 unionfs 模块在启动时加载。 | 下一页 |
更改可写分支的所有者以匹配 user1。 | 将这些行添加到 /etc/fstab 文件,以便在启动时挂载 squashfs 和 unionfs。 |