OverlayFS在嵌入式系统中的应用

环境介绍
硬件:T113平台
软件:Tina5.0 SDK(使用的buildroot系统)

抛出问题

OverlayFS到底是个什么东西?是有一个软件叫OverlayFS?还是OverlayFs一种框架?如果是一个框架,它又应用在哪?怎么应用?不用不行吗?又或者它到底是个什么?

基本概念

OverlayFS 是一个面向Linux的文件系统服务,而不是一个独立的软件或应用程序。Overlayfs是一种堆叠文件系统,它依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然后向用户呈现。

使用场景

关于OverlayFS的详细介绍后面再说。先了解一下到底为什么要使用OverlayFS。有需求才会有方案,因为这篇文章是关于OverlayFS在嵌入式系统中的应用,所以例举一下,在什么样的需求下,会使用OverlayFS:

  • 1、在板子上对大量文件做了大量修改,此时想快速回到最原始的状态;
  • 2、…

OverlayFS的详细介绍

框架

OverlayFS主要有两层目录,分别是下层目录(Lower)和上层目录(Upper)。下层目录只读,上层目录可读可写。

目录合并

若上层(Upper)与下层(Lower)出现了相同的文件,则下层的文件会被上层的文件覆盖。
image.png

修改文件

若此时要修改下图的c文件。由于下层(Lower)是不可写的,因此采用了CoW技术,在对c文件进行修改时,会复制了一份数据到上层(Upper),即实际修改的是上层(Upper)里的c文件。
image.png

删除文件

若删除了下图的c文件,实际是在上层(Upper)创建了一个同名的c标识的文件,这个文件叫whiteout文件。当扫描到此文件时,会忽略此文件名。因此不会真正的删除下层(Lower)的c文件。
image.png

添加文件

添加文件实际就是在上层(Upper)添加的。
image.png

小结

以上图片来源和关于OverlayFS更详细的介绍可以参考这篇文章。

OverlayFS在嵌入式系统中的应用

内核配置

内核开启OverlayFS( File systems -> Overlay filesystem support )。
image.png

OverlayFS简单应用

例如现在要对根目录下的usr目录应用上OverlayFS。

  • 先在根目录下创建一个overlay文件夹;
  • 在overlay文件夹下创建一个merge、upper、work文件夹;
  • 分别在merge、upper、work文件夹下创建一个usr文件夹;

此时的目录结构应该如下:

/
    ...
    bin
    usr
    overlay
        merge
            usr
        upper
            usr
        work
            usr
    ...

挂载命令:

mount -t overlay overlay -o lowerdir=/usr,upperdir=/overlay/upper/usr,workdir=/overlay/work/usr /overlay/merge/usr
  • mount -t overlay:使用 mount 命令来挂载一个文件系统,-t overlay 指定文件系统类型为 overlay;
  • overlay:这是 overlay 文件系统本身的名称(或称为“伪设备”)。
  • lowerdir=/usr:指定/usr目录为下层目录(Lower),只读,包含原始的文件和数据;
  • upperdir=/overlay/upper/usr:指定/overlay/upper/usr目录为上层目录(Upper),所有对叠加文件系统的写操作都会发生在这个目录中。这些更改是私有的,并且不会影响到下层目录;
  • workdir=/overlay/work/usr:指定/overlay/work/usr目录为工作目录,overlay 文件系统需要它来管理元数据和临时文件;
  • /overlay/merge/usr:这是叠加文件系统的挂载点。一旦挂载成功,该目录就会显示下层目录和上层目录的合并内容,并且任何对 /overlay/merge/usr 的写操作都会发生在上层目录中;

查看挂载点会发现,下层目录和上层目录的合并内容出现了:
image.png

OverlayFS应用新思路

虽然上面已经体验了OverlayFS的挂载。但使用时还得进到overlay/merge/usr目录,这不太方便。能不能直接将/usr挂载到/usr呢?【该方法是从一个同事学来的】

mount -t overlay overlay -o lowerdir=/usr,upperdir=/overlay/upper/usr,workdir=/overlay/work/usr /usr

