Union File System

Union File System, 简称UnionFS,是一种为Linux,FreeBSD,和NetBSD操作系统设计的把其他文件系统联合挂载到一个挂载点的文件系统服务。

它通过使用branch把不同文件系统的文件和目录覆盖,形成一个一致的文件系统。这些branch是只读或者只写的。当对文件进行写操作时候,才会真正的复制

文件进行写操作。实际上本身没有对原来的文件进行修改,可以看做是共享了原来的文件。在写的时候进行修改用到了一种资源管理技术成为写时复制。

写时复制(copy-on write,CoW),也叫作隐式共享,如果一个资源是重复的,那我们没有必要去在拷贝一份。只需要将唯一的一份共享给不同的对象。当某一个对象

需要去修改这个资源时,再去重新复制一份对新复制的进行修改。通过资源共享,可以减少未修改资源复制带来的消耗。在mapbit的垃圾回收算法中也会用到。

AUFS

AUFS ,英文全称是 Advanced Multi-Layered Unification Filesystem ,曾经也叫Acronym Multi-Layered Unification Filesystem 、 Another Multi-Layered Unification Filesystem 。

AUFS 完全重写了早期的 UnionFS 1 .x ,其主要目的是为了可靠性和性能 , 井且引入了 一 些新的功能,比如可写分支的负载均衡 。 AUFS的一些实现已经被纳入UnionFS 2.x 版本。

Docker是如何使用AUFS的

AUFS是docker的第一种存储驱动。AUFS具有快速启动容器、高速利用存储和内存的优点。

image layer 和 AUFS (docker版本不同可能会有区别,我的是在/var/lib/docker下的其他文件夹中)

每一个Docker image都是由一系列read-only layer组成的。image layer的内容都存储在Docker hosts filesystem的/var/lib/docker/aufs/diff目录下.

而/var/lib/docker/aufs/layers目录,则存储着image layer如何堆找这些layer的metadata 。

在装有Docker的机器上执行如下命令

root@leon:/var/lib/docker/overlay2#

什么都没有

拉取镜像后,可以看到在docker pull中的结果显示ubuntu : l5.04镜像一共有4个layer,在
执行命令的结果中也有4个对应的存储文件目录。

container layer 和AUFS(docker版本不同可能会有区别,我的是在/var/lib/docker下的其他文件夹中)

docker使用写时复制,就是说每一点小小的修改都会被复制。但是docker是有很多layer的,修改的只是layer(对以前的layer进行屏蔽,并没有删除)。

这样就避免了复制大文件。对于一个容器而言每个image layer最多只需要复制一次。后续的改动都会在第一次拷贝的 container layer上进行 。

如果要删除file时,AUFS会在container的read-write层生成一个.wh.file文件来隐藏所有 read-only层的file文件。

可以看到新产生的文件夹。里面有各种各样样的配置文件。

写一个AUFS

  1. 创建文件目录,在aufs目录下创建mnt(挂载点),container-layer,以及4个image-layer【x】(x是1-4)。

  2. 将其他文件挂载到刚才创建的mnt上。在mount aufs命令中,没有指定待挂在的5个文件夹的权限,默认的行为是dirs指定的左边第一个目录是

    read-write权限,后续都是read-only权限。

查询文件的权限

可以看到第一个是rw 其他都是ro。

  1. 修改文件
  • 查看mnt 下的image-layer1.txt和 文件夹image-layer1下的该文件。

    两者是一样的。

  • 我们对mnt下的某一个文件进行修改(image-layer1.txt)

  • 对比修改后两个文件的状态

    两者是不一样的。

由此可以看出,对mnt 里的的文件修改并不影响对原文件的修改,那么修改后的文件到底去哪里了呢?

第一个container-layer文件的权限是rw。我们去里面看看.

果然在里面。这就清楚多了。当要修改文件的时候,将文件复制一份
放到container下面即可,之后我们就不是共享原来的文件了,而是拥有了自己的文件。

以上就是AUSF的部分内容。

