Linux-笔记 OverlayFS文件系统入门

目录

前言

主要概念

工作原理

特点特性

1、上下合并

2、同名文件覆盖

3、同名目录合并

4、写时拷贝

实操入门

内核配置

挂载文件系统

验证

1、同名文件覆盖

2、同名目录合并

3、写时拷贝

1)验证新增文件或目录

2)验证修改文件

3)验证删除文件

总结


前言

OverlayFS 是一种联合文件系统,主要用于将多个文件系统的内容合并呈现给用户。在 Linux 系统中,它经常用于容器技术,比如 Docker 和 Kubernetes,以实现文件系统的层叠。OverlayFS 通过将一个文件系统层"覆盖"在另一个文件系统层之上,使得两个文件系统看起来像是一个统一的文件系统。

主要概念

  • Lowerdir:下层目录,包含了只读数据。
  • Upperdir:上层目录,包含了可写数据。
  • Workdir:工作目录,用于存储临时文件和中间数据。
  • Merged View:合并视图,用户看到的最终文件系统视图。

工作原理

OverlayFS 通过合并下层目录和上层目录来创建一个虚拟的合并视图。当用户对文件进行读操作时,文件系统会优先从上层目录查找文件,如果上层目录没有该文件,则从下层目录查找。对于写操作,OverlayFS 会在上层目录进行操作,并且不会修改下层目录。这种机制确保了下层目录的只读性。

特点特性

1、上下合并

OverlayFS 的核心功能之一是将多个目录(通常是一个只读层和一个可写层)合并成一个单一的虚拟文件系统视图。这种合并方式允许用户同时访问和操作多个层中的文件,而不需要手动切换或复制文件内容。

这里说的上下合并就是指最终会将lowerdir层的可读文件与upperdir层的可写文件合并到merged层,具体的合并规则稍后介绍。

2、同名文件覆盖

当上下层目录中存在同名文件时,OverlayFS 会优先显示上层目录(upperdir)中的文件,隐藏下层目录(lowerdir)中的同名文件。这种机制允许用户在不修改基础层的情况下对文件进行更新或替换。

这里说的同名覆盖是指,假设lowerdir层有一个文件叫hello.txt,upperdir层也有一个文件叫hello.txt,那最终在merged层看到的将会是upperdir层的hello.txt文件。

3、同名目录合并

当下层目录(lowerdir)和上层目录(upperdir)都有一个同名的子目录时,OverlayFS 会将这两个目录的内容合并在一起显示给用户,用户在合并视图中看到的是两个目录的综合内容。

如果合并的两个目录中存在同名文件,则优先显示上层目录(upperdir)中的文件,而隐藏下层目录(lowerdir)中的同名文件,这就是上面介绍的同名文件覆盖的机制。

4、写时拷贝

当对合并视图中的文件进行写操作时,OverlayFS 会将下层目录中的只读文件复制到上层目录,并在上层目录中进行修改。这种写时拷贝机制确保了下层目录的只读性不受影响,同时提供了对文件的写访问能力。

这里是指假设用户修改了merged层的文件file.txt,如果该文件只存在于lowerdir层,则文件会被复制到upperdir层,然后在upperdir层中进行修改,而lowerdir层中的文件则原封不动,所有的修改只发生在upperdir中的副本上。

实操入门

开发平台:T113

SDK:Tina 5.0

内核配置
挂载文件系统

1、检查系统是否支持OverlayFS

grep overlay /proc/filesystems

2、创建必要目录

mkdir /lower /upper /work /merged
·/lower   指定lowerdir
·/upper   指定upperdir
·/work    指定work目录
·/merged  指定挂载点(合并点)

3、创建测试文件

这里的思路是分别在上层与下层各创建两个文件,其中有一个文件名一样,但内容不一样,挂载后就可以验证同名文件覆盖了。

1)upper层

//upper层
cd /upper
echo "this upper first file" >> file_a.txt
echo "this upper second file" >> file_b.txt

2)lower层

//lower层
cd /lower
echo "this lower first file" >> file_b.txt
echo "this lower second file" >> file_c.txt

4、挂载文件系统,挂载后可通过命令df -h 查看是否挂在成功,可以看到overlay挂载在根目录下的merged目录。

