当前位置: 首页 > news >正文

深圳网站制作公司讯互联网产品设计公司

深圳网站制作公司讯,互联网产品设计公司,大佬做的魔法少女网站,转转怎么做钓鱼网站大家好#xff0c;我是费益洲。UnionFS 作为 Docker 的技术核心之一#xff0c;实现了 Docker 镜像的分层轻量化构建、容器资源的隔离复用等目的。本文将从核心原理、主流技术实现简单介绍 UnionFS。 核心原理 Linux 的联合文件系统#xff08;Union File System#xff0c… 大家好我是费益洲。UnionFS 作为 Docker 的技术核心之一实现了 Docker 镜像的分层轻量化构建、容器资源的隔离复用等目的。本文将从核心原理、主流技术实现简单介绍 UnionFS。 核心原理 Linux 的联合文件系统Union File System简称 UnionFS是一种将多个目录层Layer“透明地”叠加为单一视图的文件系统的技术。 UnionFS 叠加的过程其实是 UnionFS 将多个目录层Layer联合挂载到了同一个挂载点并进行目录层内容的覆盖。用户最终看到的是一个合并后的文件系统但实际上文件内容可能分布在不同的存储位置。当用户在最终合并完成后的文件系统写入内容时系统是真正将内容写入了新的文件但是这个过程并不会改变原来的文件这是因为 UnionFS 还用到了另外一个重要的资源管理技术写时复制。 分层存储 层Layer层是 UnionFS 的基本组成单元每一层都包含文件系统的一部分内容多个层联合叠加后共同组成一个完整的文件系统。层一般分为只读层和读写层 只读层Read-Only Layer 可能有多个只读层每个只读层的内容都是固定不变的每个只读层都包含一部分系统需要的库或者二进制文件等基础文件相同的只读层只会在物理存储中存在一个但是可以被多个容器共享多个只读层之间有上下层关系上层可以覆盖下层的同名文件夹和文件 读写层Read-Write Layer 在容器技术中读写层都是记录容器在运行过程中的内容修改每个容器在运行时都会有独立的读写层这种设计解决了容器运行时的文件内容隔离在容器被删除时该容器的读写层也会被删除 写时复制 写时复制机制Copy-on-Write即只有在需要写入修改时才会进行复制操作然后操作复制出来的副本。这种机制可以节省大量的存储空间和时间而且不会修改原始文件。整体的工作流程如下所示读操作流程系统从上层到下层依次查找文件找到文件后直接读取无额外开销首次写入修改流程后续写入修改流程无需再次复制直接修改读写层中已经存在的副本主流实现技术 UnionFS 的主流实现技术有 ​​AUFS​、​​OverlayFS、​​Device Mapper​​、Btrfs/ZFS 等。AUFS 是一个用户空间的联合文件系统实现设计目标是提供最大的灵活性和功能完整性AUFS 是早期 Docker 的默认存储驱动。Device Mapper 不是传统意义上的文件系统而是 Linux 内核的一个框架用于将物理块设备映射为虚拟块设备。Btrfs 和 ZFS 都是现代文件系统原生支持快照和子卷功能。 Docker 目前默认使用 OverlayFS 作为默认的存储系统Docker 从早期的 AUFS 转向 OverlayFS是综合了内核兼容性、性能、资源利用率及社区生态等多方面因素的结果1.内核兼容性AUFS 未被内核主线接纳 AUFS 作为第三方文件系统​​ 从未被集成到 Linux 内核主线 ​​需用户手动为内核打补丁并重新编译导致兼容性差。尤其在 RedHat/CentOS 等强调稳定性的发行版中无法直接使用内核原生支持 OverlayFS 自 Linux 内核版本 3.18 起OverlayFS 直接集成到内核主线 ​​无需额外补丁到 4.0 版本以后就支持了所有功能。⚡ 2.性能 OverlayFS​​ 的 CoW 操作是块级Block-level​​复制单位是文件的数据块。AUFS​​ 的 CoW 操作是文件级File-level​​复制单位是整个文件对大文件操作延迟显著3.资源利用率OverlayFSoverlay2 通过符号链接管理层间依赖避免 inode 耗尽问题。AUFS 则依赖硬链接易导致 inode 枯竭尤其在频繁创建/销毁容器的场景OverlayFS 支持跨容器共享页缓存多个容器访问同一镜像文件时内核仅缓存一份数据降低内存占用。AUFS 无此优化每个容器需独立缓存相同文件4.社区生态自 Docker 版本 1.12 起OverlayFS 成为默认存储驱动官方持续优化其稳定性与功能Linux 内核社区放弃 AUFS 维护新特性如 ID 映射、安全增强仅适配 OverlayFSOverlayFS OverlayFSOverlay File System是 Linux 内核中的一种联合挂载文件系统通过将多个目录层透明叠加为单一视图实现高效的分层存储管理。OverlayFS 使用四个目录来实现分层联合lower只读层 可包含多个目录如 Docker 镜像层文件不可修改多个容器可共享同一组 lowerupper读写层 存储用户修改后的内容如容器运行时的文件内容变更文件修改或删除时通过写时复制CoW将数据从 lower 复制到 upper 再操作workdir工作目录 ​​ 内部临时目录用于原子化操作如文件复制挂载后内容自动清空且用户不可见merged合并目录 用户访问的最终目录动态合并 lower 和 upper 内容整体架构如下图所示文件操作挂载文件 1️⃣ 创建文件夹 mkdir -p /tmp/overlay-demo/{lower1,lower2,upper,work,merged}# 目录结构图如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 ├── lower2 ├── merged ├── upper └── work5 directories, 0 files2️⃣ 创建一些初始文件 echo Config template: lower1 /tmp/overlay-demo/lower1/config.conf echo Config template: lower2 /tmp/overlay-demo/lower2/config.conf echo Env file content: lower1 /tmp/overlay-demo/lower1/env echo Base file content: lower1 /tmp/overlay-demo/lower1/base1.txt echo Base file content: lower2 /tmp/overlay-demo/lower2/base2.txt echo Personal content /tmp/overlay-demo/upper/tom.txt echo Env file content: upper /tmp/overlay-demo/upper/env创建初始文件后目录结构如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged ├── upper │ ├── env │ └── tom.txt └── work└── work6 directories, 7 files3️⃣ 挂载目录 sudo mount -t overlay overlay \ -o lowerdir/tmp/overlay-demo/lower1:/tmp/overlay-demo/lower2,\ upperdir/tmp/overlay-demo/upper,\ workdir/tmp/overlay-demo/work \ /tmp/overlay-demo/merged挂载目录需要 root 权限。具体参数如下-t overlay 表示文件系统为 overlay-o lowerdir/tmp/overlay-demo/lower1:/tmp/overlay-demo/lower2,upperdir/tmp/overlay-demo/upper,workdir/tmp/overlay-demo/work 指定 lowerdir支持多个 lower使用:隔离优先级从左往右依次降低指定 upper指定 work/tmp/overlay-demo/merged 指定 merged即最终的挂载点、用户看到的最终的、合并后的统一视图挂载后目录结构如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged │ ├── base1.txt │ ├── base2.txt │ ├── config.conf │ ├── env │ └── tom.txt ├── upper │ ├── env │ └── tom.txt └── work└── work6 directories, 12 files查看 merged 下的 config.conf、env 内容 # config.conf [rootmaster01 ~]# cat /tmp/overlay-demo/merged/config.conf Config template: lower1 # env [rootmaster01 ~]# cat /tmp/overlay-demo/merged/env Env file content: upper合并后的 config.conf 内容为Config template: lower1证明了多个 lower 的优先级在挂载参数中是从左往右依次降低合并后的 env 的内容为Env file content: upper证明了 upper 的优先级高于 lower。整体的文件结构如下图所示✨ 新增文件 echo test /tmp/overlay-demo/merged/test新增文件后整体目录结构如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged │ ├── base1.txt │ ├── base2.txt │ ├── config.conf │ ├── env │ ├── test │ └── tom.txt ├── upper │ ├── env │ ├── test │ └── tom.txt └── work└── work从上面的目录结构可以看出在 OverlayFS 中添加文件其实就是在 upper 中添加文件然后合并覆盖后的结果。 文件新增的过程如下所示修改文件 echo Modified base content: merged /tmp/overlay-demo/merged/base1.txt修改文件后整体目录结构如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged │ ├── base1.txt │ ├── base2.txt │ ├── config.conf │ ├── env │ └── tom.txt ├── upper │ ├── base1.txt │ ├── env │ └── tom.txt └── work└── work6 directories, 13 files# lowerdir内容 [rootmaster01 ~]# cat /tmp/overlay-demo/lower1/base1.txt Base file content: lower2# upperdir内容 [rootmaster01 ~]# cat /tmp/overlay-demo/upper/base1.txt Modified base content: merged# merged内容 [rootmaster01 ~]# cat /tmp/overlay-demo/merged/base1.txt Modified base content: merged由上面的文件内容变化可以得出试验结果 原始文件/tmp/overlay-demo/lower1/base1.txt保持不变修改文件后 upper 层新增了一个 base1.txt 文件用户看到的内容其实是来自 upper 层 文件修改的过程如下所示OverlayFS 中lower 的文件是不允许修改的在 Cow 的技术机制下对 base1.txt 进行修改时文件系统发现 uppder 中不存在 base1.txt就会从 lower 中复制一份副本到 upper 中再进行修改。修改后的内容在合并覆盖后用户看到的就是对 base1.txt 修改后的内容。从 lower copy 到 upper叫做 copy_up删除文件 在上一步的基础上删除/tmp/overlay-demo/merged/base1.txt rm -f /tmp/overlay-demo/merged/base1.txt删除后的文件目录结构如下 [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged │ ├── base2.txt │ ├── config.conf │ ├── env │ └── tom.txt ├── upper │ ├── base1.txt │ ├── env │ └── tom.txt └── work└── work└── #7eb6 directories, 13 files查看 upperdir 中的文件变化 [rootmaster01 ~]# ls -al /tmp/overlay-demo/upper/ total 8 drwxr-xr-x 2 root root 100 Aug 22 14:30 . drwxr-xr-x 7 root root 140 Aug 22 10:28 .. c--------- 2 root root 0, 0 Aug 22 14:30 base1.txt -rw-r--r-- 1 root root 24 Aug 22 11:36 env -rw-r--r-- 1 root root 17 Aug 22 11:36 tom.txt可以发现lower 中的文件并不会被删除而是会在 upper 中创建一个标记表示这个文件已经被删除了。再次删除文件c--------- 2 root root 0, 0 Aug 22 14:30 base1.txt发现 merged 中又可以看到 base1.txt 文件了 [rootmaster01 ~]# rm -f /tmp/overlay-demo/upper/base1.txt [rootmaster01 ~]# tree /tmp/overlay-demo/ /tmp/overlay-demo/ ├── lower1 │ ├── base1.txt │ ├── config.conf │ └── env ├── lower2 │ ├── base2.txt │ └── config.conf ├── merged │ ├── base1.txt │ ├── base2.txt │ ├── config.conf │ ├── env │ └── tom.txt ├── upper │ ├── env │ └── tom.txt └── work└── work└── #7eb6 directories, 13 files由上面的文件内容变化可以得出试验结果 原始文件/tmp/overlay-demo/lower1/base1.txt保持不变删除文件后 upper 层会添加一个与文件同名的删除标记删除标记后merged 又能够看到该文件了OverlayFS 中删除从 lower 层映射来的文件或文件夹时会在 upper 层添加一个与文件或文件夹同名的 c 标识文件这个文件叫 whiteout 文件。这个标识文件意味着该文件或文件夹已经被删除而且合并覆盖过程中当扫描到这个文件或文件夹后会忽略此文件或文件夹。导致 merged 层中不会看到该文件或文件夹从用户侧来说即达到了删除的效果。文件删除的过程如下所示
http://www.zqtcl.cn/news/100042/

