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. ThoughtWorks 技术雷达(2013年5月)

    ThoughtWorks技术雷达(2013年5月) 作者ThoughtWorks技术战略委员会 发布于 六月 25, 2013| 讨论 新浪微博腾讯微博 豆瓣网 Twitter Facebook li ...

  2. Flex tree展开节点问题!

    问题: 使用 for each(var item:XML in menuTree.dataProvider) {     menuTree.expandChildrenOf(item,true);   ...

  3. 洛谷4623 [COCI2012-2013#6] BUREK

    题目描述 给定N个三角形,和M条直线,直线要么平行于X轴,要么平行于Y轴,问这M条直线 分别经过多少个三角形内部 (注意是内部即分开的两个多边形的面积均大于零). 输入输出格式 输入格式: 第一行一个 ...

  4. Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案

    Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案 解决方式:安装 "babel-polyfill" 即可. 命令:npm install --save-dev ...

  5. 通过wget下载tomcat

    wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.42/bin/apache-tomcat-8.0.42.tar.gz 注意:下载之前确 ...

  6. thinkphp 同一字段不同查询条件实现

    搞定了 另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:$map['name'] = array(array('like','%a%'), array('like',' ...

  7. UVALIVE 4256 Salesmen

    Salesmen Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ...

  8. Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误

    Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误 后来发现是POM文件写错了,修改为正确的pom,就可以了: POM ...

  9. 代理模式之cglib动态代理

    上一篇博客说了实现InvocationHandler接口的jdk动态代理,还有一种实现动态代理的方式则是:通过继承的方式实现的cglib动态代理. 先在程序中导入cglib的包,cglib-nodep ...

  10. java web 服务器端处理json格式参数

    前面我们说了传递参数的两种访书,第一是key-value形式,第二是json格式,对于第一种我们在服务器端直接使用 request.getParameter("key");就能获取 ...