1.软文推荐

2.软文推荐

3.软文推荐

AUFS是一种联合文件系统。它使用同一个Linux host上的多个目录,逐个堆叠起来,对外呈现出一个统一的文件系统。AUFS使用该特性,实现了Docker镜像的分层。下图展示出ubuntu:latest的镜像的分层。

Union File System

Union File System,简称 UnionFS,是一种为 Linux、FreeBSD 和 NetBSD 操作系统设计的,把其它文件系统联合到一个联合挂载点的文件系统服务。它使用 branch 把不同文件系统的文件和目录”透明地”覆盖,形成一个单一一致的文件系统。这些 branch 或者是 read-only 的,或者是 read-write 的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中。看起来这个虚拟后的联合文件系统是可以对任何文件进行操作的,但是其实它并没有改变原来的文件。这是因为 Union File System 用到了一个重要的资源管理技术:写时复制。

写时复制(copy-on-write,常被简写为 CoW),也叫隐式共享,是一种提高资源使用效率的资源管理技术。它的思想是:如果一个资源是重复的,在没有对资源做出修改前,并不需要立即复制出一个新的资源实例,这个资源被不同的所有者共享使用。当任何一个所有者要对该资源做出修改时,复制出一个新的资源实例给该所有者进行修改,修改后的资源成为其所有者的私有资源。通过这种资源共享的方式,可以显著地减少复制相同资源带来的消耗,但是这样做也会在进行资源的修改时增加一部分开销。

创建 AUFS

我们可以通过 mount 命令手动创建 AUFS,接下来我们就用这种方式来演示 AUFS 的主要特征。

创建演示用的目录和文件

先创建一个名称为 aufs 的文件夹用作实验目录:

$ mkdir aufs

然后在 aufs 中创建名称为 mnt 的目录作为文件系统的挂载点:

$ mkdir aufs/mnt

接下来在 aufs 目录下创建 container-layer 文件夹(模拟容器的读写层),并且在文件夹中创建文件 container-layer.txt,文件的内容初始化为 “I am container layer”:

$ mkdir aufs/container-layer
$ echo "I am container layer" > aufs/container-layer/container-layer.txt

最后在 aufs 目录下创建三个文件夹 image-layer1、image-layer2、image-layer3(用它们来模拟容器的镜像层)。在这三个文件夹中分别创建文件,并初始化为对应的内容:

$ mkdir aufs/{image-layer1,image-layer2,image-layer3}
$ echo "I am image layer 1" > aufs/image-layer1/image-layer1.txt
$ echo "I am image layer 2" > aufs/image-layer2/image-layer2.txt
$ echo "I am image layer 3" > aufs/image-layer3/image-layer3.txt

准备的目录和文件结构如下图所示:

创建 AUFS 文件系统

mount 是一个非常强大的命令,我们可以用它来创建 AUFS 文件系统。下面的命令把 container-layer、image-layer1、image-layer2、image-layer3 以 AUFS 的方式挂载到刚才创建的 mnt 目录下:

cd aufs
$ sudo mount -t aufs -o dirs=./container-layer:./image-layer1:./image-layer2:./image-layer3 none ./mnt

挂载完成后可以看到 mnt 目录下的文件结构为:

注意,在 mount 命令中我们没有指定要挂载的 4 个文件夹的权限信息,其默认行为是:dirs 指定的左边起第一个目录是 read-write 权限,后续目录都是 read-only 权限。我们可以通过下面的方式查看详情:

其中的 si_99b90cdd124201eb 目录是系统为 mnt 这个挂载点创建的,从上图中我们可以清楚的看到各个目录的挂载权限。

验证写时复制

下面让我们向 mnt/image-layer2.txt 文件中写入些数据,看看会发生什么变化?

echo "I changed mnt/image-layer2.txt" >> mnt/image-layer2.txt

查看 mnt/image-layer2.txt 的内容,发现已经变化了:

I am image layer 2
I changed mnt/image-layer2.txt

再去看看 image-layer2/image-layer2.txt,发现它的内容没有变化,还是:

I am image layer 2

原因在哪里呢?去 container-layer 目录下看看:

这里多了一个 image-layer2.txt 文件,其内容如下:

原来,当尝试向 mnt/image-layer2.txt 中写入文件时,系统首先在 mnt 目录下查找名为 image-layer2.txt 的文件,将其拷贝到 read-write 层的 container-layer 目录中,接着对 container-layer 目录中的 image-layer2.txt 的文件进行写操作。这个过程也就是 AUFS 的实际工作原理。

至此,我们完成了一个简单的 AUFS demo。可以看出 AUFS 的原理并不是很复杂,但是当与容器技术相结合后,就展示出来超强的魅力,并成为初代 docker 默认的存储驱动。虽然当前 docker 默认的存储驱动已经演进到了 overlay2,但是学习 AUFS 依然可以帮助我们深入理解 docker 中的文件系统。

本文来源:www.lxlinux.net/8648.html,若引用不当,请联系修改。

相关文章 8

1

locvps新上架韩国vps(Locvps) 2分钟前

目录:1、韩国VPS服务器去哪里租用?2、韩国vps服务器哪家好3、韩国vps多少钱一年4、哪里的韩国vps比较好,要速度快的稳定的,最好重装系...

2

详解grep命令使用实例 3分钟前

grep命令是文本搜索命令,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字,本篇文章重点为大家讲解一下grep命令使用...

3

上海vps(上海vps起火) 6分钟前

目录:1、为什么我买的上海美橙VPS橙云主机,网速总是一会卡,一会畅通的。2、vps租用价格-上海vps 办理3、vps有哪些特征?4、谁有VPS的使...

4

Foundation 分页简介 7分钟前

如果你的网页有很多内容,就需要使用分页功能。 创建一个基础的分页功能需要在 元素上加上 .pagination 类: 实例 "pagination">"#">1"#">2"#">3"#"...

6

Linux系统Makefile使用教程(非常详细) 11分钟前

Makefile 是和 make 命令一起配合使用的.很多大型项目的编译都是通过 Makefile 来组织的, Makefile的组织流程的能力如此之强, 不仅可以用来编译项...

7

宜昌云服务器(宜昌云计算中心地址) 13分钟前

目录:1、云计算服务器要多少钱?2、试用的云服务器3、购买云计算服务器哪家便宜些?4、哪种云服务器便宜云计算服务器要多少钱? 租一...

8

Linux 中使用 sFTP 进行上传、下载文件 14分钟前

sftp是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,它的默认端口和SSH一样为22。sftp通过使用加...