Overlay 檔案系統

2021-10-06 21:29:17 字數 3240 閱讀 3571

overlay檔案系統是docker容器廣泛使用的檔案系統。寫時複製的思想,將檔案分成兩層,分為lower和upper。

overlay檔案系統實際上是一種掛載技術:

比如新建三個資料夾:

mkdir upper lower merged work

# lower層和upper層各包括乙個檔案

echo

"i'm from lower!"

> lower/in_lower.txt

echo

"i'm from upper!"

> upper/in_upper.txt

# 然後建立乙個兩層都有的檔案

echo

"i'm from lower! "

> lower/in_both.txt

echo

"i'm from upper! "

> upper/in_both.txt

執行overlay:

mount -t overlay overlay -o lowerdir=/root/overlay/lower,upperdir=/root/overlay/upper,workdir=/root/overlay/work \

/root/overlay/merged

在合併層新建乙個檔案:

[root@localhost overlay]

# touch /root/overlay/merged/newfile.txt

#發現僅upper層有

[root@localhost overlay]

# tree .

.├── lower

│ ├── in_both.txt

│ └── in_lower.txt

├── merged

│ ├── in_both.txt

│ ├── in_lower.txt

│ ├── in_upper.txt

│ └── newfile.txt

├── upper

│ ├── in_both.txt

│ ├── in_upper.txt

│ └── newfile.txt

└── work

└── work

在合併層刪除乙個檔案:

[root@localhost overlay]

# rm -f /root/overlay/merged/in_both.txt

# in_both.txt它還是存在的!!!不過你可以檢視下它的檔案格式

[root@localhost overlay]

# tree .

.├── lower

│ ├── in_both.txt

│ └── in_lower.txt

├── merged

│ ├── in_lower.txt

│ ├── in_upper.txt

│ └── newfile.txt

├── upper

│ ├── in_both.txt

│ ├── in_upper.txt

│ └── newfile.txt

└── work

└── work

[root@localhost overlay]

# cat /root/overlay/upper/in_both.txt

cat: /root/overlay/upper/in_both.txt: no such device or address

[root@localhost overlay]

# file /root/overlay/upper/in_both.txt

/root/overlay/upper/in_both.txt: character special

修改合併層的乙個檔案:

[root@localhost overlay]

# echo "change in merge" >> merged/in_lower.txt

[root@localhost overlay]

# tree .

.├── lower

│ ├── in_both.txt

│ └── in_lower.txt

├── merged

│ ├── in_lower.txt

│ ├── in_upper.txt

│ └── newfile.txt

├── upper

│ ├── in_both.txt

│ ├── in_lower.txt # 因為修改這裡多了乙個檔案

│ ├── in_upper.txt

│ └── newfile.txt

└── work

└── work

5 directories, 9 files

# 你會發現lower層檔案沒有更改

[root@localhost overlay]

# cat merged/in_lower.txt

i'm from lower!

change in merge

[root@localhost overlay]# cat upper/in_lower.txt

i'm from lower!

change in merge

[root@localhost overlay]

# cat lower/in_lower.txt

i'm from lower!

看下檔案尺寸你會發現它重新複製了乙份:

[root@localhost overlay]# ls -al upper/in_lower.txt 

-rw-r--r--

.1 root root 33

[這裡加了16個位元組,我不知道為什麼多乙個!!!] may 2014:

43 upper/in_lower.txt

[root@localhost overlay]# ls -al lower/in_lower.txt

-rw-r--r--

.1 root root 17 may 2014:

12 lower/in_lower.txt

overlay 檔案系統

overlayfs檔案系統類似於aufs,相比aufs,overlay實現更簡潔,很早就合入了linux主線,合入主線後overlayfs修改為overlay。docker 使用overlay檔案系統來構建和管理映象與容器的磁碟結構。overlay檔案系統分為lowerdir upperdir me...

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...

檔案系統 檔案系統的架構

vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...