AUFS 聯(lián)合文件系統(tǒng)使用實(shí)例
什么是AUFS? 簡(jiǎn)單說(shuō)就是一個(gè)文件系統(tǒng),可以把不同的目錄聯(lián)合在一起。這種文件系統(tǒng)不用格式化,直接掛載即可。之所以有這篇博文,是因?yàn)镈ocker中要使用它。在 Ubuntu 12.0.4下安裝比較簡(jiǎn)單,其他系統(tǒng)需自己研究。直接apt-get install就可以了,安裝后如下:
- root@localhost:/tmp/test/aufs#cat /etc/issue
- Ubuntu12.04.5 LTS \n \l
- root@localhost:/tmp/test/aufs#dpkg -l | grep aufs
- ii aufs-tools 1:3.0+20111101-1ubuntu1 Tools to manage aufs filesystems
按傳統(tǒng)文件系統(tǒng)使用習(xí)慣,分區(qū)、格式化、掛載,大概就這三板斧,在AUFS里不用這么麻煩,操作如下:
- root@localhost:/tmp/aufs1#mkdir a b c d
- root@localhost:/tmp/aufs1#echo aaaaaaa > a/a.txt
- root@localhost:/tmp/aufs1#echo bbbbbbb > b/b.txt
- root@localhost:/tmp/aufs1#echo ccccccc > c/c.txt
- root@localhost:/tmp/aufs1#mkdir root
- root@localhost:/tmp/aufs1#ls
- a b c d root
首先建四個(gè)目錄 a b c d,然后在a bc 下各生成一個(gè)文件,下面做的操作就是要把a(bǔ)b c 三個(gè)目錄通過(guò)AUFS掛載到root目錄下
- root@localhost:/tmp/aufs1#mount -v -t aufs -o br=/tmp/aufs1/a:/tmp/aufs1/b:/tmp/aufs1/c none/tmp/aufs1/root/
- noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f80f3aede09)
- root@localhost:/tmp/aufs1#cd root/
- root@localhost:/tmp/aufs1/root#ll
- total20
- drwxr-xr-x4 root root 4096 Dec 19 15:12 ./
- drwxr-xr-x7 root root 4096 Dec 19 15:07 ../
- -rw-r--r--1 root root 8 Dec 19 15:07 a.txt
- -rw-r--r--1 root root 8 Dec 19 15:07 b.txt
- -rw-r--r--1 root root 8 Dec 19 15:07 c.txt
- root@localhost:/tmp/aufs1/root#cat *
- aaaaaaa
- bbbbbbb
- ccccccc
解釋下mount命令各參數(shù)含義:
-t aufs 指定文件系統(tǒng)類型為aufs
-o 后面是掛載選項(xiàng),指定我們要掛載哪些目錄
none 說(shuō)明我們掛載的不是設(shè)備文件,因?yàn)檫@里我們是直接掛載目錄的
通過(guò)cat命令可以查看內(nèi)容,可以看到就是原文件的內(nèi)容。
AUFS的檢測(cè)級(jí)別可以通過(guò)udba指定
- 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/
- noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f80fc7a7609,udba=none)
udba有三種級(jí)別:none、reval、inotify,對(duì)性能的影響依次增加,當(dāng)然安全性也有所增強(qiáng)。
None: 這種檢測(cè)是最快的,但可能導(dǎo)致錯(cuò)誤的數(shù)據(jù),例如在原始目錄修改文件,在aufs中讀取,不完全保證正確
reval:aufs會(huì)訪問(wèn)重新原始目錄,如果文件有更新,在會(huì)反映在aufs中
Notify: 會(huì)在所有原始目錄中的所有目錄上注冊(cè)notify事件,這會(huì)嚴(yán)重的影響性能,不建議使用。
AUFS中可以對(duì)不同的掛載目錄指定不同權(quán)限,只讀、讀寫(xiě)兩種權(quán)限可以在掛載時(shí)指定。
- 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/
- mount:warning: /tmp/aufs1/root/ seems to be mounted read-only.
- noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f87d915ee09,udba=none)
- root@localhost:/tmp/aufs1#cd root/
- root@localhost:/tmp/aufs1/root#ls
- a1.txt a.txt b.txt
- root@localhost:/tmp/aufs1/root#cat *
- aaaaaaa
- bbbbbbb
- root@localhost:/tmp/aufs1/root#echo AAAA > a.txt
- -bash:a.txt: Read-only file system
- root@localhost:/tmp/aufs1/root#echo BBBB > b.txt
- root@localhost:/tmp/aufs1/root#cat b.txt
- BBBB
- root@localhost:/tmp/aufs1/root#cat /tmp/aufs1/b/b.txt
- BBBB
由于aufs并不掛載塊設(shè)備,所以所有創(chuàng)建的文件會(huì)在被掛載的目錄中,當(dāng)有很多目錄時(shí),就涉及到了原始目錄的選擇策略,先看下rr的策略如何使用:
- 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
- noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f84e8324e09,create=rr)
- root@localhost:/tmp/aufs1/b#cd ../root/
- root@localhost:/tmp/aufs1/root#ll
- total20
- drwxr-xr-x6 root root 4096 Dec 19 16:13 ./
- drwxr-xr-x7 root root 4096 Dec 19 15:07 ../
- -rw-r--r--1 root root 0 Dec 19 15:24 a1.txt
- -rw-r--r--1 root root 8 Dec 19 15:07 a.txt
- -rw-r--r--1 root root 5 Dec 19 15:58 b.txt
- -rw-r--r--1 root root 5 Dec 19 16:02 root.txt
- root@localhost:/tmp/aufs1/root#rm -f root.txt
- root@localhost:/tmp/aufs1/root#touch root1 root2 root3 root4
- root@localhost:/tmp/aufs1/root#tree -l /tmp/aufs1/
- /tmp/aufs1/
- ├──a
- │ ├──a1.txt
- │ ├──a.txt
- │ ├──root1
- │ └──root3
- ├──b
- │ ├──b.txt
- │ ├──root2
- │ └──root4
- ├──c
- │ └──c.txt
- ├──d
- └──root
- ├──a1.txt
- ├──a.txt
- ├──b.txt
- ├──root1
- ├──root2
- ├──root3
- └──root4
上面命令首先掛載ab兩個(gè)目錄到root,然后創(chuàng)建四個(gè)文件,***通過(guò)tree命令查看,我們看到文件均衡的分布到了ab兩個(gè)目錄中,這是受 create=rr命令影響造成的。rr是輪詢策略,在所有可用目錄中輪詢創(chuàng)建文件,如果只有一個(gè)目錄是可寫(xiě)的,那就沒(méi)什么意義了。Create有如下選 項(xiàng):
rr: 輪詢選擇可寫(xiě)分支
mfs: 選擇剩余空間最多的分支
mfsrr:首先選擇剩余空間最多的分支,然后選擇rr方式
pmfs:選擇存在負(fù)目錄的可寫(xiě)分支
AUFS支持對(duì)現(xiàn)有的AUFS增加新的分支(目錄)或刪除,deladd等操作,對(duì)于一個(gè)已有的AUFS,我們?nèi)绾沃浪男┠夸浤兀?/span>
可以通過(guò)下面的步驟來(lái)實(shí)現(xiàn):
- root@localhost:/tmp/aufs1#mount -v
- noneon /dockerdata type aufs (rw,relatime,si=e7143f87c2262e09)
- noneon /tmp/test/aufs type aufs (rw,relatime,si=e7143f878b324c09)
- noneon /tmp/aufs1/root type aufs (rw,relatime,si=e7143f84e8324e09,create=rr)
記住si的值
- root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/
- br0 br1 xi_path
- root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br
- br0 br1
- root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br0
- /sys/fs/aufs/si_e7143f84e8324e09/br0
- root@localhost:/tmp/aufs1#ls /sys/fs/aufs/si_e7143f84e8324e09/br1
- /sys/fs/aufs/si_e7143f84e8324e09/br1
- root@localhost:/tmp/aufs1#cat /sys/fs/aufs/si_e7143f84e8324e09/br1
- /tmp/aufs1/b=rw
可以看到原始目錄和權(quán)限信息。