OverlayFS
ssk-wh Lv4

OverlayFS(Overlay Filesystem)是一种联合文件系统,允许将一个或多个文件系统层叠合并为一个单一的文件系统视图。它最常用于容器技术(如Docker)和其他需要高效文件系统管理的场景。以下是OverlayFS的基本概念、工作原理、以及常见的使用场景。

基本概念

OverlayFS有三个主要的目录概念:

  • Lower Directory(下层目录):这是底层的只读文件系统。

  • Upper Directory(上层目录):这是上层的可写文件系统。

  • Work Directory(工作目录):这是一个用于支持上层目录操作的工作目录。

OverlayFS通过将上层目录和下层目录合并,提供一个统一的视图给用户。在这个视图中,上层目录的文件会覆盖下层目录中的文件。

工作原理

当你挂载OverlayFS时,你指定一个下层目录(lowerdir)、一个上层目录(upperdir)和一个工作目录(workdir)。合并后的结果会展示在一个挂载点(merged)上。
以下是一些操作如何在OverlayFS中处理:

  • 读取文件:如果文件存在于上层目录,则读取上层目录的文件;如果不存在,则读取下层目录的文件。
  • 写入文件:写入操作始终发生在上层目录。如果文件在下层目录中存在,写入操作会在上层目录中创建一个文件副本并进行修改。
  • 删除文件:删除操作在上层目录中创建一个白化文件(whiteout file),从而在合并视图中隐藏下层目录的文件。

使用示例

假设你有以下目录结构:

  • lowerdir:下层只读目录。
  • upperdir:上层可写目录。
  • workdir:工作目录。
  • merged:合并后的挂载点。

挂载OverlayFS

创建目录

1
mkdir -p lowerdir upperdir workdir merged

挂载OverlayFS

1
2

sudo mount -t overlay overlay -o lowerdir=lowerdir,upperdir=upperdir,workdir=workdir merged

验证挂载
你可以通过以下命令查看挂载的结果:

1
ls merged

操作示例

读取文件

如果 lowerdir 包含 file1,但 upperdir 不包含,那么 file1 可以在 merged 中读取。

1
2
3
echo "This is a file in lowerdir" > lowerdir/file1
cat merged/file1
# 输出: This is a file in lowerdir

写入文件

如果你在 merged 中写入文件,文件会出现在 upperdir 中。

1
2
3
echo "This is a new file in merged" > merged/file2
cat upperdir/file2
# 输出: This is a new file in merged

修改文件

如果你修改 merged 中存在于 lowerdir 的文件,修改后的副本会保存在 upperdir 中。

1
2
3
4
5
echo "This is a modified file in merged" > merged/file1
cat upperdir/file1
# 输出: This is a modified file in merged
cat lowerdir/file1
# 输出: This is a file in lowerdir

删除文件

删除操作在上层目录中创建一个白化文件,从而在合并视图中隐藏下层目录的文件。

1
2
3
4
5
rm merged/file1
ls merged
# `file1` 不再存在
ls upperdir
# 输出: file1 (白化文件)

取消挂载

1
2
3
4
5
# 查看挂载信息(确认挂载点)
sudo mount | grep merged

# 取消挂载
sudo umount merged

常见使用场景

  • 容器技术:Docker等容器技术广泛使用OverlayFS来管理镜像层和容器层,使得镜像可以共享底层文件而不重复存储。
  • 开发和测试:开发人员可以使用OverlayFS创建临时的文件系统视图进行测试,而不影响原有文件系统。
  • 系统升级和恢复:系统管理员可以使用OverlayFS进行系统升级测试,确保系统稳定后再进行实际的升级操作。

OverlayFS提供了一种高效且灵活的文件系统管理方式,适用于多种需要层叠文件系统视图的应用场景。

 Comments
Comment plugin failed to load
Loading comment plugin