AUFS 联合文件系统使用实例

云计算
什么是AUFS? 简单说就是一个文件系统,可以把不同的目录联合在一起。这种文件系统不用格式化,直接挂载即可。本文介绍在 Ubuntu 12.0.4 下 AUFS 的使用实例。

什么是AUFS? 简单说就是一个文件系统,可以把不同的目录联合在一起。这种文件系统不用格式化,直接挂载即可。之所以有这篇博文,是因为Docker中要使用它。在 Ubuntu 12.0.4下安装比较简单,其他系统需自己研究。直接apt-get install就可以了,安装后如下:

  1. root@localhost:/tmp/test/aufs#cat /etc/issue 
  2. Ubuntu12.04.5 LTS \n \l 
  3. root@localhost:/tmp/test/aufs#dpkg -l | grep aufs 
  4. ii  aufs-tools                          1:3.0+20111101-1ubuntu1            Tools to manage aufs filesystems 

按传统文件系统使用习惯,分区、格式化、挂载,大概就这三板斧,在AUFS里不用这么麻烦,操作如下:

  1. root@localhost:/tmp/aufs1#mkdir a b c d 
  2. root@localhost:/tmp/aufs1#echo aaaaaaa > a/a.txt 
  3. root@localhost:/tmp/aufs1#echo bbbbbbb > b/b.txt 
  4. root@localhost:/tmp/aufs1#echo ccccccc > c/c.txt 
  5. root@localhost:/tmp/aufs1#mkdir root 
  6. root@localhost:/tmp/aufs1#ls 
  7. a  b c  d  root 

首先建四个目录 a b c d,然后在a bc 下各生成一个文件,下面做的操作就是要把ab c 三个目录通过AUFS挂载到root目录下

  1. root@localhost:/tmp/aufs1#mount -v -t aufs -o br=/tmp/aufs1/a:/tmp/aufs1/b:/tmp/aufs1/c none/tmp/aufs1/root/ 
  2. noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f80f3aede09) 
  3. root@localhost:/tmp/aufs1#cd root/ 
  4. root@localhost:/tmp/aufs1/root#ll 
  5. total20 
  6. drwxr-xr-x4 root root 4096 Dec 19 15:12 ./ 
  7. drwxr-xr-x7 root root 4096 Dec 19 15:07 ../ 
  8. -rw-r--r--1 root root    8 Dec 19 15:07 a.txt 
  9. -rw-r--r--1 root root    8 Dec 19 15:07 b.txt 
  10. -rw-r--r--1 root root    8 Dec 19 15:07 c.txt 
  11. root@localhost:/tmp/aufs1/root#cat * 
  12. aaaaaaa 
  13. bbbbbbb 
  14. ccccccc 

解释下mount命令各参数含义:

            -t aufs 指定文件系统类型为aufs

            -o 后面是挂载选项,指定我们要挂载哪些目录

            none 说明我们挂载的不是设备文件,因为这里我们是直接挂载目录的

通过cat命令可以查看内容,可以看到就是原文件的内容。

AUFS的检测级别可以通过udba指定

  1. root@localhost:/tmp/aufs1#  mount -v -t aufs -obr=/tmp/aufs1/a:/tmp/aufs1/b:/tmp/aufs1/c -o udba=none  none /tmp/aufs1/root/ 
  2. noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f80fc7a7609,udba=none) 

udba有三种级别:none、reval、inotify,对性能的影响依次增加,当然安全性也有所增强。

  None: 这种检测是最快的,但可能导致错误的数据,例如在原始目录修改文件,在aufs中读取,不完全保证正确

  reval:aufs会访问重新原始目录,如果文件有更新,在会反映在aufs中

  Notify: 会在所有原始目录中的所有目录上注册notify事件,这会严重的影响性能,不建议使用。

AUFS中可以对不同的挂载目录指定不同权限,只读、读写两种权限可以在挂载时指定。

  1. root@localhost:/tmp/aufs1#mount -v -t aufs -o br=/tmp/aufs1/a=ro:/tmp/aufs1/b=rw -o udba=none  none /tmp/aufs1/root/ 
  2. mount:warning: /tmp/aufs1/root/ seems to be mounted read-only. 
  3. noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f87d915ee09,udba=none) 
  4. root@localhost:/tmp/aufs1#cd root/ 
  5. root@localhost:/tmp/aufs1/root#ls 
  6. a1.txt  a.txt b.txt 
  7. root@localhost:/tmp/aufs1/root#cat * 
  8. aaaaaaa 
  9. bbbbbbb 
  10. root@localhost:/tmp/aufs1/root#echo AAAA > a.txt 
  11. -bash:a.txt: Read-only file system 
  12. root@localhost:/tmp/aufs1/root#echo BBBB > b.txt 
  13. root@localhost:/tmp/aufs1/root#cat b.txt 
  14. BBBB 
  15. root@localhost:/tmp/aufs1/root#cat /tmp/aufs1/b/b.txt 
  16. BBBB 

