当前位置: 首页 > news >正文

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文件系统小应用 介绍。

http://www.lryc.cn/news/384023.html

相关文章:

  • Kubernetes面试整理-如何配置和使用Service, Ingress?
  • 深入浅出:NPM常用命令详解与实践
  • IPv6 address status lifetime
  • OpenVINO部署
  • 面试题:MySQL优化,项目中举例
  • Spring Boot中的事件驱动编程
  • 代码随想录算法训练营第五十天| 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
  • 【Redis】数据持久化
  • 基于Python+Flask+MySQL+HTML的B站数据可视化分析系统
  • 桥接模式
  • docker中mysql突然无法远程连接设置
  • Nuxt3 的生命周期和钩子函数(二)
  • 用英文介绍孟买:Mumbai India‘s Transforming MEGACITY
  • 镜像发布至dockerHub
  • vscode + CMake编译(opencv显示图片工程)
  • JavaScript的学习之强制类型转换
  • 天润融通:AI赋能客户体验,推动企业收入和业绩增长
  • Android与服务器交互的方式中的对称加密和非对称加密(kotlin)
  • epoch和batch的区别
  • 非递归创建二叉查找树
  • 摄影师危!AI绘画即将降维打击摄影行业
  • ts 中class
  • 深度解析RocketMq源码-高可用存储组件(四)Dledger框架日志同步流程
  • ONLYOFFICE 文档开发者版 8.1:API 更新
  • Activemq单节点在Windows下的配置部署
  • SpringBoot-注解@ImportResource引入自定义spring的配置xml文件和配置类
  • GitLab配置免密登录之后仍然需要Git登录的解决办法
  • 探索小众爱好:打造个人韧性与特色之路
  • GitHub使用教程(小白版)
  • 深度解析SD-WAN在企业组网中的应用场景