如何构建只读压缩模块化文件系统

如何构建只读压缩模块化文件系统

我正在设计一个 Linux 发行版,并且正在考虑创建文件系统的预打包压缩位,这些文件系统与只读文件系统合并,并通过 UnionFS 安装点堆叠在 ramdisk 下。从某种意义上说,这些位就像包,只不过它们不是被安装,而是作为 RAM 中文件系统的一部分安装并被读取直接地从只读磁盘(与复制到内存中)。

我想知道如何在不创建大量挂载点、将不必要的内容复制到 RAM 或通过堆叠一大堆微小文件系统来创建大量开销的情况下完成此操作。

...或者如果有可能的话。

我在用着UnionFS-FUSE克洛普

答案1

正如建议的,您可以结合使用 squashfs(用于压缩)和 AUFS(将文件系统层堆叠和合并在一起)。其中 AUFS 代表另一个联合文件系统。但它是如何实现的呢?我在这里提供一个简单的示例脚本来实现squashfs/aufs...

但首先,我发现 Debian 内核支持 aufs,但 Ubuntu 不支持 :-( 因此,只要您的发行版是基于 Debian 的,我们就可以继续安装一些基本工具,从而

apt-get install squashfs-tools aufs-tools

现在是命令。 mksquashfs 命令用于将目录压缩为压缩模块。此处创建并安装了两个 squashfs 模块以使其文件可访问。然后我们创建一个 aufs,具有一个可写分支和两个只读分支(即,squashfs)。提供给 mount 命令的选项指定分支(请参阅 man aufs)。最后,我们创建一个文件,以测试文件更改是否确实写入可写层。

所以我希望这会有所帮助。

#!/bin/bash 

# apt-get install squashfs-tools aufs-tools

# The aim:- to create an aufs/squashfs that merges the file contents of /etc and /sbin 

mkdir -p temp/{ro1,ro2,changes-dir,aufs-dir}  &&  cd temp

# compress the files of etc and sbin into squashfs modules
# using /etc and /sbin only becos they are handy
mksquashfs /etc  etc.sqsh -b 65536
mksquashfs /sbin  sbin.sqsh -b 65536

# now mount the squashfs modules to make their files accessible
mount -o ro,loop etc.sqsh ro1
mount -o ro,loop sbin.sqsh ro2

# AUFS is the acronym for Another Union FileSystem
# mount aufs with 3 branches -  a writable branch, and two readonly branchs
mount -t aufs -o br:$PWD/changes-dir=rw,br:$PWD/ro1=ro,br:$PWD/ro2=ro none $PWD/aufs-dir

cd aufs-dir
echo " make some file changes here, to prove the aufs filesystem is writable"
touch rofl
cd -

umount aufs-dir
umount ro1
umount ro2

# and finally we look into changes-dir, to see the stored file changes 
ls changes-dir

答案2

你绝对应该尝试奥夫斯,被描述为“完全重新设计和重新实现的 Unionfs”。据我所知,很多“活着”发行版使用它对于多部分内存文件系统,正如您的目标一样。

相关内容