跑调的毕加索
发布于

linux的联合文件系统 OverlayFs

概念

Linux 的 OverlayFs 是一种联合文件系统(union filesystem),允许你将多个文件系统堆叠组合在一起。它通常用于容器和轻量级虚拟技术,比如 Docker,来实现可写的容器文件系统,且不会更改底层只读层。它非常适合基于镜像创建可写的文件系统而不复制整个系统。

OverlayFs 的关键概念

OverlayFs 通过合并多个目录(层)来实现文件系统的叠加。它通常包括两个主要部分:

  1. Lower Layer(下层):这个只读层,通常包含系统的基础文件,比如一个操作系统的镜像。
  2. Upper Layer(上层):这个是可写层,用户对文件系统的修改会记录在这一层,但它只会保存更改部分,不会复制整个下层的内容。
  3. Mergerd Layer(合并层):这是用户看到的最终文件系统,结合了上层和下层。下层提供了基础文件,所有的写操作发生在上层,但用户感知到是一个整体的文件系统。

OverlayFs 的典型工作流程

读取操作:

  • 如果文件存在于上层,OverlayFS 会直接从上层读取。
  • 如果文件不存在于上层,会从下层读取。

写入操作:

  • 当用户修改一个存在于下层的文件时,OverlayFS 会首先将这个文件复制到上层(称为 "写时复制"),然后对上层的副本进行修改。下层文件仍然保持不变。

删除操作:

  • 当用户删除一个存在于下层的文件时,OverlayFS 并不会真正删除下层的文件。相反,它会在上层记录一个 "白名单"(whiteout),来表示这个文件在合并层中已被删除。

OverlayFS 的挂载

挂载 OverlayFS 需要指定上层、下层以及合并层。这里是如何通过命令行挂载 OverlayFS 的步骤。

  1. 创建目录结构
  • lower 是只读的下层。
  • upper 是可写的上层。
  • workdir 是一个必须的工作目录,用于存储元数据。
  • merged 是合并层,用户会从这个层看到最终的文件系统。
    例如:
    mkdir -p /mnt/lower /mnt/upper /mnt/workdir /mnt/merged

2.挂载 OverlayFs
mount -t overlay overlay -o lowerdir=/mnt/lower,upperdir=/mnt/upper,workdir=/mnt/workdir /mnt/merged

  • lowerdir=/mnt/lower:下层目录。
  • upperdir=/mnt/upper:上层目录,必须是可写的。
  • workdir=/mnt/workdir:工作目录,必须和上层目录位于同一个文件系统中。
  • /mnt/merged:挂载点,用户最终会通过这个目录访问合并的文件系统。

3.查看挂载结果

  • ls /mnt/merged

举例:

查看 OverlayFS 挂载
root@TinaLinux:/usr/inonegui# mount | grep overlay
overlayfs:/mnt/UDISK/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/mnt/UDISK/overlay/upper,workdir=/mnt/UDISK/overlay/workdir)

简单来说,我修改根目录 / 里的任何文件,表面是看似是下层,但是因为根目录被挂载到 overlayfs 系统,有写时复制机制,所以,其实修改的是上层,记录在上层中(upper),系统数据读的也是上层,但是其实 根目录下的文件没有被修改。如果把上层数据都删除了,数据就会都从下层读取,这时就是系统的原始数据,等于数据格式化,系统复原了。

浏览 (201) 点赞 (1) 收藏 分享
评论