mount -t overlay overlay -o lowerdir=/lower,upperdir=/upper,workdir=/work /merged
· -t 指定挂载的文件系统,这里指定overlay
· -o 指定挂载选项
· lowerdir=/lower 指定lower层为根目录下的lower目录
· upperdir=/upper 指定upper层为根目录下的upper目录
· workdir=/work   指定work为根目录下的work目录
· /merged         指定挂载到根目录下的merged目录,其实就是合并层

​​​​

​​​​​​

验证

注:一切的操作都只在挂载点操作(本文章内的挂载点为/merged),这是为了防止出现不可预知的结果,本身挂载以后也不允许在lowerdir中去操作,因为它是只读的,至于upperdir,还需要考证。

1、同名文件覆盖

挂载后查看 /merged目录情况,发现有三个文件file_a\b\c,查看内容,可知确实发生了同名文件覆盖,因为file_b.txt内容为 "this upper second file",并非 "this lower first file",也就说这个文件是upper层的file_b.txt文件,覆盖掉了lower层的。

2、同名目录合并

分别在upper层和lower层创建一个新目录test,然后将upper目录、lower目录先前创建的文件都拷贝到新建的test目录中去。

然后进入 /merged目录查看,可发现里面有一个test目录,这是同名目录合并的结果,然后我们进入test目录查看,发现里面有三个文件,查看文件内容,根据文件内容,我们可以发现,同名目录合并过程中,如果目录内有同名文件,也会遵循同名文件覆盖的机制。

​​​​​​​ ​​​​​​​

3、写时拷贝
1)验证新增文件或目录

在merged层新建文件hello.txt,内容为 "hello world",然后去往upperdir与lowerdir查看是否有出现hello.txt,通过结果我们可知,在合并层新建文件只会在upperdir中出现,而不会影响lowerdir。

cd  /merged 
echo "hello world" > hello.txt

​​​​​​​

在merged层新建目录hello,然后去往upperdir与lowerdir查看是否有出现hello目录,通过结果我们可知,在合并层新建目录只会在upperdir中出现,而不会影响lowerdir。

2)验证修改文件

这里还要分文件是只存在于upperdir还是只存在于lowerdir,还是同时存在两者呢,我们分别验证。

2.1)首先我们先往只存在于upperdir中的file_a.txt中新增信息,然后去upperdir中查看是否新增了信息。通过结果可知修改只存在于upperdir中的文件时只会同步到upperdir中去。

cd /merged
echo "add str" >> file_a.txt

2.2)然后我们修改只存在于lowerdir中文件,看看结果如何。lowerdir中有一个只存在于lowerdir中的文件file_c.txt,同样新增信息,通过截图我们可得知,当我们修改只存在于lowerdir中的文件时,会将其拷贝到upperdir中并修改(可看到upper目录中出现了只在lowerdir中出现的file_c.txt),而lowerdir中并不会做任何改变。

​​​​​​​

2.3)修改同时存于lowerdir与upperdir中的文件,看看结果如何,通过结果我们可知,也是只会同步到upperdir中,而不会改变lowerdir中的文件。

3)验证删除文件

这里也要分文件存在于lowerdir还是upperdir中。

3.1)要删除的文件只存在于upperdir,比如我们删除只存于upperdir中的file_a.txt,看看结果如何,可以看到只会删除掉upperdir中的文件,因为它本身只存在于那。

​​​​​​​

3.2)删除只存于lowerdir中的文件,我们删除lowerdir中的文件file_c.txt,看看结果如何。通过结果可知,删除只存在于lowerdir中的文件只会删除挂载点(合并点)的文件,而不会删除lowerdir中的文件。但是我们又发现在upperdir中还有file_c.txt的影子,但是通过查询大小发现其实只是生成了一个大小为0的字符设备文件。

​​​​​​​ ​​​​​​​

总结

通过以上的讨论以及验证方法,明白了所有操作仅影响上层目录,而不会修改下层目录,这种机制确保了下层目录的只读性和数据完整性。也明白了在OverlayFS中,Lower可以是只读的,而Upper则需要是可读写的文件系统,同时也可以利用这个机制来做一个恢复出厂的应用。这个等另一个文章 OverlayFS文件系统小应用 介绍。

相关推荐
hjjdebug1 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯1 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
密码小丑1 小时前
11月4日(内网横向移动(一))
笔记
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻1 小时前
Linux:认识文件系统
linux·运维·服务器
会掉头发2 小时前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
鸭鸭梨吖2 小时前
产品经理笔记
笔记·产品经理
我言秋日胜春朝★2 小时前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器