如何查看底层的文件系统路径
本文档介绍如何获取 Kubernetes POD 的底层文件系统路径,包括 Overlay 文件系统的结构和排查方法。
获取 POD 的 Overlay 信息
步骤一:获取 Container ID
使用 K9S 直接查看 POD,获取里面的 Container ID:

步骤二:获取 POD 挂载信息
在 POD 运行的主机上使用 crictl inspect 命令查看容器详情:
crictl inspect 5bb99898f6a2495592ede5a98d2430558f42a1028575f28642e2a4bdd7a1efd4查看挂载路径
在输出结果中查看
mounts部分的hostPath,这就是在磁盘上的实际路径。

步骤三:获取 POD Overlay 文件系统信息
在已知 containerd 的 container-id 的情况下,使用 mount 命令查看对应的挂载:
mount | grep e0e9262e30bed225c554475f5b6bbfb534c874a34306773978b3e93e4df9a21d
输出示例:
overlay on /run/containerd/io.containerd.runtime.v2.task/k8s.io/e0e9262e30bed225c554475f5b6bbfb534c874a34306773978b3e93e4df9a21d/rootfs type overlay (rw,relatime,lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22040/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22039/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22038/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22037/fs,upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56817/fs,workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56817/work)upperdir 的作用
upperdir 就是这个容器最上层的文件系统。错
readonly时,可以到这个目录查看是否有问题。
Overlay 文件系统说明
OverlayFS 概述
OverlayFS 是一种联合文件系统,通过多层结构提供统一的文件系统视图。
核心概念
| 目录类型 | 说明 | 读写权限 |
|---|---|---|
| lowerdir | 底层只读层,可以有多个,按冒号分隔堆叠 | 只读 |
| upperdir | 可写层,挂载在 lowerdir 顶部 | 读写 |
| workdir | 内部工作目录,用于 copy-on-write 机制 | 内部使用 |
详细说明
lowerdir(底层只读层)
- 指向底层只读层的一个或多个目录
- 多个 lowerdir 按冒号分隔,最左边是最低层,最右边是最高层
- 通常对应容器镜像的各个层(snapshots)
- 这些层是只读的
upperdir(可写层)
- 挂载在 lowerdir 顶部的可写层
- 对文件系统的所有写操作都发生在这个目录
- 包含容器运行时对文件系统所做的任何更改
workdir(工作目录)
- OverlayFS 用于内部操作的工作目录
- 用于实现 copy-on-write(写时复制)机制
- 当需要修改文件时,会在此目录创建临时文件,然后复制到 upperdir
- 对用户通常不可见
读写机制
┌─────────────────────────────────────┐
│ 统一视图 (merged) │
├─────────────────────────────────────┤
│ upperdir (可写层) │ ← 写操作发生在这里
├─────────────────────────────────────┤
│ lowerdir N (只读) │
├─────────────────────────────────────┤
│ lowerdir N-1 (只读) │
├─────────────────────────────────────┤
│ ... │
├─────────────────────────────────────┤
│ lowerdir 1 (只读) │ ← 镜像基础层
└─────────────────────────────────────┘
读写规则
- 读取文件:如果 upperdir 中存在该文件,则从 upperdir 读werdir 读取
- 写入文件:使用 copy-on-write 机制,在 upperdir 中创建文件副本,lowerdir 中的原始文件保持不变
- 优势:可以有自己的 upperdir,同时共享底层的 lowerdir,实现高效的存储和资源管理
参考信息
推荐阅读
重学容器 Overlay - 详细介绍 Overlay 文件系统原理
其他信息
查看 snapshot 目录内容示例:
root@master-one:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22037/fs
相关链接
- 如何更新镜像文件 - 镜像更新方法
- K8S调度问题 - 调度问题排查
- Docker/00 Docker配置 - Docker 基础配置
- 01 主流镜像分析工具 - 镜像分析工具介绍
返回: Kubernetes