相关文章:

  • html5网站开发方案海珠网站建设公
  • 津做网站建筑网课平台
  • 佛山制作手机网站汕头网站定制
  • 网站域名解释怎么做济南集团网站建设
  • 网站怎么做咨询网站开发商
  • 建立网站的第一步网站的管理系统
  • 安远做网站做宣传册网站
  • 网站建设概况君隆网站建设
  • 富源县住房和城乡建设局网站备案信息 网站名
  • 做门窗的网站宁波附近的seo推广
  • 上海网站建设解决方案怎样设计网站
  • 龙华建站公司seo研究中心怎么样
  • 网站的大图标怎么做项目网站
  • 南京网站设计机构wap网站设计方案
  • 建站点怎么做网站wordpress 重写规则
  • 泰州做网站优化服装网站建设方案ppt
  • wordpress怎么设计网站微商城科技
  • 昆山营销型网站建设旅游网页制作模板教程
  • 企业网站开发时间淘客网站开发源代码
  • 传奇世界新开服网站html静态网页模板代码
  • 门户网站app开发网络服务提供者发现未成年通过网络发布
  • 编辑网站在线注册系统行业网站制作
  • 国外建设网站的软件西宁设计网站建设
  • 云服务器网站配置在线设计免费logo
  • 怎么在手机上做企业网站北京大学两学一做网站
  • 社区网站建设方案书服务型网站建设的主题
  • 做淘推广的网站如何制作表白链接
  • 外贸网站代码中国建设银行招聘网站甘肃分行
  • 免费ai设计logo网站西安网站开发外包公司有
  • 2017优秀网站设计欣赏如何做建议的网站