AUFS
AUFS 是一种 Union File System,Union File System 就是把不同物理位置的目录合并 mount 到同一个目录中。比如可以把一张 CD/DVD 和一个硬盘目录给联合 mount 在一起,然后就可以对只读的 CD/DVD 上的文件进行修改,当然修改的文件是存于硬盘上的目录里。
AUFS 一开始叫 Another UnionFS,后来又叫 Alternative UnionFS,最后直接改为 Advance UnionFS。它是对 Linux 原生 UnionFS 的重写和改进。但是无论怎么改,它就是进不了 Linux 的主线。但是,我们可以在 Ubuntu 和 Debian 这些发行版上使用它。
AUFS 示例
那么 AUFS 的效果到底是怎么样的呢?下面根据耗子叔博客中的例子来演示一下。
首先我们建立两个目录
./fruits
和./vegetables
,并在目录中放入一些文件。之后我们以 AUFS 的方式将这两个目录同时 mount 到
./mnt
目录中。我们可以看到./mnt
目录下有三个文件:apple、carrots、tomato,相当于./fruits
和./vegetables
这两个目录被 union 到了./mnt
目录。mount -t aufs -o dirs=./fruits:./vegetables none ./mnt/
接下去我们修改
./mnt/apple
这个文件的内容,可以看到./fruits/apple
的内容也被修改了。再接下去我们修改
./mnt/carrots
这个文件的内容,但是我们可以看到./vegetables/carrots
文件的内容并没有改变,反而是./fruits
目录中多出了 carrots 文件,这个内容跟我们修改的内容是一样。这个主要是因为在 mount aufs 命令中,我们并没有指定 fruits 和 vegetables 的目录权限。那么,默认上来说,命令行第一个(最左边)的目录是可读可写的,后面的都是可读的。
假设修改一开始的 mount aufs 命令如下,那么上述修改
./mnt/carrots
文件时,./vegetables/carrots
这个文件才会被改变。mount -t aufs -o dirs=./fruits=rw:./vegetables=rw none ./mnt
假如我上面的两个目录都配置为可读可写,那修改
./mnt/tomato
这个文件的内容,影响到的其实是./fruits
这个目录下的。可见如果有重复的文件名,在 mount 命令中,越前面的目录中的文件的优先级就越高,也就是会被先改。
AUFS 特性
上述只阐述了简单的例子。实际上,AUFS 有所有 UnionFS 的特性,它可以把多个目录合并成同一个目录;并且为每个需要合并的目录指定相应的权限;实时地添加、删除、修改已经被 mount 好的目录;还能在多个可写的目录(分支)间实现负载均衡。
AUFS 中称要被 union 进来的目录为 Branch(也就是使用 mount 命令时 dirs 参数指定的目录),Branch 会根据 union 的顺序形成一个 stack,一般最上面的是可写的,下面是只读的。Branch stack 还是可以进行修改,比如修改顺序,加入新的 branch,或者删除其中的 branch,或者直接修改 branch 的权限。
AUFS 中被 Union 的目录(分支)有以下这些权限:
rw 表示可读可