温馨提示×

centos overlay与devicemapper区别

小樊
41
2026-09-18 08:19:33
栏目: 智能运维

在 CentOS(以及更早版本的 Docker 默认存储驱动场景)中,overlay 和 devicemapper 都是 Docker 的存储驱动(storage driver),用于管理镜像层和容器层的文件系统。它们的实现原理、性能、稳定性和适用场景有明显区别。

下面从多个维度对比说明。


一、基本概念

1. Overlay(OverlayFS)

  • 基于 Linux 内核的 OverlayFS
  • 联合挂载(union mount)多个目录
  • 镜像层是只读目录,容器层是可写目录
  • 常见形式:
    • overlay(旧)
    • overlay2(推荐,CentOS 7.4+)

2. DeviceMapper

  • 基于 Device Mapper(DM) 内核框架
  • 使用 块设备(block device)
  • 通过精简置备(thin provisioning)管理镜像和容器
  • Docker 中常见模式:
    • loop-lvm(测试,不推荐)
    • direct-lvm(生产)

二、核心区别对比

对比项 Overlay / Overlay2 DeviceMapper
实现方式 文件系统级(联合挂载) 块设备级
内核依赖 OverlayFS(3.18+ 稳定) Device Mapper
性能 ✅ 通常更好 ❌ 相对较慢
稳定性 ✅ 高 ⚠️ loop-lvm 不稳定
配置复杂度 ✅ 简单 ❌ direct-lvm 较复杂
磁盘占用 更高效 易浪费空间
生产推荐 ✅ 强烈推荐 ❌ 不推荐(新系统)
CentOS 默认 CentOS 7.4+ 默认 overlay2 老版本默认 devicemapper

三、工作原理差异

Overlay2

镜像层(只读)
        ↓
容器层(可写)
        ↓
合并视图(容器看到的文件系统)
  • 使用 lowerdir(镜像层)+ upperdir(容器层)
  • 文件修改采用 写时复制(CoW)
  • 直接操作文件,效率高

DeviceMapper

物理磁盘
  ↓
thin pool
  ↓
镜像快照 / 容器快照
  • 每个镜像/容器是一个块设备快照
  • 写操作在块级别进行
  • 元数据开销大

四、在 CentOS 上的实际情况

CentOS 7

  • 早期版本
    • Docker 默认:devicemapper
    • 常见问题:磁盘满、性能差
  • CentOS 7.4+
    • 推荐:overlay2
    • devicemapper 被标记为不推荐

CentOS 8 / Stream

  • 基本不再使用 devicemapper
  • 默认 overlay2
  • devicemapper 已逐步废弃

五、典型问题对比

DeviceMapper 常见问题

  • loop-lvm 模式:
    • 性能极差
    • 容易损坏
  • 磁盘空间莫名耗尽
  • 运维复杂

Overlay2 常见问题

  • 需要:
    • XFS(推荐)
    • ftype=1
  • 配置错误会导致 Docker 无法启动

六、如何选择?

✅ 推荐使用 Overlay2 的场景

  • 新系统
  • 生产环境
  • CentOS 7.4+
  • Kubernetes / Docker 新版本

⚠️ 仍可能遇到 DeviceMapper 的情况

  • 老系统升级
  • 历史 Docker 环境
  • 嵌入式 / 特殊存储需求

七、查看当前存储驱动

docker info | grep -i storage

或

cat /etc/docker/daemon.json

八、一句话总结

Overlay2 是文件系统级、轻量、高性能、现代 Docker 的首选;
DeviceMapper 是块设备级、复杂、老旧的方案,在新 CentOS 上已基本被淘汰。

如果你愿意,我可以:

  • 帮你检查当前系统用的是什么驱动
  • 教你如何从 devicemapper 迁移到 overlay2
  • 对比 overlay2 和 btrfs / zfs

0 踩