当前位置:首页 > 嵌入式 > Linux阅码场
[导读]OverlayFS,顾名思义是一种堆叠文件系统,可以将多个目录的内容叠加到另一个目录上。OverlayFS并不直接涉及磁盘空间结构,看起来像是将多个目录的文件按照规则合并到同一个目录。且对多个源目录具体使用文件系统类型没有要求,即使各个源目录的文件系统类型不同也不影响使用。一、挂...

OverlayFS,顾名思义是一种堆叠文件系统,可以将多个目录的内容叠加到另一个目录上。OverlayFS并不直接涉及磁盘空间结构,看起来像是将多个目录的文件按照规则合并到同一个目录。且对多个源目录具体使用文件系统类型没有要求,即使各个源目录的文件系统类型不同也不影响使用。




一、挂载OverlayFS





下面就让我们来看看如何挂载一个OverlayFS文件系统:


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


上面的命令可以将"lowerdir"和"upper"目录堆叠到/merged目录,"workdir"工作目录要求是和"upperdir"目录同一类型文件系统的空目录。




也可以省略upperdir和workdir参数,但/merged为只读属性了:


mount-t overlay -o lowerdir=/upper:/lower overlay /merged


也可支持多lowerdir目录堆叠:


mount-t overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/workoverlay /merged


lowerdir的多层目录使用":"分隔开,其中层级关系为/lower1> /lower2 > /lower3。






在使用如上mount进行OverlayFS合并之后,遵循如下规则: lowerdir和upperdir两个目录存在同名文件时,lowerdir的文件将会被隐藏,用户只能看到upperdir的文件。 lowerdir低优先级的同目录同名文件将会被隐藏。 如果存在同名目录,那么lowerdir和upperdir目录中的内容将会合并。 当用户修改mergedir中来自upperdir的数据时,数据将直接写入upperdir中原来目录中,删除文件也同理。 当用户修改mergedir中来自lowerdir的数据时,lowerdir中内容均不会发生任何改变。因为lowerdir是只读的,用户想修改来自lowerdir数据时,overlayfs会首先拷贝一份lowerdir中文件副本到upperdir中(这也被称作OverlayFS的copy-up特性)。后续修改或删除将会在upperdir下的副本中进行,lowerdir中原文件将会被隐藏。 如果某一个目录单纯来自lowerdir或者lowerdir和upperdir合并,默认无法进行rename系统调用。但是可以通过mv重命名。如果要支持rename,需要CONFIG_OVERLAY_FS_REDIRECT_DIR。
一般lowerdir为只读文件系统,upperdir为可写文件系统,这形成了一个有趣的机制,似乎我们可以修改lowerdir下的文件或目录,lowerdir看上去变成了一个可读写的文件系统。




二、删除文件和目录






为了支持rm和rmdir而又不修改lower文件系统,需要在upper文件系统中记录文件或目录已经被删除。OverlayFS引入了whiteout文件的概念。如果需要删除lower层的文件或目录,需要在upper层创建一个whiteout文件。







可以看到删除merged目录下的文件或目录后,在upper层新建了aa、bb、dir三个whiteout文件,whiteout文件不是普通文件,而是主/次设备号都是0的字符设备。只存在于upper的文件cc直接删除就可以了。




三、创建文件和目录





创建操作与删除操作类似,都是在upper层进行修改。创建文件直接在upper层新增文件即可,如果upper层存在对应的whiteout文件,先删除whiteout文件再创建文件。创建目录与创建文件类似,区别在于upper层存在whiteout文件时,删掉whiteout文件创建目录,如果就此结束,lower层对应目录(因为有whiteout文件)的文件就被显示到merged目录了,所以还需要将目录的"trusted.overlay.opaque"属性设为"y"(所以这也就需要upper层所在的文件系统支持xattr扩展属性),OverlayFS在读取上下层存在同名目录的目录项时,如果upper层的目录被设置了opaque属性,它将忽略这个目录下层的所有同名目录中的目录项,以保证新建的目录是一个空的目录。







四、rename目录





当我们想重命名一个在lower层的目录,OverlayFS有两种处理方式:


1. 返回EXDEV错误码:rename系统调用试图穿过文件系统边界移动一个文件或目录时返回这个错误。这个是默认行为。


2. 当使能"redirect_dir"特性后,rename操作成功,在upper层产生一个副本目录。




有以下几种方式控制"redirect_dir"特性:


1. KernelConfig Options:


OVERLAY_FS_REDIRECT_DIR


OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW


使能后,redirect_dir特性默认打开。


2. sys文件系统:


参照KernelConfig设置:


/sys/module/overlay/parameters/redirect_dir


/sys/module/overlay/parameters/redirect_always_follow


/sys/module/overlay/parameters/redirect_max


3. MountOptions:


redirect_dir=on/off/follow/nofollow




五、Android中的应用





OverlayFS文件系统可以类似达到把只读文件系统改为可写文件系统的效果,这一特性在Android开发的场景下得到应用,userdebug模式下我们adb remount后似乎就可以往/system/目录下push内容了,查看remount前后的mount信息,可以看到/system/目录被重新挂载成可读写的OverlayFS文件系统了:


remount前:






remount后:






重启:






system、vendor、product等目录是以ext4文件系统方式挂载的,remount后以OverlayFS挂载,之后重启也会以OverlayFS方式挂载,以使之前的修改生效。




system和vendor等的upperdir都在/cache可写文件系统中,往/system目录push东西实际上都存放在/cache/overlay/system/upper目录中了。实际的system分区并没有被修改,修改的文件全部存放在cache分区了。




OverlayFS也被应用在把多个不同分区的目录堆叠到一个目录下面,可以更好做到软件系统的组件解耦,不同特性的组件内容分别放到不同分区,最后通过OverlayFS堆叠到一个目录下,提升软件的可维护性。




六、小结






OverlayFS以其独特的优势正得到越来越广泛的应用,Androiduserdebug/eng模式中使用其实现对系统分区的修改。OpenWRT系统也利用OverlayFS减少擦写闪存的次数,延长闪存的使用寿命。OverlayFS更多的应用在云平台的容器镜像,基础的容器镜像通常不应被改变,新功能叠加可以通过OverlayFS实现且可以再次分发。














本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