文件系统篇——篇二:aufs简介与操作

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  CSDN-Linux AUFS 文件系统Linux文件系统的的挂载与卸载(mount、umount)
  Linux文件系统之aufs

上一篇:文件系统篇——篇一:文件系统与虚拟文件系统概念简介
下一篇:文件系统篇——篇三:文件系统结构体与函数详解注释

一、aufs简介:

   aufs = Advanced Multi-layered unification filesytem = 高级多层统一文件系统.
  1.主要功能
    把多个目录结合成一个目录,对外使用。
  2.把多个目录 mount 成一个,读写操作步骤如下:(具体验证可参照:【三、实际操作】)

1.默认情况下,最上层的目录为读写层,只能有一个,下面可以有一个或者多个只读层读文件
2.读文件,从最上面一个开始往下逐层去找,打开第一个找到的文件,读取其中的内容
3.写文件,如果在最上层找到了该文件,直接打开,否则,从上往下开始查找,找到文件后,把文件复制到最上层,然后再打开这个 copy
4.删除文件:在最上层创建一个 whiteout文件,.wh.<origin_file_name>,就是在原来的文件名字前面加上 .wh.

二、操作环境:

  内容来源:CSDN-Linux查看系统与内核信息(lsb_release、uname、file)
在这里插入图片描述
  lsb_release -a命令:查询当前 Linux 系统的发行版本
  uname命令:查看系统与内核的相关信息
  file 命令:可以通过来判断系统文件(主要是系统命令)的位数,进而推断系统的位数

三、实际操作:

  内容来源:博客园-Linux模块的加载和卸载xxxx

①查看是否支持aufs:/proc/filesystems

  输入指令:cat /proc/filesystems | grep aufs,是否有输出nodev aufs,若有则表示支持,无则表示不支持。
  /proc/filesystems里存放着本台机器linux系统支持的文件挂载系统.

②查看是否已加载的模块:lsmod

  输入指令:lsmod | grep aufs,是否有输出信息,若有则表示已加载aufs,若无则表示未加载。
  lsmod命令就是通过查看/proc/modules的内容来显示模块信息。

③若未加载则加载模块:insmod 模块路径

  输入指令:sudo insmod /lib/modules/4.15.0-142-generic/kernel/fs/aufs/aufs.ko,再利用②查看是否加载成功。

④显示模块信息:modinfo 模块名

  输入指令:modinfo aufs,可查询aufs模块的详细信息,文件名包含路径:可看到里面有好多文件系统。
在这里插入图片描述

⑤创建aufs文件系统的测试环境:

xsndz@Linux:~$ mkdir aufs
xsndz@Linux:~$ mkdir aufs/mnt
xsndz@Linux:~$ mkdir aufs/container-layer
xsndz@Linux:~$ echo "I am container layer" > aufs/container-layer/container-layer.txt
xsndz@Linux:~$ mkdir aufs/{image-layer1,image-layer2,image-layer3}
xsndz@Linux:~$ echo "I am image layer 1" > aufs/image-layer1/image-layer1.txt
xsndz@Linux:~$ echo "I am image layer 2" > aufs/image-layer2/image-layer2.txt
xsndz@Linux:~$ echo "I am image layer 3" > aufs/image-layer3/image-layer3.txt
xsndz@Linux:~$ tree ./aufs/
./aufs/
├── container-layer
│   └── container-layer.txt
├── image-layer1
│   └── image-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
└── mnt

5 directories, 4 files

  1.创建一个名称为 aufs 的文件夹用作实验目录
    mkdir aufs
  2.在 aufs 中创建名称为 mnt 的目录作为文件系统的 挂载点:
    mkdir aufs/mnt
  3.在 aufs 目录下创建 container-layer 文件夹(模拟容器的读写层):
    mkdir aufs/container-layer
  4.在 container-layer文件夹中创建文件container-layer.txt,文件的内容初始化为 “I am container layer”:
    echo "I am container layer" > aufs/container-layer/container-layer.txt
  5.在 aufs 目录下创建三个文件夹 image-layer1、image-layer2、image-layer3(用它们来 模拟容器的镜像层):
    mkdir aufs/{image-layer1,image-layer2,image-layer3}
  6.在这三个文件夹中分别创建文件,并初始化为对应的内容:
    echo "I am image layer 1" > aufs/image-layer1/image-layer1.txt
    echo "I am image layer 2" > aufs/image-layer2/image-layer2.txt
    echo "I am image layer 3" > aufs/image-layer3/image-layer3.txt
  7.查看目录和文件结构:
    tree ./aufs/

