1. 程式人生 > >Linux檔案系統--AUFS

Linux檔案系統--AUFS

Linux檔案系統–AUFS

  1. 檢查是否支援aufs
    由於aufs的可維護性差,所以許多Linux的發行版本並沒有將aufs編譯進核心中,使用如下命令檢視是夠支援aufs。(Ubuntu 16.04)
[email protected]:~$ grep aufs /proc/filesystems
nodev   aufs

如果這裡沒有輸出,表明系統不支援aufs。在網上找了好久看到有文章說Ubuntu 16.04支援aufs,所以選擇這個做本次的實驗。

  1. 如何使用aufs進行掛載
    選擇相應的引數,然後呼叫mount命令。
# mount -t aufs -o br=./filedir0:./filedir1 none ./Union

-t aufs 指明掛載型別為aufs
-o br=.... 表明將當前目錄下的filedir0和filedir1兩個資料夾聯合在一起
none 表明aufs不需要其他裝置,只是用br指定的資料夾即可
Union 表示最後的聯合的結果掛載當前目錄中的Union目錄下
  1. 只讀掛載
    在進行掛載的時候,可以指定每個filedir的讀寫屬性。如果不指定,則預設認為第一個目錄是可寫的,其他的目錄是隻讀的。不過個人認為還是顯示的給出每一個目錄的讀寫屬性比較好,這樣看起來一目瞭然。下面演示的只讀掛載:
[email protected]:~/aufs$ mkdir dir0 dir1 root
[email protected]:~/aufs$ echo "this is dir0 in 1.txt" > ./dir0/1.txt
[email protected]:~/aufs$ echo "this is dir0 in 2.txt" > ./dir0/2.txt
[email protected]
:~/aufs$ echo "this is dir1 in 2.txt" > ./dir1/2.txt [email protected]:~/aufs$ echo "this is dir1 in 3.txt" > ./dir1/3.txt #使用tree命令檢視最終目錄下的結構 [email protected]:~/aufs$ tree . ├── dir0 │ ├── 1.txt │ └── 2.txt ├── dir1 │ ├── 2.txt │ └── 3.txt └── root 3 directories, 4 files #通過ro引數讓dir0和dir1都為只讀
[email protected]
:~/aufs$ sudo mount -t aufs -o br=./dir0=ro:./dir1=ro none ./root #該命令執行完畢後,重新使用tree來檢視目錄結構 [email protected]:~/aufs$ tree . ├── dir0 │ ├── 1.txt │ └── 2.txt ├── dir1 │ ├── 2.txt │ └── 3.txt └── root ├── 1.txt ├── 2.txt └── 3.txt 3 directories, 7 files em......為什麼root目錄下只有一個2.txt呢,這個2.txt到底是dir0中的還是dir1中的呢? 不放將裡面的內容輸出看看。 [email protected]:~/aufs$ cat ./root/* this is dir0 in 1.txt this is dir0 in 2.txt this is dir1 in 3.txt 輸出之後發現,2.txt原來是dir0中的,那麼為什麼不是dir1中的2.txt呢? 原來在aufs中,每一個dir都有一個index,index越小的dir就會放在越上面,如果多個dir中有 同樣的檔案,只有index最小的dir下的那個檔案會被訪問到。 #改變掛載時,dir1和dir0的順序 [email protected]:~/aufs$ sudo mount -t aufs -o br=./dir1=ro:./dir0=ro none ./root [email protected]:~/aufs$ cat ./root/* this is dir0 in 1.txt this is dir1 in 2.txt this is dir1 in 3.txt 根據輸出我們發現,原來這個index和掛載時候的順序有關。 #由於是隻讀掛載,所以touch操作失敗 [email protected]:~/aufs$ touch ./root/1.txt touch: 無法建立'./root/1.txt': 只讀檔案系統 [email protected]:~/aufs$ touch ./root/2.txt touch: 無法建立'./root/2.txt': 只讀檔案系統 #但是當我們跳過root目錄來修改1.txt和3.txt,發現是可以操作的 [email protected]:~/aufs$ touch ./dir0/1.txt [email protected]:~/aufs$ touch ./dir1/3.txt 也就是說,在aufs中,最後目錄聯合後掛載到的位置(該例子中的root目錄),訪問這個目錄 下的檔案都會進過aufs檔案系統,換句話說,如果直接訪問dir0和dir1這兩個目錄,aufs是不 知道的。那麼我們修改dir0或者dir1中的內容,在root目錄下是否能夠看見,下面來試試。 [email protected]:~/aufs$ touch dir1/4.txt [email protected]:~/aufs/root$ ls 1.txt 2.txt 3.txt 4.txt #新建立的檔案可以及時反應到掛載點上
  1. 讀寫掛載
    如果聯合的資料夾中有寫的許可權,那麼所有的修改都會寫可寫的那個資料夾。如果有多個(目前還沒搞明白怎麼處理)。
