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.mzph.cn/web/34609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第3天|张量Tensor

张量Tensor 概念创建张量(4种方式)张量的属性张量索引张量运算Tensor与NumPy转换 概念 张量(Tensor)是一种特殊的数据结构,与数组和矩阵非常相似。张量是MindSpore网络运算中的基本数据结构。 创建张量(4…

MySQL 7种Join的定义图解示范结果(所有join类型)

文章目录 MySQL 7种Join的定义&图解&示范&结果(所有join类型)基本知识笛卡尔积 建表&填充数据1-Join不带条件account筛选 1-Inner Join 内连接不带条件account相同where筛选玩点特殊的 2-Left Join 左连接不带条件account筛选 3-Right J…

安全技术和防火墙(iptables)

安全技术 入侵检测系统:特点是不阻断网络访问,主要是提供报警和事后监督,不主动介入,类似于监控。 入侵防御系统:透明模式工作,对数据包,网络监控,服务攻击,木马&#…

HTTP协议中的各种请求头、请求类型的作用以及用途

目录 一、http协议介绍二、http协议的请求头三、http协议的请求类型四、http协议中的各种请求头、请求类型的作用以及用途 一、http协议介绍 HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应…

python flask 入门-helloworld

学习视频链接: 01-【前奏】课程介绍_哔哩哔哩_bilibili 1.安装flask pip install flask 踩坑记:本机不要连代理,否则无法install 提示报错valueError: check_hostname requires server_hostname 2.程序编写 在根目录下创建 app.py fr…

React实现二级评论

1. 什么是二级评论 图片来源–blackfrog的掘金文章 口语化的讲当我发布一个评论的时候就是一级评论,当我回复我发布的评论的时候就是二级评论并且将所有回复二级评论的评论也归于二级评论。 2. 二级评论功能的实现逻辑 在这里后端设计了四个接口分别是 获取所有…

jdk1.8升级到jdk11遇到的各种问题

一、第三方依赖使用了BASE64Decoder 如果项目中使用了这个类 sun.misc.BASE64Decoder,就会导致错误,因为再jdk11中,该类已经被删除。 Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 当然这个类也有替换方式&#xf…

第 27 篇 : 搭建maven私服nexus

官网文档 1. 下载应该很慢, 最好是能翻墙 nexus-3.69.0-02-java8-unix.tar.gz 2. 上传到/usr/local/src, 解压及重命名 tar -zxvf nexus-3.69.0-02-java8-unix.tar.gz rm -rf nexus-3.69.0-02-java8-unix.tar.gz mv nexus-3.69.0-02 nexus ls3. 修改配置 cd /usr/local/sr…

作 业 二

cs与msf权限传递 1、进入cs界面,首先来到 Cobalt Strike 目录下,启动 Cobalt Strike 服务端 2、用客户端进 3、建立监听 4、生成脚本文件 5、开启服务,让win_2012 下载木马文件并运行 6、显示已经获取到了win的权限 转到Metasploit Framework 7、进去m…

智慧仓储的秘密武器:数据可视化的应用

智慧仓储中数据可视化是如何应用的?在现代物流和供应链管理中,智慧仓储已成为企业提升效率、降低成本和优化运营的重要手段。而数据可视化作为智慧仓储的重要工具,通过将复杂的数据转化为直观、易理解的图表和图形,极大地提升了仓…

MySQL实训--原神数据库

原神数据库 er图DDL/DML语句查询语句存储过程/触发器 er图 DDL/DML语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS artifacts; CREATE TABLE artifacts (id int NOT NULL AUTO_INCREMENT,artifacts_name varchar(255) CHARACTER SET utf8 COLLATE …

玩机进阶教程----MTK芯片使用Maui META修复基带 改写参数详细教程步骤解析

目前mtk芯片与高通芯片在主流机型 上使用比较普遍。但有时候版本更新或者误檫除分区等等原因会导致手机基带和串码丢失的故障。mtk芯片区别与高通。在早期mtk芯片中可以使用工具SN_Writer_Tool读写参数。但一些新版本机型兼容性不太好。今天使用另外一款工具来演示mtk芯片改写参…

计算机缺失d3dx9_43.dll的多种解决方法,哪种更推荐使用

我在使用计算机时遇到了一个问题,系统提示我丢失了d3dx9_43.dll文件。丢失d3dx9_43.dll文件通常是由于DirectX组件未正确安装或损坏所致,这直接影响到依赖于DirectX的游戏和应用的运行。经过一番搜索和尝试,我找到了多种修复这个问题的方法&a…

2024最新SCI期刊影响因子发布(JCR2023)(含Top100榜单)

Clarivate Analytics(科睿唯安)2024年度《期刊引证报告》(Journal Citation Reports,简称JCR)发布了SCI期刊2023年影响因子(IF)。该指数备受访问学者、联培博士及博士后研究者关注。今天知识人网小编就简要介绍最新SCI…

【STM32 RTC实时时钟如何配置!超详细的解析和超简单的配置,附上寄存器操作】

STM32 里面RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。因为系统对后备寄存器和RTC相关寄存器有写保护,所以如果想要对后备寄存器和RTC进行访问,则需要通过操作…

一文详解:什么是企业邮箱?最全百科

什么是企业邮箱?企业邮箱即绑定企业自有域名作为邮箱后缀的邮箱,是企业用于内部成员沟通和客户沟通的邮箱系统。 一、企业邮箱概念拆解 1.什么是企业邮箱? 企业邮箱即使用企业域名作为后缀的邮箱系统。它不仅提供专业的电子邮件收发功能&a…

【学习】使用PyTorch训练与评估自己的ResNet网络教程

参考:保姆级使用PyTorch训练与评估自己的ResNet网络教程_训练自己的图像分类网络resnet101 pytorch-CSDN博客 项目地址:GitHub - Fafa-DL/Awesome-Backbones: Integrate deep learning models for image classification | Backbone learning/comparison…

【M1/M2】详细说明Parallels Desktop虚拟机的安装使用

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明什么是Paralles Desktop一、基础环境说明1.1 硬件环境1.2 软件环境二、安装Parallels DeskTop2.1 下载软件安装包三、Parallels 下配置Windows 11 系统3.1 Windows 11安装3…

Docker系列之安全

Docker的安全前言一、Docker 容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗二、Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题三、 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏…

Vue_cli搭建过程项目创建

概述 vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速&am…