0
点赞
收藏
分享

微信扫一扫

Docker与Linux UnionFS 自己动手写AUFS

飞鸟不急 2021-09-24 阅读 77
PaaS

概述

下面我们自己动手用简单的命令来创建一个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
举报

相关推荐

0 条评论