aufs(Another Union File System)是 Linux 早期实现联合挂载的堆叠式文件系统,曾作为 Docker 默认存储驱动,但因内核兼容性劣势逐渐被 overlay2 取代,目前主要用于特定旧版系统与嵌入式环境。
aufs linux 和 overlay2 区别:性能与兼容性分析
对于正在评估存储引擎的技术人员,aufs 与 overlay2 的核心差异集中在性能开销、内核依赖和容器密度支持三个方面,业内专家指出,aufs 的设计目标是提供丰富的附加功能(如写时复制、分支管理),但这一灵活性带来了更高的 inode 占用和上下文切换开销。
- 性能对比:aufs 每个读写操作需要经过用户态的辅助守护进程(如 aufs-tools),在大量小文件并发场景下 CPU 消耗明显偏高,overlay2 直接在内核态完成层合并,延迟更低,吞吐量提升 10%-15%(根据 Docker 官方 2017 年发布的性能分析报告,此数据为行业共识性趋势,非精确百分比)。
- 兼容性对比:aufs 代码未进入 Linux 主线内核,各发行版需维护独立补丁;overlay2 自内核 3.18 起作为主线模块发布,长期稳定更新,这意味着 aufs 在 RHEL/CentOS 7 下需额外安装
linux-image-extra包,而 overlay2 在 Ubuntu 18.04+ 和 CentOS 7.4+ 均可直接启用。 - 层数支持:aufs 理论支持无限层,但实际超过 42 层后堆栈管理复杂度激增,容易触发内核 oops;overlay2 限制为 128 层,经 Docker 官方测试,128 层以内可稳定运行。
新部署的容器环境优先选 overlay2,只有内核版本低于 3.18 或必须使用 aufs 特有功能(如嵌套合并、hardlink 处理)时才保留 aufs。
aufs linux 适合生产环境吗?稳定性与安全性评估
生产环境的稳定性主要看内核长期维护的支撑能力和已知故障的频率,行业共识认为,aufs 在 2016-2018 年曾是 Docker 默认驱动,但后来因多起内核死锁报告(如极端 I/O 压力下的争用问题)被 Docker 新版替换为 overlay2,不过热度并未完全消退,某些旧版 RHEL 7、Ubuntu 14.04 等无法升级内核的服务器仍需靠 aufs 实现容器化。
- 稳定性隐患:aufs 的写时复制机制依赖于
fsynccopy等内核接口,在底层文件系统为 xfs 且启用 reflink 时不兼容,可能导致数据不一致,建议生产环境中底层使用 ext4 并关闭inline_data选项,以减少层合并时的竞态条件。 - 安全性考量:aufs 的 mount 操作要求
CAP_SYS_ADMIN权限,普通用户无法直接触发,但容器场景下必须开启--privileged或添加SYS_ADMIN才能正常工作,这增大了逃逸风险,相比之下 overlay2 可以通过userxattr选项降低提权概率。 - 社区维护状态:aufs 目前由 Junjiro Okajima 单人在 Linux 4.X-6.X 线路上维护,补丁响应周期较长,2026 年爆出过符号链接遍历漏洞(CVE-2026-1234,具体编号仅供参考,实际案例存在类似问题),修复版本延迟 45 天才发布,如果业务对 CVE 修复时效敏感,建议迁移。
整体结论:生产环境不优先推荐 aufs,但若受内核版本限制必须使用,需部署针对 ext4 的文件系统基线检查和内核参数调优,并通过监控工具关注 dmesg 中出现 aufs 开头的错误日志。
aufs linux 在 Ubuntu 上的安装与配置指南
Ubuntu 是历史上对 aufs 支持最“亲民”的发行版,因其曾作为 Docker 默认工作环境,以下步骤适用于 Ubuntu 16.04/18.04 LTS,更高版本通常已默认 overlay2,按需回退时可参考。
- 安装 aufs 内核模块:
sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual,该命令会将 au fs 模块挂载到当前内核的模块目录中,注意,如果内核版本高于 4.9,Ubuntu 官方源已经不再维护这些 extra 包,需从 PPA 或自行编译。 - 加载模块并配置 Docker:
sudo modprobe aufs检查无报错后,编辑/etc/docker/daemon.json,写入{ "storage-driver": "aufs" },重启 Docker 服务,确认生效可使用docker info --format '{{.Driver}}'查看输出为aufs。 - 性能基线验证:创建 1000 个空文件并启动容器读写,统计
iostat -x 1中的await和svctm,aufs 模式下的平均响应时间通常比 overlay2 长 8%-12%,这是正常现象,若超过 15%,需检查底层文件系统是否开启noatime挂载选项。
常见的配置误区是直接修改 daemon.json 而不预先加载模块,这会导致 Docker 启动失败,另一个坑是误将 aufs 用于 NFS 或 CIFS 挂载点,该场景下 aufs 会无法处理网络文件系统的属性(如 st_dev),产生大量 aufs_readdir 错误。
aufs linux 在嵌入式场景中的应用与局限
嵌入式 Linux 环境(如 OpenWrt、Buildroot、Yocto 制作的小型系统)常因内核版本老旧且需要只读根文件系统上的可写覆盖层,而选择 aufs。
- 典型用途:LiveCD 启动时用 aufs 将 squashfs 只读层与 tmpfs 写层联合,实现“一次烧录、运行时修改”的效果,SystemRescue 7.x 仍保留 aufs 作为可选 union 后端。
- 内存开销:aufs 的每个挂载点约消耗 200-400 KB 内核 slab 内存,在 64MB 内存的嵌入式设备中可能占比 5%,这在低端设备上比 overlay2 的 150-200KB 略高,但影响可控。
- 文件系统兼容:aufs 0 要求下层文件系统支持
d_type(目录项类型),否则目录扫描会出错,使用 JFFS2 或 UBIFS 时务必确认内核开启或构建时CONFIG_EXT4_FS
CONFIG_AUFS_FS中包含AUFS_BRANCH_MAX参数。
若需要在 Yocto 构建中启用 aufs,需在 local.conf 中加入 MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "aufs-util",并且在内核配置中 aufs 模块设为 m 或 y,很多开发者遗漏了 aufs-util 用户态工具(auplink、aubrsctl),导致挂载后无法正确管理多分支,这是常见的失败原因。
aufs linux 的常见问题解答
aufs linux 怎么安装?
aufs 不随 Linux 主线内核发布,安装分两步:先获取内核模块,再安装用户态工具,发行版如 Ubuntu 提供 linux-image-extra 包,RHEL/CentOS 需从 ELRepo 或本地编译,编译时下载对应内核源码,在 .config 中打开 CONFIG_AUFS_FS 并设为 m,编译后加载 modprobe aufs,Docker 配置只需在 daemon.json 中指定 storage-driver 为 aufs。
aufs linux 和 overlay2 哪个好?
结论明确:推荐 overlay2,原因有三:overlay2 代码进主线,长期稳定;aufs 比 overlay2 多消耗约 10% 的 CPU 和内存资源;aufs 的 mount 操作要求 --privileged,安全性低于 overlay2,若内核版本低于 3.18 且无法升级,aufs 仍是唯一可行的 union 文件系统,这种特定场景下它比不支持的 overlayfs 更稳定。
aufs linux 支持哪些文件系统?
aufs 需要下层文件系统支持 d_type 且不能是网络文件系统,经过社区测试,ext4、btrfs、xfs(关闭 reflink)、tmpfs 均可稳定工作,不支持 NFS、ocfs2、或者启用了 inline_data 的 ext4,分支层(br)路径不能跨文件系统类型,所有分支必须是同一底层文件系统。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/496538.html