挂载成功后,在/usr目录下创建new文件夹,查看/overlay/upper/usr,确实多了一个new文件夹:
image.png
基于这种思路编写一个启动脚本,上电后自动挂载所需的目录。即上电后,会自动将/usr挂载到/usr、将/lib挂载到/lib等。可以将该脚本放到/etc/init.d/下。

echo "setting OverlayFS..."

# 检索要挂载的目录
for dir in $(ls / | grep -vE 'proc|sys|dev|udisk|tmp|lost|sddisk|var|home|overlay|root|mnt'); do

  if [ -d /$dir ];then

    workdir=/overlay/work/$dir
    # upper层路径
    updir=/overlay/upper/$dir

    if [ ! -d ${updir} ];then
      mkdir -p ${updir}
      echo "mkdir updir ${updir} now"
    fi

    if [ ! -d ${workdir} ];then
      mkdir -p ${workdir}
      echo "mkdir work ${workdir} now"
    fi

    # 自己挂载自己
    mount -t overlay overlay -o lowerdir=/${dir},upperdir=${updir},workdir=${workdir} /${dir}

  fi

done
echo "OverlayFS has been mounted successfully!"

这是执行脚本后的挂载情况:
image.png
这样挂载后,被挂载的目录都在下层(Lower)。操作就像平时一样操作,但实际并不会修改下层文件。如果想要恢复到原始的样子,把所有/overlay/upper/xxx/下的文件清除即可。
下面是一个恢复出厂设置的脚本,主要工作就是上面所讲的,删除所有/overlay/upper目录下所有文件夹里的内容:

#!/bin/bash

echo "restore factory setting ... "

# 定义目录变量
TARGET_DIR="/overlay/upper"

# 进入目标目录
cd ${TARGET_DIR} || { echo "无法进入目录 $TARGET_DIR"; exit 1; }

