• Docker 存储引擎 overlay、overlay2 及 AUFS 简介


    Overlay FS

    Overlay FS 在 Linux 3.18 开始正式支持,它能够将上层目录(upperdir)和下层目录(lowerdir)进行合并,提供用户一个统一的合并目录(merged)。其合并规则如下:

    1. 同名上下层目录合并;
    2. 同名的文件,上层覆盖下层;
    3. 对下层的文件修改采用写时复制(copy_up),下层文件无法直接修改,需要复制到上层进行修改,然后再依规则进行覆盖。

    Overlay FS 在容器技术中应用广泛,尤其在Docker中。

    Docker 容器以镜像层(Image layer)为下层目录,容器可写层(Writable layer)为上层目录,合并到容器挂载点(根目录)。早期 Linux 内核中的 Overlay FS 不支持多下层目录,Linux 4.0 以后版本才陆续完善了多下层目录的功能。我们知道 Docker 经常是多镜像层的,这意味着具有多层的下层目录。对此,Docker 提供了两种方式接入 Overlay FS:

    1. Overlay Driver,下层目录依次进行硬链接,然后最上层的镜像目录跟容器可写层合并到挂载点;
    2. Overlay2 Driver,只支持 Linux 4.0以上版本,下层镜像目录(最多支持500个)直接根容器可写层合并到挂载点,不存在硬链接导致的 inode 消耗过多问题。

    Overlay FS 相比于AUFS的优点:

    1. 支持页缓存(Page caching)共享,多个容器访问同一个文件,可以共享一个或多个页缓存;
    2. copy_up 操作快,因为 overlay 只有两层,而 AUFS 有很多层(最多不能超过127层),文件穿越多层较为耗时;
    3. 代码融入到 Linux 内核中,广泛支持各 Linux 发行版。

    AUFS

    AUFS(Another/Alternative/Advance UnionFS),重写自 UnionFS 1.x,使用上完全兼容 UnionFS,未进入 Linux内核,仅在部分 Linux 发行版中(比如 Debian、Ubuntu)。

    多个目录(或曰 branch)挂载到同一个挂载点时,默认上层目录可读可写(rw),下层目录只读(ro),可以对目录指定权限;对于重复的文件,修改时只会修改上层目录的文件。

    删除文件时,如果是上层的文件会被直接删除;而对于下层文件,因为一般是只读,无法删除,所以 AUFS 通过在上层目录中增加一个 whiteout 文件,隐藏下层文件。

    软链接和硬链接

    在 Linux 文件系统中,文件通过 inode(节点索引编号)唯一区分。文件分为元数据(metadata)和数据域(data block),而 inode 唯一指向数据域。

    硬链接(Hard link)就是在同一个文件系统中,文件名不同,但 inode 一样的文件副本;软链接(Soft link, or symbolic link)则是另一个文件,inode 不同,但 inode 指向的数据域中存放的是所链接文件的路径。

    硬链接可以防止文件误删除,因为在 Linux 中一个文件的数据域被删除,当且仅当其 inode 的引用为 0,也就是必须删除该文件的所有硬链接,该文件才会被最终删除。

    软链接则不同,当所链接文件被删除时,链接也会失效。

    在 Linux 中进行链接的命令如下:

    # 软链接
    ln -s source target
    # 硬链接
    ln source target
    

    参考

    1. 深入理解overlayfs(一):初识
    2. Docker存储驱动之AUFS简介
    3. Docker镜像原理 aufs overlay overlay2
    4. Docker Storage Driver:存储驱动
  • 相关阅读:
    如何使用参数给 Scrapy 爬虫增加属性
    如何正确在 PyCharm 中调试 Scrapy 爬虫?
    Chrome 开发者工具的最佳用法
    Chrome 开发者工具的各种骚技巧
    跨库数据备份还原、迁移工具
    意向锁
    十六进制

    lombok @Builder注解
    什么是强引用、软引用、弱引用、虚引用?
  • 原文地址:https://www.cnblogs.com/lshare/p/16209644.html
Copyright © 2020-2023  润新知