Overlay2 与 AUFS

二者关系

AUFS 和 Overlay2 都属于 UnionFS(联合文件系统)家族,是两套互相独立的实现,没有继承关系。

- AUFS:早期Docker的存储驱动,不属于Linux主线内核,是第三方补丁文件系统。

- Overlay2:基于Linux主线内核的OverlayFS,Docker给它取名为overlay2驱动,现在Docker默认存储驱动。

> 两者目标一样:把多个目录层合并成一个统一视图;但是内核实现代码完全两套。

✅相同点

1. 都是联合文件系统UnionFS,多层堆叠:下层只读层,上层可写层,对外合并为一个完整目录。

2. 都实现写时复制 CoW:修改只读层里面的文件,不会改动底层,会把文件复制到上层可写层再修改。底层镜像层始终保持只读。

3. 删除文件都不会真正删除底层文件:依靠上层的“屏蔽标记文件(whiteout白文件)”,把底层文件隐藏掉。

4. 都适配Docker镜像分层模型:镜像多层只读,容器运行新增一层可写层;容器销毁,仅销毁上层可写层,镜像层保留。

❌不同点

|对比维度|AUFS|Overlay2(OverlayFS)|

|---|---|---|

|内核归属|第三方补丁,不在Linux主线内核,部分系统需要手动安装补丁|属于**Linux主线内核原生支持**,主流发行版自带,无需打补丁|

|多层只读层实现|原生直接支持多个lower底层目录|overlay2内核原生支持最多128个lower只读层;旧版overlay仅支持1个lower|

|目录结构|`br`分支指定多层,upper为可写层,挂载点为合并视图|4个核心目录:`lowerdir`(多只读层)、`upperdir`(可写)、`workdir`(工作目录)、`merged`(合并视图),**必须要有workdir**|

|白文件命名|`.wh.xxx`白文件屏蔽底层文件|同样使用`.wh.xxx`白文件,规则类似,但内部实现不一样|

|Docker使用历史|Docker最早默认驱动;现在已经淘汰|现代Docker**默认存储驱动**|

|性能|大量层时性能较差|性能更好,开销更小|

|可移植性|很多云服务器、新版本系统不支持AUFS|所有主流Linux内核4.0+都支持,通用性强|

## 关键补充知识点

1. AUFS因为不在主线内核,很多云主机、新版Ubuntu/CentOS已经不提供AUFS模块,所以Docker转向Overlay2。

2. 两者都遵循UnionFS思想,但代码完全独立,不是升级迭代关系。Overlay2不是AUFS的升级版,是另一个方案。

3. 容器删除的时候:AUFS、Overlay2都只会清理上层可写层,底层镜像层不受影响。