AuFS(另一个联合文件系统)允许我们将两棵树合并成一棵,即使那些树重叠。 然后,我们可以直接写入合并树中的一个分支并读取到另一个分支。
这样做的经典用法是使用闪存文件系统和内存盘(ram disk),像这样 (参考文献1)创build一个不会中断Linux的只读根文件系统。 所有的文件写入内存。 系统重新启动后,系统会自行恢复到出厂configuration。
/dir1 =只读 /dir2 =读/写 /aufs = /dir1和/dir2合并 /aufs然后重新安装与 – --move使/ (根)
简单来说,(参考文献1)中的例子就是这样做的
mount -t aufs br=/dir2:/dir1 /aufs mount --move /aufs /
不过,我想用它来使可写( /dir2 )在真实磁盘上,而不是虚拟磁盘。 这样重新启动后,它将保留它的数据。
但是我需要确保dir2中的某些文件不被保留,并且被恢复到( /dir1 )的默认值。 这确保将来的引导程序始终使用发货文件。 没有丢失用户和日志数据。
例如/etc , /bin , /boot , /usr更改的文件不应该在重新启动后存活。
AUFS网页 (参考文献2)有很less的例子。
所以对于这个问题:使用AuFS做到这一点的正确方法是什么?
我可以想到以下几点:
/dir2保存的树 tmpfs部分树( etc, bin, boot, lib, etc ) 参考1: https : //help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
参考2: http : //aufs.sourceforge.net/aufs.html
选项#1 : auFS自己不支持这样的挂载选项,所以选项#1已经死了。 你必须解决这个问题。
选项3 :当然,你可以在每次启动时简单地删除这些目录。 这可能是我在这里看到的最简单的方法。
选项2 :你可以使用tmpfs 。 所以首先创build一个tmpfs ,比方说大小为500 MB:
mount -t tmpfs -o rw,size=500M tmpfs /tmpfs
我们现在有:
/dir1 :只读 /dir2 :读/写 /tmpfs :在RAM中读/写 /aufs : /dir1和/dir2的叠加 在/tmpfs里面,我们创build你想要保留的dirs:
mkdir -p /tmpfs/{etc,usr,boot,bin}
注意,当我们已经合并了两个dir时,我们就这么做了。 所以当/aufs的目录树已经存在时。 但是,现在我们为每个应该保留的目录安装一个aufs挂载:
mount -t aufs -o dirs=/tmpfs/etc=rw:/dir2/etc=ro none /aufs/etc mount -t aufs -o dirs=/tmpfs/usr=rw:/dir2/usr=ro none /aufs/usr mount -t aufs -o dirs=/tmpfs/boot=rw:/dir2/boot=ro none /aufs/boot mount -t aufs -o dirs=/tmpfs/bin=rw:/dir2/bin=ro none /aufs/bin
你现在在/aufs目录树中,你可以在任何地方写文件,但是当你写入/etc ,它将被写入/tmpfs/etc ,这是在RAM中,因此在重新启动后不能存活。 /home其他文件例如被写入/dir2/home ,这是一个可读写的文件系统,因此在重新启动后仍然存在。
另一个解决scheme :我也使用客户端系统,使用覆盖文件系统和保存的用户数据。 下面是我如何解决它:简单地只读文件系统和安装在它上面的tmpfs。 后来当用户login时,我从一个可读写的samba服务器挂载他的主目录。 因此,他所有的用户数据都被存储并保存在/home ,其余的不会在重新启动后存活。 在你的情况下,你可以把/home放入另一个可读写的物理分区,然后挂载到/aufs/home 。