AUFS文件系统简单实验

本节通过一个简单的例子理解如何使用AUFS和CoW实现文件管理。

AUFS是Advanced Multi-Layered Unification Filesystem(高级多层统一文件系统)的简称。

本实验在aufs目录下进行。

1、文件准备。在当前目录下,分别创建container-layer、image-layer{i}(i=1-4) 、以及mnt文件夹。其中mnt内为空,而container-layer和image-layer{i}文件夹下分别包含一个文件,显示如下。

[kkbill@ubuntu aufs]$ ls
container-layer  image-layer1  image-layer2  image-layer3  image-layer4  mnt
[kkbill@ubuntu aufs]$ tree .
.
├── container-layer
│   ├── container-layer.txt
├── image-layer1
│   └── image-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
├── image-layer4
│   └── image-layer4.txt
└── mnt
[kkbill@ubuntu aufs]$ cat container-layer/container-layer.txt 
I am container layer
[kkbill@ubuntu aufs]$ cat image-layer1/image-layer1.txt 
I am image layer 1
[kkbill@ubuntu aufs]$ cat image-layer2/image-layer2.txt 
I am image layer 2
[kkbill@ubuntu aufs]$ cat image-layer3/image-layer3.txt 
I am image layer 3
[kkbill@ubuntu aufs]$ cat image-layer4/image-layer4.txt 
I am image layer 4

2、把container-layer和4个名为image-layer的文件夹用AUFS的方式挂载到空的mnt目录下。执行如下命令:

# mount -t aufs -o dirs=./container-layer:./image-layer4:./image-layer3:./image-layer2:./image-layer1 none ./mnt

mount命令用于加载文件系统到指定的加载点。在这里,没有指定待挂载的5个文件夹的权限,默认的行为是, dirs 指定的左边起第一个目录是 read-write 权限, 后续的都是 read-only 权限。

成功挂载后,如下:

[root@ubuntu aufs]# tree mnt
mnt
├── container-layer.txt
├── image-layer1.txt
├── image-layer2.txt
├── image-layer3.txt
└── image-layer4.txt

并查看新挂载的文件系统中每个目录的权限,如下:

[root@ubuntu aufs]# cat /sys/fs/aufs/si_466c572751ea99b5/*
/go/src/github.com/kkBill/mydocker/aufs/container-layer=rw  # --> 读写
/go/src/github.com/kkBill/mydocker/aufs/image-layer4=ro     # --> 只读
/go/src/github.com/kkBill/mydocker/aufs/image-layer3=ro
/go/src/github.com/kkBill/mydocker/aufs/image-layer2=ro
/go/src/github.com/kkBill/mydocker/aufs/image-layer1=ro
64
65
66
67
68
/go/src/github.com/kkBill/mydocker/aufs/container-layer/.aufs.xino

可以看到,只有container-layer文件夹是read-write的,其余都是read-only权限。

3、接下来我们在mnt/image-layer1.txt文件中写入一行文字。

[root@ubuntu aufs]# echo -e "\nwrite to mnt's image-layer1.txt" >> ./mnt/image-layer1.txt 

我们去查看mnt/image-layer1.txt文件,发现内容确实发生了变化,但是在image-layer1/image-layer1.txt中的内容却没有发生变化。

[root@ubuntu aufs]# cat ./mnt/image-layer1.txt 
I am image layer 1

write to mnt's image-layer1.txt
[root@ubuntu aufs]# cat image-layer1/image-layer1.txt 
I am image layer 1

而在container-layer文件夹下,却多出了一个image-layer1.txt文件,其内容同mnt/image-layer1.txt 一样。

[root@ubuntu aufs]# ls container-layer/
container-layer.txt  image-layer1.txt

也就是说,当尝试向 mnt/image-layer1.txt 文件进行写操作的时候,系统首先在 mnt 目录下查找名为 image-layer1.txt 文件,将其拷贝到 read-write 层的 container-layer目录中,接着对container-layer 目录中的 image-layer1.txt文件进行写操作。


参考:

  • 《自己动手写Docker》
posted @ 2020-05-23 20:22  kkbill  阅读(368)  评论(0编辑  收藏  举报