Union File System的更多相关文章

  1. MIT-6.828-JOS-lab5:File system, Spawn and Shell

    Lab 5: File system, Spawn and Shell tags: mit-6.828 os 概述 本lab将实现JOS的文件系统,只要包括如下四部分: 引入一个文件系统进程(FS进程 ...

  2. MIT6.828 La5 File system, Spawn and Shell

    Lab 5: File system, Spawn and Shell 1. File system preliminaries 在lab中我们要使用的文件系统比大多数"真实"文件 ...

  3. Design and Implementation of the Sun Network File System

    Introduction The network file system(NFS) is a client/service application that provides shared file ...

  4. 乌版图 read-only file system

    今天在启动虚拟机的时候,运行命令svn up的时候,提示lock,并且read-only file system,这个....我是小白啊,怎么办?前辈在专心写代码,不好打扰,果断找度娘啊 于是乎,折腾 ...

  5. File system needs to be upgraded. You have version null and I want version 7

    安装hbase时候报错: File system needs to be upgraded. You have version null and I want version 7 注: 我安装的hba ...

  6. Linux系统启动错误 contains a file system with errors, check forced解决方法

    /dev/sda1 contains a file system with errors, check forced./dev/sda1: Inodes that were part of a cor ...

  7. Linux 执行partprobe命令时遇到Unable to open /dev/sr0 read-write (Read-only file system)

    在使用fdisk创建分区时,我们会使用partprobe命令可以使kernel重新读取分区信息,从而避免重启系统,但是有时候会遇到下面错误信息"Warning: Unable to open ...

  8. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  9. Linux File System

    目录 . Linux文件系统简介 . 通用文件模型 . VFS相关数据结构 . 处理VFS对象 . 标准函数 1. Linux文件系统简介 Linux系统由数以万计的文件组成,其数据存储在硬盘或者其他 ...

随机推荐

  1. 最近邻插值法&线性插值&双线性插值&三线性插值

    最近邻插值法nearest_neighbor是最简单的灰度值插值.也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值. 造成的空间偏移误差为像素单位,计算简单,但不够精确.但当图像 ...

  2. Mysql ERROR 1067: Invalid default value for 字段

    问题: //今天把一个数据库的sql文件导入到另一个数据库出现以下异常: Mysql ERROR 1067: Invalid default value for 字段 //原因是因为之前导出数据里面有 ...

  3. webpack安装,npm WARN optional SKIPPING OPTIONAL DEPENDENCY,npm WARN notsup SKIPPING OPTIONAL DEPENDENCY警告

    npm install webpack -g//全局安装webpack 电脑上安装完后: 其中有两个警告: npm WARN optional SKIPPING OPTIONAL DEPENDENCY ...

  4. jquery queryBuilder过滤插件的使用

    1.此插件用于过滤搜索的功能,功能强大,可实现复杂条件过滤,单选多选的等条件的过滤.还可以在插件中调用其他插件. 下载地址和文档阅读:http://querybuilder.js.org/ 效果图: ...

  5. ubuntu18.04crontab定时任务不执行

    环境介绍: 本人使用python写了一个自动化提交巡检的脚本放在服务器上,使用crontab去执行脚本的时候动作并没有执行,查看crontab日志时也不存在这个日志文件.如何如排查呢? 解决方案: 步 ...

  6. Mysql字段合并

    现有数据 合并字段显示:利用GROUP_CONCAT(course,":","score") 严格区分大小写!GROUP_CONCAT 复制代码 SELECT ...

  7. jQuery 事件流的概念

    jQuery  事件流的概念 什么是事件流 DOM事件流 1. 事件捕获阶段; 2.处于目标阶段; 3.事件冒泡阶段; <!DOCTYPE html> <html lang=&quo ...

  8. Qt之二维码扫描

    简述 二维码(QR Code)是用某种特定的几何图形按一定规律在平面(二维方向)分布的黑白相间的图形记录数据符号信息的.是所有信息数据的一把钥匙.应用十分广泛,如:产品防伪/溯源.广告推送.网站链接. ...

  9. POJ 2480

    可以容易得知,F=sum(p*phi(n/p)).思路就断在这里了... 看过别人的,才知道如下: 由于gcd(i,n*m)=gcd(i,m)*gcd(i,n),所以gcd为积性函数.而积性函数之和为 ...

  10. Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    时隔一周多,因为一些别的事情绊住了,下面接着写.中间这段时间也有看官方文档,发现正如他所说90%的基础内容都一样,所以这里直接跳到我比较关注的东东上,要是想看看哪些不一样,可以参考这个http://v ...