# 删除/overlay/upper目录下所有文件夹的所有内容,但不删除文件夹本身
find ${TARGET_DIR} -mindepth 1 -type d -print0 | while IFS= read -r -d '' dir; do 
    echo "remove ${dir}"
    rm -rf ${dir}/*  
done

cd /
echo "restore factory setting successfully!"

总结

1、对于为什么要在嵌入式系统中应用OverlayFS,还找不出太多原因。
2、对于如何正确地在嵌入式系统中使用OverlayFS,还有待继续验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/675785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ中client_log非常大

rocketmq默认不使用logback日志,所以得额外配置,使mq使用logback配置 使用logback中的日志配置 配置MQ 使用logback的配置,具体原理见ClientLogger.java的static代码块 在应用启动函数中添加如下代码 System.*setProperty*(ClientLogger.*CLIENT_LOG_USE…

Coolmuster Android助手评测:简化Android到电脑的联系人传输

产品概述 Coolmuster Android助手是一款旨在简化Android设备与计算机之间数据管理和传输过程的全面工具。它以用户友好的界面和全面的功能,成为寻求高效数据管理解决方案的Android用户的热门选择。 主要特点和功能Coolmuster Android助手拥有一系列使其成为管理Andr…

TMS FNC WX Pack TMS软件分发的一组应用程序

TMS FNC WX Pack TMS软件分发的一组应用程序 TMS FNC WX Pack是由TMS软件分发的一组应用程序。这些活动是100%的跨平台和跨Frimorc,并在不同的应用程序中得到支持,如Web应用程序、Windows、Linux等。阿拉伯语视觉组件库。安装这些计算机的过程非常简单高…

postman教程-10-使用cookie

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了Postman Authorization授权的几种方法,本小节我们讲解一下Postman 使用cookie的方法。 Postman 的 cookie 管理器使您能够查看和编辑与不同域关联的 cookie。您可以为域手动创建 c…

Windows10 设置默认编码为utf-8

Windows10 设置默认编码为utf-8 序言步骤 序言 有一些程序,默认读取出来gbk的会报错,有很多都是,干脆就直接设置电脑为默认utf-8的,这样就不用担心读取成gbk的怎么样了,具体是否需要要看自己的程序 步骤 完成了

高端、大气、很牛B的免费wordpress模板主题

这是一款专为WordPress打造的极简主义风格主题,以白色和黑色为主色调,搭配红色点缀,营造出一种简洁、专业且具有视觉冲击力的效果。 该主题的设计理念是“简单即美”,旨在帮助用户快速搭建一个美观、易用的网站。它提供了丰富的自…

【Java】接口详解

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量。 一个简单的接口代码示例 interface IShape { void draw(); } class Cycle implements IShape { Override public void draw() { System.out.println…

如何制作一本温馨的电子相册呢?

随着科技的不断发展,电子相册已经成为了一种流行的方式来记录和分享我们的生活。一张张照片,一段段视频,都能让我们回忆起那些温馨的时光。那么,如何制作一本温馨的电子相册呢? 首先,选择一款合适的电子相册…

绕过WAF(Web应用程序防火墙)--介绍、主要功能、部署模式、分类及注入绕过方式等

网站WAF是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。能够为用户提供实时的网站安全防护&…

Docker无法stop或者rm指定容器

Docker无法stop或者rm指定容器 今日准备重启一下docker 容器部署的 Nginx 时,使用的命令是 docker exec -it ir-nginx nginx -s reload 结果发现无法重启报错 然后想着关闭再启动,结果发现 docker restart 、docker stop 、docker kill 、docker exec 都…

STM32-15-DMA

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD 文章目录 STM…

基础—SQL—DQL(数据查询语言)条件查询

一、DQL—语法 SELECT 字段列表 FROM 表名 WHERE 条件列表; 注意:条件列表可以是一个,也可以是多个。 二、条件列表的一些构建形式 注意: 1、BETWEEN ... AND ... (between 后面跟最小值,and 后面跟最大值&#xff0…

VxWorks PCI驱动

1 概述 PCI接口是一种DMA接口,通过DMA接口,CPU和外设能够进行内存的共享,这样CPU访问外设时只需要访问计算机系统的内存就可以了,这样做的一个重要的目的就是增加外部设备的自主性,在外部设备工作时可以不需要CPU的参与…

《QT从基础到进阶·四十一》无法解析的外部符号及生成事件加入QT打包命令报错问题

其他无法解析的外部符号: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl ML_AddinManger::metaObject(void)const "… 无法解析的外部符号 “public: virtual void * __cdecl ML_AddinManger::qt_metacast(char const *)” (?…

DynamiCrafter ComfyUI 教程 | 对图片转视频的效果进行精细化控制

近日,由北大、腾讯AI Lab联合推出的 AI 视频生成工具 DynamiCrafter 一经上线便引起了巨大反响。只需要输入一张普普通通的静态图,加上几句简单的文字引导,瞬间就能生成超逼真的动态视频,简直不要太厉害! 静态图 fire…

数据结构汇总

等同于: 旋转的时候忽略Nil,选装完再加上。

小华半导体MCU方案选型和应用

小华半导体有限公司是中国电子信息产业集团有限公司旗下集成电路业务平台华大半导体有限公司的核心子公司,目前团队规模约300人,其中75%以上为研发人员,国内细分行业规模最大,核心骨干拥有国际MCU大厂25年以上从业经验。 小华半导…

风险投资公司正在帮助小投资者购买Anthropic、OpenAI等热门公司的股票

近年来,风险投资公司对于人工智能(AI)领域的公司,如Anthropic、Groq、OpenAI等,表现出了极高的投资热情。这些公司因为它们在AI技术方面的创新而备受瞩目。但是,对于很多小投资者来说,由于资金有…

vmware将物理机|虚拟机转化为vmware虚机

有时,我们需要从不同的云平台迁移虚拟机、上下云、或者需要将不再受支持的老旧的物理服务器转化为虚拟机,这时,我们可以用一款虚拟机转化工具:vmware vcenter converter standalone,我用的是6.6的版本,当然…

心缘Hub小程序

心缘Hub小程序 文章目录 心缘Hub小程序[TOC](文章目录) 前言飞书文章:[添加链接描述](https://mqdyd6qj756.feishu.cn/wiki/X9qbwrq70i43W0kr5X8cqytSnKb) 一、简介 前言 飞书文章:添加链接描述 一、简介 心缘Hub 不要钱可以匹配 有缘人 、直接拿微信…