AUFS简单介绍
本文介绍了docker文件系统的实现方式之一AUFS。
AUFS(Advance UnionFS)是一种文件联合系统,可以把不同物理位置的目录合并到同一个目录下面, 然后在这个目录下进行更改并将修改存放在这个目录下,而对其他目录下的文件都是只读的。
AUFS几个特点:
- AUFS是一种联合文件系统,它把若干目录按照顺序和权限mount为一个目录并呈现出来
- 默认情况下,只有第一层目录是可写的,其他目录都只是可读
- 增加文件:新添加的文件存在于最上层的目录下
- 删除文件:利用writeout机制,通过在最上层的目录建立对应下层文件的writeout隐藏文件实现
- 修改文件:使用CoW(Copy on Write)特性,将需要修改的文件拷贝到最上层目录下再进行修改
- 节省空间:CoW特性允许在多个容器之间共享分层,从而可以减少物理空间占用
- 查找文件:层数多了之后查找文件的性能会出现下降
- 性能:由于CoW特性,在第一次写入大型文件时会出现延迟
linux的rootfs和bootfs:
每个Linux系统都至少需要两个文件系统。
bootfs(boot file system):包含boot loader和kernel,所有同样内核的linux不同发行版的bootfs都是一致的,用户一般不会进行修改这个文件系统。在系统启动过程完成后,整个内核被加载进了内存,bootfs就会从内存中卸载释放内存。
rootfs(root file system):包含常见的目录结构,/dev,/etc,/proc等所有配置文件,二进制文件和库文件。这个文件系统不同的linux发行版是不同的。linux启动时,rootfs是只读的,启动完成后就变成可读写了。
在docker中,基础镜像中的rootfs一直保持只读模式,docker利用aufs在这个rootfs上增加更多的只读文件系统,最后看起来就像一个文件系统即该容器的rootfs。在一个linux系统中,所以docker容器共享主机系统的bootfs即linux内核,每个容器都有自己的rootfs。除了aufs外,docker还支持btrfs、devicemapper、vfs和overlayFS,可以在docker配置文件中进行更改,ubuntu默认是用aufs的,centos和redhat用的是devicemapper,可以通过docker info命令查看自己的storage driver。
Written on November 14, 2017