#首先取消上面的掛載
[email protected]:~/aufs$ sudo umount ./root
#是dir0有讀寫許可權,dir1有隻讀許可權
[email protected]:~/aufs$ sudo mount -t aufs -o br=./dir0=rw:./dir1=ro none ./root
#在root目錄下寫入新內容
[email protected]:~/aufs$ echo "root write" >> ./root/1.txt
[email protected]:~/aufs$ echo "root write" >> ./root/2.txt
[email protected]:~/aufs$ echo "root write" >> ./root/3.txt
[email protected]:~/aufs$ echo "root write" >> ./root/5.txt
#和開始相比,dir0中多出了3.txt和5.txt,其他的沒有發生變化
[email protected]:~/aufs$ tree
.
├── dir0
│   ├── 1.txt
│   ├── 2.txt
│   ├── 3.txt
│   └── 5.txt
├── dir1
│   ├── 2.txt
│   └── 3.txt
└── root
    ├── 1.txt
    ├── 2.txt
    ├── 3.txt
    └── 5.txt

3 directories, 10 files
#看看內容是否發生了變化
[email protected]:~/aufs$ cat ./dir1/*
this is dir1 in 2.txt
this is dir1 in 3.txt
#看!這裡面的內容竟然沒有一點變化
[email protected]:~/aufs/dir0$ cat 1.txt
this is dir0 in 1.txt
root write
[email protected]:~/aufs/dir0$ cat 3.txt
this is dir1 in 3.txt
root write
....
#發現dir0中的所有內容都發生了變化
  • 當建立新的檔案是,新的檔案會寫入具有讀寫許可權的那個目錄(針對只有一個可讀寫許可權的目錄來說)
  • 當修改一個具有rw許可權目錄下的檔案時,直接修改該檔案
  • 當修改一個具有ro許可權目錄下的檔案時,aufs會先將檔案拷貝到rw許可權的目錄裡面,然後在上面進行修改,這就是所謂的COW(copy on write)。

相關推薦

Linux檔案系統--AUFS

Linux檔案系統–AUFS 檢查是否支援aufs 由於aufs的可維護性差,所以許多Linux的發行版本並沒有將aufs編譯進核心中,使用如下命令檢視是夠支援aufs。(Ubuntu 16.04) [email protected]:~$ gre

Linux最簡單的檔案系統aufs剖析詳解

對於一個普通的程式設計小白來說,檔案系統無非就是幾個功能,建立檔案,建立目錄,開啟檔案和檔案讀寫。對於通常的硬碟檔案系統來說,這要涉及硬碟的讀寫和硬碟空間管理,而讀寫從檔案系統一直到通用塊裝置再到硬碟驅動。我們這些就剖析最簡單的檔案系統,深入核心。 aufs檔

Linux檔案系統aufs

aufs的全稱是advanced multi-layered unification filesystem,主要功能是把多個資料夾的內容合併到一起,提供一個統一的檢視,主要用於各個Linux發行版的livecd中,以及docker裡面用來組織image。 據說由於auf

Linux檔案系統快照

Linux檔案系統快照 來自:http://www.mike.org.cn/blog/index.php?load=read&id=619 檔案系統快照 (File System Snapshots) 顧名思義就是在檔案系統上照張相片,也

Linux檔案系統層次標準

      前言 Linux檔案系統層次標準,英文全稱Filesystem Hierarchy Standard,英文簡稱FHS。 由於利用Linux來開發產品的團隊和個人實在太多了,如果每個人都以自己的想法來配置檔案放置的目錄,那麼將可能造成很多管理上的困擾。 在這

Linux 檔案系統的建立與掛載方法

轉自:https://blog.csdn.net/gz153016/article/details/51655994 Linux的  檔案系統的建立與掛載方法 1 Linux 檔案系統的建立 Linux的  作業系統在安裝伺服器時,安裝程式已經建立了自己的檔案系統,但是在使

Linux 檔案系統呼叫open七日遊(三)

接著上回,當對“.”和“..”處理完成後就直接返回進入下一個子路徑迴圈了,但如果當前子路徑不是“.”或“..”呢? 【fs/namei.c】 sys_open > do_sys_open > do_filp_open >&

linux檔案系統管理---分割槽掛載篇

轉:HTTP://www.cnblogs.com/alantu2018/p/8461680.html 一,系統在初始化時如何識別硬碟  1,系統初始時根據MBR的資訊來識別硬碟,其中包括了一些執行檔案就來載入系統,這些執行檔案就是MBR裡前面446bytes裡的啟動載入器程式,而後面

Linux檔案系統呼叫open 七日遊 (六)

還記得在上一個場景中,build_open_flags裡面有一個對標誌位O_PATH的判斷麼?現在我們就來看看這個標誌位是幹啥的: 【場景二】open(pathname,O_PATH)     這個O_PATH似乎是不常用的,咱們先看看它的使用

linux檔案系統呼叫 open 七日遊(四)

現在,我們的“路徑行走”只剩下最後一個小問題需要處理了——符號連結。 【fs/namei.c】 sys_open > do_sys_open > do_filp_open > path_openat &g

Linux檔案系統只讀Read-only file system的解決方法

問題原因:系統沒有正常關機,導致虛擬磁碟出現檔案系統錯誤。 解決方法:使用fsck手動修復,具體操作如下: 重啟系統後使用root進入單使用者模式,執行 fsck.ext3 -y /dev/vda3 說明:ext3的檔案系統使用fsck.ext3,ext4檔案系統使用fsck.et

linux 檔案系統之superblock

為了實際測試這個pagecache和對裸盤操作的區別,我一不小心敲錯命令,將一個磁碟的super_block給抹掉了,全是0, dd if =/dev/zero of=/dev/sda2 bs=4096 count=1 seek=2234789 2234789是我的某個測試檔案的

嵌入式Linux檔案系統-jffs2,yaffs2,ubifs,ramfs,網路檔案系統

綜述: 常見的檔案系統有統的格式有:jffs2,yaffs2,ubifs等。但可基於儲存或者執行的位置可分為 flash型檔案系統,Ram型檔案系統,網路檔案系統 Flash型檔案系統: Flash因為其特殊的硬體結構,普通的檔案系統如ext2,ext3等不適合使用。常見的檔案系統的

Linux檔案系統許可權詳解

Linux許可權說明: 444 r--r--r-- 600 rw------- 644 rw-r--r-- 666 rw-rw-rw- 700 rwx------ 744 rwxr--r-- 755 rwxr-xr-x 777 rwxrwxrwx

Linux檔案系統管理 parted分割槽命令

概述 parted 命令是可以在命令列直接分割槽和格式化的,不過 parted 互動模式才是更加常用的命令方式。 parted命令 進入互動模式命令如下: [[email protected] ~]# parted 硬碟裝置檔名   例如: [[email&#

Linux檔案系統管理 swap分割槽及作用

概述 在安裝系統的時候已經建立了 swap 分割槽。swap 分割槽是 Linux 系統的交換分割槽,當記憶體不夠用的時候,我們使用 swap 分割槽存放記憶體中暫時不用的資料。也就是說,當記憶體不夠用時,我們使用 swap 分割槽來臨時頂替。在記憶體較小的情況下建議 swap 分割槽的

Linux檔案系統管理 開機自動掛載及fstab檔案修復

概述 開機自動掛載及fstab檔案修復 開機自動掛載 實現開機後自動掛載,就需要修改系統的自動掛載檔案 /etc/fstab。因為系統就是依賴這個檔案決定啟動時載入的檔案系統的。通過vi 開啟/etc/fstab檔案 [[email protected] ~]# vi /etc/fst

Linux學習筆記14——認識 Linux 檔案系統

系統管理員很重要的任務之一就是管理好自己的磁碟檔案系統,每個分割槽不可太大也不能太小, 太大會造成磁碟容量的浪費,太小則會產生檔案無法儲存的困擾。此外,我們在前面幾章談到的檔案許可權與屬性中, 這些許可權與屬性分別記錄在檔案系統的哪個區塊內?這就得要談到 filesystem 中的 inode 與

buildroot 製作Linux檔案系統初級使用教程

轉載地址:https://www.cnblogs.com/chenfulin5/p/6062211.html buildroot 下載地址:https://buildroot.org/download.html 放在Linux檔案下解壓出來。   使用make menuco

Linux檔案系統及硬碟

ext 檔案系統管理工具mkfs.ext2,3,4mkfs.ext2 沒有日誌功能 mkfs.ext4 /dev/sda2ext檔案系統專用管理工具:mke2fsmke2fs [options] device -t[ext2|ext3|ext4] -b [1024|2048|4096] 指名檔案系統塊大小