Union File System
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
创建文件目录,在aufs目录下创建mnt(挂载点),container-layer,以及4个image-layer【x】(x是1-4)。

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

查询文件的权限

可以看到第一个是rw 其他都是ro。
- 修改文件
查看mnt 下的image-layer1.txt和 文件夹image-layer1下的该文件。

两者是一样的。
我们对mnt下的某一个文件进行修改(image-layer1.txt)

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

两者是不一样的。
由此可以看出,对mnt 里的的文件修改并不影响对原文件的修改,那么修改后的文件到底去哪里了呢?
第一个container-layer文件的权限是rw。我们去里面看看.

果然在里面。这就清楚多了。当要修改文件的时候,将文件复制一份
放到container下面即可,之后我们就不是共享原来的文件了,而是拥有了自己的文件。
以上就是AUSF的部分内容。
Union File System的更多相关文章
- 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进程 ...
- MIT6.828 La5 File system, Spawn and Shell
Lab 5: File system, Spawn and Shell 1. File system preliminaries 在lab中我们要使用的文件系统比大多数"真实"文件 ...
- Design and Implementation of the Sun Network File System
Introduction The network file system(NFS) is a client/service application that provides shared file ...
- 乌版图 read-only file system
今天在启动虚拟机的时候,运行命令svn up的时候,提示lock,并且read-only file system,这个....我是小白啊,怎么办?前辈在专心写代码,不好打扰,果断找度娘啊 于是乎,折腾 ...
- 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 ...
- 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 ...
- Linux 执行partprobe命令时遇到Unable to open /dev/sr0 read-write (Read-only file system)
在使用fdisk创建分区时,我们会使用partprobe命令可以使kernel重新读取分区信息,从而避免重启系统,但是有时候会遇到下面错误信息"Warning: Unable to open ...
- 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]
1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...
- Linux File System
目录 . Linux文件系统简介 . 通用文件模型 . VFS相关数据结构 . 处理VFS对象 . 标准函数 1. Linux文件系统简介 Linux系统由数以万计的文件组成,其数据存储在硬盘或者其他 ...
随机推荐
- js 如何判断浏览器是否禁用cookie
语法:navigator.cookieEnabled: 如果浏览器启用了cookie,该属性值为true.如果禁用了cookie,则值为false. navigator: JavaScript中的一个 ...
- AsyncTask 简要介绍
当Android的UI线程超过5s未响应时,系统会引发ANR(Application Not Responding)异常,所以一般不在UI线程中执行耗时任务.一般是在其他线程中处理耗时任务,然后及时更 ...
- 学渣乱搞系列之dp斜率优化
学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...
- oracle 11g sql developer安装后无法使用
oracle11g安装后出现 再去官网单独下来个sql developer安装 sql developer须要jre支持
- emitter 增强 多条件触发
;(function(global ,undefined){ var evts = {} ,onceTag = '__event_once' function emit(event ){ ) if ( ...
- Git-删除本地文件夹的repository(本地仓库)
安装git软件后.有些文件夹里会出现带有?的图标,右键菜单上会有"Git-Sync"或者"Git-Commit"等命令:正常的应该是"Git-Clon ...
- awk双文件互相匹配查找
awk双文件互相匹配查找 要求: 文件a: 10/05766798607,11/20050325191329,29/0.1,14/05766798607 10/05767158557,11/200 ...
- iOS开发 之 不要告诉我你真的懂isEqual与hash!
目录 为什么要有isEqual方法? 如何重写自己的isEqual方法? 为什么要有hash方法? hash方法什么时候被调用? hash方法与判等的关系? 如何重写自己的hash方法? 为什么要有i ...
- matplotlib 可视化 —— matplotlib.patches
官方帮助文档 patches - Matplotlib 1.5.1 documentation patches 下主要包含的常用图形类有: Eclipse Circle Wedge 1. plt.gc ...
- Linux就该这么学 20181002(第二章基础命令)
参考链接https://www.linuxprobe.com/ 忘记密码操作 启动页面 默认按e 在linux16行后空格 rd.break ctrl + x mount -o remount,rw ...