⑥挂载aufs文件系统:mount

详细步骤:

xsndz@Linux:~$ cd ./aufs
xsndz@Linux:~/aufs$ sudo mount -t aufs -o dirs=./container-layer:./image-layer1:./image-layer2:./image-layer3 none ./mnt
[sudo] password for xsndz: 
xsndz@Linux:~/aufs$ tree mnt/
mnt/
├── container-layer.txt
├── image-layer1.txt
├── image-layer2.txt
└── image-layer3.txt

0 directories, 4 files
xsndz@Linux:~/aufs$ cat /sys/fs/aufs/si_dda20820420b44c8/*
/home/xsndz/aufs/container-layer=rw
/home/xsndz/aufs/image-layer1=ro
/home/xsndz/aufs/image-layer2=ro
/home/xsndz/aufs/image-layer3=ro
64
65
66
67
/home/xsndz/aufs/container-layer/.aufs.xino

  1.mount命令创建aufs文件系统,并将:container-layer、image-layer1、image-layer2、image-layer3四个文件夹挂载到mnt目录下
    cd aufs
    sudo mount -t aufs -o dirs=./container-layer:./image-layer1:./image-layer2:./image-layer3 none ./mnt
  2.查看挂载完成的mnt目录:
    tree mnt/
  3.查看文件权限:
    cat /sys/fs/aufs/si_dda20820420b44c8/*
    在mount命令中并未指定文件夹权限,其默认行为:第一个目录为读写,后续目录为只读,其中,si_dda20820420b44c8目录为系统为mnt挂载点创建的

挂载命令mount
  功能:将一个设备(通常是存储设备,可以挂载光盘、硬盘、磁带、光盘镜像文件等)挂接到一个已存在的目录上(这个目录可以不为空,但挂载后这个目录下以前的内容将不可用
1️⃣注意:
  ①单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  ②单一目录不应该重复挂载多个文件系统
  ③重点:要作为挂载点的目录,理论上应该都是空目录才行
  ④重点:系统自动挂载的信息记录在/etc/fstab文件中,只有记录到这个文件中的磁盘在系统启动时才会自动挂载。不在这个文件中记录的磁盘挂载了关机后就自动卸载,开机后又需要自己手动挂载。
2️⃣为什么③要求是空目录?
  若挂载点不为空则挂载文件系统后,挂载点目录原先所有文件/目录都会被隐藏。(卸载后又会重新出现)
3️⃣参数选项:
  ①-a:依照配置文件/etc/fstab的数据将文件内未挂载的磁盘都挂载上来
  ②-l:单纯的输入mount会显示目前挂载的信息,加上-l之后可增列Label名称
  ③-t:可以加上文件系统的种类名来指定预挂载的类型。
    mount [-t 文件系统] LABEL=’ ’ 挂载点 ===>使用磁盘的Label name来挂载磁盘
    mount [-t 文件系统] UUID=’ ’ 挂载点 ===>使用磁盘的UUID来挂载磁盘
    mount [-t 文件系统] 设备文件名 挂载点 ===>使用磁盘的设备文件名来挂载磁盘
  ④-n:在默认的情况下,系统会将实际挂载的情况即时写入/etc/mtab中,以利于其他程序的运行。但是在某些情况下(例如单人维护模式),为了避免问题会刻意不写入,此时就需要加上-n选项
  ⑤-o:后面可以接一些挂载时额外加上的参数。比如:账号、密码、读写权限等,参数查看:Linux文件系统的的挂载与卸载(mount、umount)
    loop:用来把一个文件当成硬盘分区挂接上系统
    ro:采用只读方式挂接设备
    rw:采用读写方式挂接设备

⑦验证写时复制:

详细步骤:

xsndz@Linux:~/aufs$ ls container-layer/
container-layer.txt
xsndz@Linux:~/aufs$ echo "I changed mnt/image-layer2.txt" >> mnt/image-layer2.txt
xsndz@Linux:~/aufs$ cat ./mnt/image-layer2.txt 
I am image layer 2
I changed mnt/image-layer2.txt
xsndz@Linux:~/aufs$ cat ./image-layer2/image-layer2.txt 
I am image layer 2
xsndz@Linux:~/aufs$ ls container-layer/
container-layer.txt  image-layer2.txt
xsndz@Linux:~/aufs$ cat ./container-layer/image-layer2.txt 
I am image layer 2
I changed mnt/image-layer2.txt
xsndz@Linux:~/aufs$ tree
.
├── container-layer
│   ├── container-layer.txt
│   └── image-layer2.txt
├── image-layer1
│   └── image-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
└── mnt
    ├── container-layer.txt
    ├── image-layer1.txt
    ├── image-layer2.txt
    └── image-layer3.txt

5 directories, 9 files

  1.查看container-layer目录下文件:
    ls container-layer/,发现里面有之前创建的一个文件。
  2.向mnt/image-layer2.txt文件写入数据:
    echo "I changed mnt/image-layer2.txt" >> mnt/image-layer2.txt
  3.查看./mnt/image-layer2.txt文件内容:
    cat ./mnt/image-layer2.txt,已发生改变。
  4.查看./image-layer2/image-layer2.txt文件内容:
    cat ./image-layer2/image-layer2.txt,没有发生变化
  5.查看container-layer目录下文件:
    ls container-layer/,发现里面多了文件image-layer2.txt
  6.查看./container-layer/image-layer2.txt 文件内容:
    与mnt/image-layer2.txt中文件内容一致。
  7.查看文件树结构
    tree:整体上去查看文件树的结构。
  8.总结
    原来,当尝试向 mnt/image-layer2.txt 中写入文件时,系统首先在 mnt目录下查找名为image-layer2.txt的文件,将其拷贝到read-write层的 container-layer 目录中,接着对container-layer目录中的 image-layer2.txt 的文件进行写操作。
    但并不会影响到原先目录下的文件内容:./image-layer2/image-layer2.txt
    这个过程也就是 aufs 的实际工作原理。

⑧卸载aufs文件系统:umount

xsndz@Linux:~/aufs$ sudo umount ./mnt 
[sudo] password for xsndz: 
xsndz@Linux:~/aufs$ tree
.
├── container-layer
│   ├── container-layer.txt
│   └── image-layer2.txt
├── image-layer1
│   └── image-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
└── mnt

5 directories, 5 files

  1.卸载挂载点上的aufs文件系统:
    sudo umount ./mnt
  2.查看文件树结构
    tree:整体上去查看文件树的结构。

卸载命令:umount
1️⃣注意:
  ①文件系统卸载的方式,最后可以是设备文件名也可以是挂载点(建议)。但是如果你的挂载点被另一个挂载点所挂载,则必须使用挂载点卸载
  ②如果你当前的路径在你的挂载点内,则你需要退出到当前挂载点路径外才可以卸载
2️⃣参数:
  ①-f:强制卸载,可用在类似网络文件系统(NFS)无法读取的情况下
  ②-l:立刻卸载文件系统,比-f还强
  ③-n:不更新/etc/mtab情况下卸载

⑨卸载模块:rmmod

xsndz@Linux:~/aufs$ sudo rmmod aufs
[sudo] password for xsndz: 
xsndz@Linux:~/aufs$ lsmod |grep aufs

  1.卸载模块aufs
    sudo rmmod aufs
  2.查看模块aufs是否卸载成功
    lsmod |grep aufs

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值