DOCKER基础技术:AUFS

本文的大部分内容来自 coolshell,我只是为了理解与学习,将这篇内容重新写了一遍

0X00 简介 AUFS 是什么

AUFS 是一种 Union FIle System,可以用来把不同物理位置的东西合并到同一个目录下面(后面会给具体例子!),为了显示自己很牛逼,A 从原来的 Another 变成了 之后的 Advance

接下来通过一个例子学习 AUFS

现在我们有三个文件夹(如下所示),mnt 是空文件夹:

➜  mount : ✗ tree
.
├── A
│   ├── a
│   └── c
├── B
│   ├── b
│   └── c
└── mnt

现在我们通过 aufs 将 A B 合并在一起:

mount git:(master) ✗ sudo mount -t aufs -o br=./A:./B none ./mnt

现在再看 mnt 文件夹:

➜  mnt ls
a  b  c

这就是 AUFS 啦!

0X01 AUFS 的一些小疑问

在 0X00 中你会发现两个文件夹中有一个文件名字一样:

在多次测试后我们会发现:

可见,如果有重复的文件名,在mount命令行上,越往前的就优先级越高

0X02 如何使用——AUFS 的几个例子

首先来看最基础的用法:

 mount -t aufs -o br=./A:./B none ./mnt

前面的 -t -o 基本不变,br 就是不同的目录,中间用 : 分隔。none 是表示没有任何与之相关的设备

添加每个分支的权限

可在每个分支的后面添加=<权限>,比如:

mount -t aufs -o br=./A=rw:./B none ./mnt
  • rw 表示可写可读 read-write。
  • ro 表示 read-only,如果你不指权限,那么除了第一个外 ro 是默认值,对于 ro 分支,其永远不会收到写操作,也不会收到查找 whiteout 的操作。
  • rr 表示 real-read-only,与 read-only 不同的是,rr 标记的是天生就是只读的分支,这样,AUFS 可以提高性能,比如不再设置 inotify 来检查文件变动通知。

解释 whiteout

whiteout 就是隐藏文件的意思。

举个例子:

➜  mount git:(master) ✗ tree
.
├── A
│   ├── a
│   └── c
├── B
│   ├── b
│   └── c
└── mnt

现在要给 mnt 联合挂载:

➜  mount git:(master) ✗ sudo mount -t aufs -o br=./A=rw:./B=ro none ./mnt

如果删除掉 b,但是 B 是只读的,会发生什么?

➜  mnt rm b
➜  mnt ls
a  c

b 没有了,但是 B 里面还是有 b。

这个操作的本质是:

在上层的可写的目录下建立对应的 whiteout 隐藏文件来实现的

所以 rm b 等价于:

现在我们在权限为 rw 的 test 目录下建个 whiteout 的隐藏文件 .wh.b,你就会发现 ./mnt/b这个文件就消失了:

➜  mnt ls
a  b  c
➜  A touch  .wh.b
➜  mount cd mnt 
➜  mnt ls
a  c

这就是 whiteout。

0X03 一些高级操作

通过添加 udba 参数选择是否监听源文件

  • udba=none – 设置上这个参数后,AUFS 会运转的更快,因为那些不在 mount 目录里发生的修改,aufs 不会同步过来了,所以会有数据出错的问题。
  • udba=reval – 设置上这个参数后,AUFS 会去查文件有没有被更新,如果有的话,就会把修改拉到 mount 目录内。
  • udba=notify – 这个参数会让 AUFS 为所有的 branch 注册 inotify,这样可以让 AUFS 在更新文件修改的性能更高一些。

选择保存文件的目录

如果 br 中只有一个 rw 的目录,那么所有的修改就会保存在那。如果有多个 rw 的 br 会怎么样?

aufs提供了一个叫create的参数可以供你来配置相当的创建策略,下面有几个例子

  • create=rr | round−robin 轮询。下面的示例可以看到,新创建的文件轮流写到三个目录中
hchen$ sudo mount -t aufs  -o dirs=./1=rw:./2=rw:./3=rw -o create=rr none ./mnt
hchen$ touch ./mnt/a ./mnt/b ./mnt/c
hchen$ tree
.
├── 1
│   └── a
├── 2
│   └── c
└── 3
    └── b
  • create=mfs[:second] | most−free−space[:second] 选一个可用空间最好的分支。可以指定一个检查可用磁盘空间的时间。
  • create=mfsrr:low[:second] 选一个空间大于low的branch,如果空间小于low了,那么aufs会使用 round-robin 方式。

就学习了这么多!完结撒花!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • AUFS是一种 Union File System,所谓 UnionFS 就是把不同物理位置的目录合并 mount...
    51reboot阅读 797评论 0 0
  • 0.前言 前面我们讨论了Docker容器实现隔离和资源限制用到的技术Linux namespace 、Linux ...
    _一叶_阅读 11,892评论 1 13
  • docker基础-镜像 docker公司在实现docker镜像时并没有沿用以前只做roots的标准流程,而是做了一...
    大头柒阅读 551评论 0 1
  • 数据结构知识点 文章中所有的数据结构都是用伪C,数据结构用C语言实现的,如果有文章有什么错误,请及时联系我(QQ:...
    WangXiaoNao123阅读 813评论 0 0
  • 2015-12-08 23:16 之前看过一段话,大概意思是,我想过很多遍什么是最好的爱 如果前方有一条我曾跌得面...
    冇人阅读 190评论 0 0