概述
下面我们自己动手用简单的命令来创建一个AUFS文件系统,感受下如何使用AUFS和CoW实现文件管理。
实战
首先在你的实验目录下创建一个aufs的文件夹,然后在aufs目录下创建一个mnt的文件夹做过挂载点。接着在aufs目录下创建一个叫container-layer的文件夹,里面有一个名为container-layer.txt的文件,文件内容为I am container layer。同样地,继续在aufs目录下创建4个名为image-layer{n}.txt的文件,文件内容为I am image layer${n}。使用如下命令检查文件内容:
root@VM-0-10-ubuntu:~/aufs# ls
container-layer image-layer1 image-layer2 image-layer3 image-layer4 mnt
root@VM-0-10-ubuntu:~/aufs#
root@VM-0-10-ubuntu:~/aufs#
root@VM-0-10-ubuntu:~/aufs# cat image-layer1/image-layer1.txt
I am image layer 1
root@VM-0-10-ubuntu:~/aufs# cat image-layer2/image-layer2.txt
I am image layer 2
root@VM-0-10-ubuntu:~/aufs# cat image-layer3/image-layer3.txt
I am image layer 3
root@VM-0-10-ubuntu:~/aufs# cat image-layer4/image-layer4.txt
I am image layer 4
要联合的文件目录都已经准备好了,接下来我们把container-layer和4个名为image-layer${n}的文件夹使用aufs的方式来挂载到刚刚创建的mnt目录下。在mount aufs的命令中,我们没有指定待挂载的5个文件夹的权限,默认行为是,dirs指定的左边起第一个目录是read-write权限,后续的都是read-only权限。
root@VM-0-10-ubuntu:~/aufs# sudo mount -t aufs -o dirs=./container-layer:./image-layer4:./image-layer3:./image-layer2:./image-layer1 none ./mnt
root@VM-0-10-ubuntu:~/aufs# tree mnt
mnt
|-- container-layer.txt
|-- image-layer1.txt
|-- image-layer2.txt
|-- image-layer3.txt
`-- image-layer4.txt
0 directories, 5 files
大家还记得上文中我们曾经在系统aufs目录下去查看文件的读写权限吗?这里我们依然使用cat /sys/fs/aufs/si_fe6d5733e85e5904/* 命令来确认新mount的文件系统中每个目录的权限。(注意si_fe6d5733e85e5904应该是系统为这个mnt挂载点新创建的,而非在介绍Docker和AUFS里面提到的那个文件夹)根据输出我们可以清楚地看到,只有container-layer文件夹是read-write的,其余都是read-only权限。
root@VM-0-10-ubuntu:~/aufs# cat /sys/fs/aufs/si_48bad3544db2de9/*
/root/aufs/container-layer=rw
/root/aufs/image-layer4=ro
/root/aufs/image-layer3=ro
/root/aufs/image-layer2=ro
/root/aufs/image-layer1=ro
64
65
66
67
68
/root/aufs/container-layer/.aufs.xino
下面我们要执行一个有意思的操作,往mnt/image-layer1.txt文件末尾添加一行文字“write to mnt's image-layer1.txt”。根据上面我们介绍的CoW技术,大家猜想下会产生什么样的行为。
echo -e "\nwrite to mnt's image-layer1.txt" >> ./mnt/image-layer4.txt
root@VM-0-10-ubuntu:~/aufs# cat mnt/image-layer4.txt
I am image layer 4
write to mnt's image-layer1.txt
root@VM-0-10-ubuntu:~/aufs# cat image-layer4/image-layer4.txt
I am image layer 4
root@VM-0-10-ubuntu:~/aufs# ls container-layer/
container-layer.txt image-layer4.txt
root@VM-0-10-ubuntu:~/aufs# cat container-layer/image-layer4.txt
I am image layer 4
write to mnt's image-layer1.txt