温馨提示×

怎么制作debian overlay

小樊
46
2026-09-25 20:03:05
栏目: 智能运维

在 Debian(以及一般的 Linux)里,“制作 overlay”通常指 OverlayFS(overlay filesystem) 的使用:把多个目录“叠加”成一个统一视图,常用于 Live CD、容器、系统定制、只读根文件系统 + 可写层等场景。

下面从 原理 → 手动制作 → 实际示例 → 启动集成 逐步说明。


一、OverlayFS 基本原理

OverlayFS 需要 4 个目录:

lowerdir  : 只读层(基础系统)
upperdir  : 可写层(修改内容)
workdir   : 工作目录(内部使用,必须为空)
merged    : 最终挂载点(你看到的结果)

关系:

merged = lowerdir + upperdir(upperdir 优先)

二、手动制作 Debian overlay(示例)

1. 准备目录

mkdir -p /mnt/lower /mnt/upper /mnt/work /mnt/merged

假设:

  • /mnt/lower 是 Debian 根文件系统(可以是真实系统或解压的 rootfs)
  • /mnt/upper 是你以后修改的内容

2. 填充 lowerdir(示例)

debootstrap bookworm /mnt/lower

或复制已有系统:

rsync -aH / /mnt/lower --exclude=/mnt --exclude=/proc --exclude=/sys

3. 挂载 overlay

mount -t overlay overlay \
  -o lowerdir=/mnt/lower,upperdir=/mnt/upper,workdir=/mnt/work \
  /mnt/merged

查看:

ls /mnt/merged

此时:

  • 修改 /mnt/merged 的文件 → 实际写入 /mnt/upper
  • /mnt/lower 永远不变

三、在 overlay 中 chroot(常用)

mount -t proc proc /mnt/merged/proc
mount -t sysfs sys /mnt/merged/sys
mount -o bind /dev /mnt/merged/dev

chroot /mnt/merged

完成后退出并卸载:

umount /mnt/merged/proc
umount /mnt/merged/sys
umount /mnt/merged/dev
umount /mnt/merged

四、Debian 启动时使用 overlay(实战)

常用于:

  • 工业设备
  • 公共电脑
  • Live 系统

1. initramfs 方式(推荐)

Debian 自带支持(需要 overlayroot 或手写 initramfs hook)

安装工具(简单方案)

apt install overlayroot

编辑:

nano /etc/overlayroot.conf

示例:

overlayroot="tmpfs"

更新 initramfs:

update-initramfs -u

重启后:

  • 根文件系统是 overlay
  • 所有修改重启后消失(或写入指定设备)

2. 手动启动参数方式(高级)

GRUB 内核参数示例:

root=/dev/sda1
overlayroot=tmpfs

或自定义 init script 中:

mount -t overlay overlay \
  -o lowerdir=/rootfs,upperdir=/rw/upper,workdir=/rw/work \
  /merged

五、典型使用场景

场景 说明
Live CD ISO 只读 + 内存可写
容器 overlay 是 Docker 默认存储驱动
系统保护 防止误操作破坏系统
系统定制 基础系统 + 不同配置层

六、注意事项(很重要)

  1. workdir 必须和 upperdir 同文件系统
  2. overlay 不支持所有文件锁语义
  3. 删除文件 = 在 upper 创建 whiteout
  4. lower 修改会导致不一致(不要动)

七、如果你说的是别的“overlay”

如果你指的是:

  • Docker overlay 网络
  • Kubernetes overlay
  • Debian 软件包 overlay
  • APT overlay 仓库

可以告诉我具体场景,我可以给你更针对性的方案。


如果你愿意,可以告诉我: ✅ 是想做 Live 系统 / 容器 / 根目录保护 / 定制镜像 哪一种?
我可以直接给你 完整可运行脚本。

0 踩