当前位置:首页 > 公众号精选 > 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实现且可以再次分发。














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

业内消息,近日日本软件银行集团(SoftBank Group)旗下安谋国际科技公司(Arm)计划研发人工智能(AI)芯片,先成立一个AI芯片部门,目标是明年春季建立AI芯片原型产品,然后将量产工作交由代工厂制造,预估20...

关键字: ARM AI芯片

援引彭博社消息,近日新当选的熊本县知事木村隆(Takashi Kimura)表示,他已准备好确保获得广泛的支持,以吸引台积电在当地建立第三家日本芯片工厂。

关键字: 日本 台积电 芯片工厂

5 月 13 日消息,从“上海临港”微信公众号获悉,特斯拉上海储能超级工厂建设项目已完成施工许可证核发。这是特斯拉在美国本土以外的首个储能超级工厂项目,工厂计划于今年 5 月开工,明年一季度实现量产。

关键字: 特斯拉 储能

据消息源 jasonwill101 透露,高通公司目前正在重新设计骁龙 8 Gen 4 处理器,新的目标频率为 4.26GHz,这一变化主要是为了应对苹果 M4 / A18 / Pro 处理器。

关键字: 高通 骁龙 8 Gen 4 芯片

最新消息,今天凌晨 OpenAI 在春季更新直播官宣发布最新旗舰生成式 AI 模型 GPT-4o,GPT-4o 将 ChatGPT 变成一名带有文本、「视觉」与语音互动的实时语音助手。OpenAI 表示升级版的 Chat...

关键字: OpenAI 生成式 AI大模型 GPT-4o

三星电子最近进行了重大的组织重组,以增强其在下一代机器人业务方面的能力,并将其视为关键增长领域。作为重组的一部分,该公司解散了负责开发三星首款可穿戴机器人“Bot Fit”的机器人业务团队。

关键字: 三星电子 解散 Bot Fit 机器人

央视《今日说法》栏目近期报道了一名90后程序员通过开发非法视频搬运软件在不到一年的时间里获利超700万,最终获刑的案例。

关键字: 程序员 软件

业内消息,近日美国麦肯锡公司的一份报告强调了芯片行业的劳动力挑战,在美国寻求吸引更多技术工人从事半导体制造之际,许多现有员工正在重新考虑是否要留下来。

关键字: 芯片

业内消息,近日美国商务部工业与安全局(BIS)根据出口管理条例(EAR)将中国电子科技集团旗下多个研究所、中电科芯片技术(集团)有限公司、中国科学技术大学,以及北京量子信息科学研究院、本源量子等 37 个中国实体添加到实...

关键字: 实体清单

5 月 11 日消息,鲲鹏昇腾开发者大会昨日在北京中关村国际创新中心举办,主题为“心怀挚爱,共绽光芒”,会上推出了原生使能计划、启动鲲鹏昇腾科教创新卓越中心、鲲鹏昇腾原生创新汇等。

关键字: 华为 鲲鹏昇腾
关闭
关闭