zoukankan      html  css  js  c++  java
  • 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 "
    write 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》
  • 相关阅读:
    工具
    选择排序
    c#中queue的用法
    c#加密
    话谈c#拷贝
    const与readonly的区别
    WinForm中使MessageBox实现可以自动关闭功能
    c#winform关闭窗口时触发的事件
    委托
    C# STA和MTA线程设置
  • 原文地址:https://www.cnblogs.com/kkbill/p/12944271.html
Copyright © 2011-2022 走看看