由于aufs并不挂载块设备,所以所有创建的文件会在被挂载的目录中,当有很多目录时,就涉及到了原始目录的选择策略,先看下rr的策略如何使用:

  1. root@localhost:/tmp/aufs1/b#mount -v -t aufs -o br=/tmp/aufs1/a=rw:/tmp/aufs1/b=rw -o udba=reval -ocreate=rr  none /tmp/aufs1/root 
  2. noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f84e8324e09,create=rr) 
  3. root@localhost:/tmp/aufs1/b#cd ../root/ 
  4. root@localhost:/tmp/aufs1/root#ll 
  5. total20 
  6. drwxr-xr-x6 root root 4096 Dec 19 16:13 ./ 
  7. drwxr-xr-x7 root root 4096 Dec 19 15:07 ../ 
  8. -rw-r--r--1 root root    0 Dec 19 15:24 a1.txt 
  9. -rw-r--r--1 root root    8 Dec 19 15:07 a.txt 
  10. -rw-r--r--1 root root    5 Dec 19 15:58 b.txt 
  11. -rw-r--r--1 root root    5 Dec 19 16:02 root.txt 
  12. root@localhost:/tmp/aufs1/root#rm -f root.txt 
  13. root@localhost:/tmp/aufs1/root#touch root1 root2 root3 root4 
  14. root@localhost:/tmp/aufs1/root#tree -l /tmp/aufs1/ 
  15. /tmp/aufs1/ 
  16. ├──a 
  17. │  ├──a1.txt 
  18. │  ├──a.txt 
  19. │  ├──root1 
  20. │  └──root3 
  21. ├──b 
  22. │  ├──b.txt 
  23. │  ├──root2 
  24. │  └──root4 
  25. ├──c 
  26. │  └──c.txt 
  27. ├──d 
  28. └──root 
  29.     ├──a1.txt 
  30.     ├──a.txt 
  31.     ├──b.txt 
  32.     ├──root1 
  33.     ├──root2 
  34.     ├──root3 
  35.     └──root4 

上面命令首先挂载ab两个目录到root,然后创建四个文件,***通过tree命令查看,我们看到文件均衡的分布到了ab两个目录中,这是受 create=rr命令影响造成的。rr是轮询策略,在所有可用目录中轮询创建文件,如果只有一个目录是可写的,那就没什么意义了。Create有如下选 项:

    rr: 轮询选择可写分支

    mfs: 选择剩余空间最多的分支

    mfsrr:首先选择剩余空间最多的分支,然后选择rr方式

    pmfs:选择存在负目录的可写分支

AUFS支持对现有的AUFS增加新的分支(目录)或删除,deladd等操作,对于一个已有的AUFS,我们如何知道他包含哪些目录呢?

可以通过下面的步骤来实现:

  1. root@localhost:/tmp/aufs1#mount -v 
  2. noneon /dockerdata type aufs (rw,relatime,si=e7143f87c2262e09) 
  3. noneon /tmp/test/aufs type aufs (rw,relatime,si=e7143f878b324c09) 
  4. noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f84e8324e09,create=rr) 

记住si的值

  1. root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/ 
  2. br0      br1     xi_path  
  3. root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br 
  4. br0  br1  
  5. root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br0 
  6. /sys/fs/aufs/si_e7143f84e8324e09/br0 
  7. root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br1 
  8. /sys/fs/aufs/si_e7143f84e8324e09/br1 
  9. root@localhost:/tmp/aufs1#cat /sys/fs/aufs/si_e7143f84e8324e09/br1 
  10. /tmp/aufs1/b=rw 

可以看到原始目录和权限信息。

本文出自:http://blog.csdn.net/lihm0_1/article/details/42030169

责任编辑:Ophira 来源: 海盗的小菜园
相关推荐

2020-10-29 08:34:48

Linux - tmp

2018-05-02 08:35:33

LinuxTripwire文件系统

2023-07-19 14:00:50

OverlayC语言

2020-07-22 14:53:06

Linux系统虚拟文件

2017-08-17 10:03:06

磁盘系统实例

2010-03-16 14:42:16

linux环境

2009-12-14 13:33:31

linuxramdisk文件系统

2023-04-12 15:09:25

Overlay fs鸿蒙

2011-01-13 14:10:30

Linux文件系统

2009-11-06 10:05:18

Linux系统环境GFS

2018-02-25 09:48:36

LinuxUbuntu文件系统

2010-03-02 13:27:17

LinuxXFS文件系

2010-03-05 17:20:23

Linux XFS文件

2014-03-20 15:59:11

OpenSUSE 13Btrfs文件系统

2010-03-05 17:43:00

Linux XFS文件

2023-10-28 08:47:58

Ceph文件系统

2011-01-25 10:27:12

Linux 文件系统属

2019-09-20 10:04:45

Linux系统虚拟文件

2018-08-24 10:10:25

Linux文件系统技术

2013-05-27 14:46:06

文件系统分布式文件系统
点赞
收藏

51CTO技术栈公众号