overlayfs介绍以及和bind差别介绍

一、overlay文件系统简介:
  OverlayFS 是一种堆叠文件系统,它依赖并建立在其它的文件系统之上(例如 ext4fs 和 ubifs 等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行 “合并”,
然后向用户呈现,这也就是联合挂载技术,对比于 AUFS,OverlayFS 速度更快,实现更简单。 而 Linux 内核为 Docker 提供的 OverlayFS 驱动有两种:overlay 和 overlay2。而 overlay2 是相对于 overlay 的
一种改进,在 inode 利用率方面比 overlay 更有效。
   overlayfs 通过三个目录:lower 目录、upper 目录、以及 work 目录实现,其中 lower 目录可以是多个,work 目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,
最后联合挂载完成给用户呈现的统一视图称为为 merged 目录。以下使用 mount 将演示其如何工作的。
    基本操作语法:
mount -t overlay overlay -o lowerdir=lower1:lower2,upperdir=upper,workdir=work merged_dir


二、实际应用场景和目的:
如将目标系统上的 rootfs 设计成 overlay 文件系统,将原始的 rootfs_base 部分放在 lower layer, 然后将系统运行时产生的文件系统的变动放在 upper layer。
这样就可以将原始文件和运行时文件进行了隔离。
例如:
例如lxc/docker三个目录层结构,即:lowerdir、uperdir、merged,其中 lowerdir 是只读的 image layer,其实就是 rootfs,对比我们上述演示的目录 A 和 B,我们知道 image layer 可以分很多层,所以对应的 lowerdir 是可以有多个目录。
而 upperdir 则是在 lowerdir 之上的一层,这层是读写层,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层,对比示例中的 C。
最后 merged 目录是容器的挂载点,也就是给用户暴露的统一视角,对比示例中的/tmp/test


三、操作实例如下

mkdir -p /tmp/test A B C worker
echo froma > A/a.txt
echo fromb > B/b.txt
echo fromB > B/a.txt
echo fromc > C/c.txt

挂载:
mount -t overlay overlay -o lowerdir=A:B,upperdir=C,workdir=worker/ /tmp/test/
挂载查询:
mount | grep overlay
overlay on /tmp/test type overlay (rw,relatime,lowerdir=A:B,upperdir=C,workdir=worker/)

挂载后的目录分布:
# find .
./worker
./worker/work
./C
./C/c.txt
./B
./B/a.txt
./B/b.txt
./A
./A/a.txt
./test
./test/a.txt
./test/b.txt
./test/c.txt

说明:对于merged_dir目录,相同文件名的文件会进行 “覆盖”,这里覆盖并不是真正的覆盖,而是当合并时候目录中两个文件名称都相同时,merged 层目录会显示离它最近层的文件。

四、overlay和bind对比:
        目录结构不同:Overlay mount是将多个文件系统合并成一个虚拟文件系统,而bind mount则是将一个目录挂载到另一个目录上。
        内容来源不同:Overlay mount的文件内容来自于下层文件系统和上层文件系统的合并,而bind mount的文件内容来自于被挂载的目录。
        文件可见性不同:Overlay mount会将下层文件系统和上层文件系统的文件合并到同一个目录下,因此可以看到所有文件。而bind mount则会隐藏被挂载的目录的原始内容,只显示挂载后的内容。
权限控制不同:Overlay mount会继承上层文件系统的权限控制,而bind mount则会继承被挂载目录的权限控制。
        用途不同:Overlay mount通常用于容器化应用程序和分发系统中,而bind mount则用于共享已经存在的目录或文件。 总的来说,Overlay mount和bind mount都是Linux中非常重要的文件系统挂载方式,
它们各有优点,可以根据具体的需求使用不同的挂载方式。

五、对于inode信息查询:
可使用ls -i查询,或者stat filename查询
如对于bind信息:mount --bind /data/testnode.conf  /etc/testnode.conf(或者mount -o bind /data/testnode.conf  /etc/testnode.conf)可见mount前后对应的inode信息一致,都为Inode: 129;同样overlay merge下面对应的inode信息也和原来的一致,类似于硬链接(但是类似软链接这种是不占空间的:如ln -sf aa.cfg  yyu,yyu显示是0字节大小)
 # stat /data/testnode.conf
  File: `/data/testnode.conf'
  Size: 1188            Blocks: 4          IO Block: 1024   regular file
Device: 1031fh/66335d   Inode: 129         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-11-02 07:59:29.000000000 +0000
Modify: 2023-11-02 07:59:29.000000000 +0000
Change: 2023-11-02 07:59:29.000000000 +0000
 #
 #
 # stat /etc/testnode.conf
  File: `/etc/testnode.conf'
  Size: 1188            Blocks: 4          IO Block: 1024   regular file
Device: 1031fh/66335d   Inode: 129         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-11-02 07:59:29.000000000 +0000
Modify: 2023-11-02 07:59:29.000000000 +0000
Change: 2023-11-02 07:59:29.000000000 +0000

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a2591748032-随心所记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值