在 Linux 下调试 OverlayFS(overlay) 通常涉及内核参数、挂载选项、工具排查以及常见故障定位。下面按「原理 → 调试方法 → 常见坑 → 工具」系统讲一下。
Overlay 挂载通常包含:
lowerdir:只读层(可多个,用 : 分隔)upperdir:可读写层workdir:工作目录(必须和 upperdir 同文件系统)merged:最终挂载点示例:
mount -t overlay overlay \
-o lowerdir=/lower,upperdir=/upper,workdir=/work \
/merged
OverlayFS 使用内核 dynamic debug:
# 查看是否支持
cat /sys/kernel/debug/dynamic_debug/control | grep overlay
# 开启 overlay 所有调试
echo "file fs/overlayfs/* +p" > /sys/kernel/debug/dynamic_debug/control
查看日志:
dmesg -T | tail
journalctl -k -f
关闭:
echo "file fs/overlayfs/* -p" > /sys/kernel/debug/dynamic_debug/control
某些内核支持:
mount -t overlay overlay -o lowerdir=...,upperdir=...,workdir=...,verbose /mnt
mount | grep overlay
cat /proc/mounts | grep overlay
确认:
Overlay 行为:
whiteout(字符设备 0,0)→ 文件被删除调试:
ls -l /upper
# 查看 whiteout
find /upper -type c
第一次写文件会触发 copy-up:
strace -e trace=file touch /merged/test
常见问题:
Overlay 依赖 xattr:
getfattr -d /upper/file
关闭 xattr(不推荐):
-o userxattr
SELinux:
dmesg | grep avc
setenforce 0 # 临时验证
Docker 使用 overlay2:
docker info | grep Storage
调试容器层:
ls /var/lib/docker/overlay2
cat /var/lib/docker/overlay2/*/lower
容器层未更新:
overlayfs-tools(社区工具)可分析 overlay 层关系:
git clone https://github.com/iawia002/overlayfs-tools
findmntfindmnt -t overlay
stracestrace -f -e trace=file mount -t overlay ...
| 现象 | 原因 |
|---|---|
workdir and upperdir must be same fs |
work/upper 不同分区 |
No such device |
内核未开 CONFIG_OVERLAY_FS |
| 文件删了还在 | whiteout 未生效 |
| lower 修改不生效 | overlay 设计如此 |
| 写性能差 | 频繁 copy-up |
zcat /proc/config.gz | grep OVERLAY
需要:
CONFIG_OVERLAY_FS=y
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
如果你有具体场景(Docker、容器、自建 rootfs、嵌入式、initramfs),我可以给你更针对性的调试步骤。