邢臺網(wǎng)站建設(shè)免費做網(wǎng)站排名吸引人的微信軟文
目錄
前言
主要概念
工作原理? ?
特點特性
1、上下合并
2、同名文件覆蓋
3、同名目錄合并
4、寫時拷貝
實操入門
內(nèi)核配置
?掛載文件系統(tǒng)
驗證
1、同名文件覆蓋
2、同名目錄合并
3、寫時拷貝
1)驗證新增文件或目錄
2)驗證修改文件
3)驗證刪除文件
總結(jié)
前言
????????OverlayFS 是一種聯(lián)合文件系統(tǒng),主要用于將多個文件系統(tǒng)的內(nèi)容合并呈現(xiàn)給用戶。在 Linux 系統(tǒng)中,它經(jīng)常用于容器技術(shù),比如 Docker 和 Kubernetes,以實現(xiàn)文件系統(tǒng)的層疊。OverlayFS 通過將一個文件系統(tǒng)層“覆蓋”在另一個文件系統(tǒng)層之上,使得兩個文件系統(tǒng)看起來像是一個統(tǒng)一的文件系統(tǒng)。
主要概念
- Lowerdir:下層目錄,包含了只讀數(shù)據(jù)。
- Upperdir:上層目錄,包含了可寫數(shù)據(jù)。
- Workdir:工作目錄,用于存儲臨時文件和中間數(shù)據(jù)。
- Merged View:合并視圖,用戶看到的最終文件系統(tǒng)視圖。
工作原理? ?
????????OverlayFS 通過合并下層目錄和上層目錄來創(chuàng)建一個虛擬的合并視圖。當(dāng)用戶對文件進行讀操作時,文件系統(tǒng)會優(yōu)先從上層目錄查找文件,如果上層目錄沒有該文件,則從下層目錄查找。對于寫操作,OverlayFS 會在上層目錄進行操作,并且不會修改下層目錄。這種機制確保了下層目錄的只讀性。
特點特性
1、上下合并
????????OverlayFS 的核心功能之一是將多個目錄(通常是一個只讀層和一個可寫層)合并成一個單一的虛擬文件系統(tǒng)視圖。這種合并方式允許用戶同時訪問和操作多個層中的文件,而不需要手動切換或復(fù)制文件內(nèi)容。
? ? ? ? 這里說的上下合并就是指最終會將lowerdir層的可讀文件與upperdir層的可寫文件合并到merged層,具體的合并規(guī)則稍后介紹。
2、同名文件覆蓋
????????當(dāng)上下層目錄中存在同名文件時,OverlayFS 會優(yōu)先顯示上層目錄(upperdir)中的文件,隱藏下層目錄(lowerdir)中的同名文件。這種機制允許用戶在不修改基礎(chǔ)層的情況下對文件進行更新或替換。
? ? ? ? 這里說的同名覆蓋是指,假設(shè)lowerdir層有一個文件叫hello.txt,upperdir層也有一個文件叫hello.txt,那最終在merged層看到的將會是upperdir層的hello.txt文件。
3、同名目錄合并
????????當(dāng)下層目錄(lowerdir)和上層目錄(upperdir)都有一個同名的子目錄時,OverlayFS 會將這兩個目錄的內(nèi)容合并在一起顯示給用戶,用戶在合并視圖中看到的是兩個目錄的綜合內(nèi)容。
????????如果合并的兩個目錄中存在同名文件,則優(yōu)先顯示上層目錄(upperdir)中的文件,而隱藏下層目錄(lowerdir)中的同名文件,這就是上面介紹的同名文件覆蓋的機制。
4、寫時拷貝
????????當(dāng)對合并視圖中的文件進行寫操作時,OverlayFS 會將下層目錄中的只讀文件復(fù)制到上層目錄,并在上層目錄中進行修改。這種寫時拷貝機制確保了下層目錄的只讀性不受影響,同時提供了對文件的寫訪問能力。
? ? ? ? 這里是指假設(shè)用戶修改了merged層的文件file.txt,如果該文件只存在于lowerdir層,則文件會被復(fù)制到upperdir層,然后在upperdir層中進行修改,而lowerdir層中的文件則原封不動,所有的修改只發(fā)生在upperdir中的副本上。
?
實操入門
開發(fā)平臺:T113
SDK:Tina 5.0?
內(nèi)核配置
????????????????
?掛載文件系統(tǒng)
1、檢查系統(tǒng)是否支持OverlayFS
grep overlay /proc/filesystems
????????????????
?2、創(chuàng)建必要目錄
mkdir /lower /upper /work /merged
·/lower 指定lowerdir
·/upper 指定upperdir
·/work 指定work目錄
·/merged 指定掛載點(合并點)
????????????????
3、創(chuàng)建測試文件
????????這里的思路是分別在上層與下層各創(chuàng)建兩個文件,其中有一個文件名一樣,但內(nèi)容不一樣,掛載后就可以驗證同名文件覆蓋了。
1)upper層
//upper層
cd /upper
echo "this upper first file" >> file_a.txt
echo "this upper second file" >> file_b.txt
? ? ? ?
2)lower層
//lower層
cd /lower
echo "this lower first file" >> file_b.txt
echo "this lower second file" >> file_c.txt
????????
4、掛載文件系統(tǒng),掛載后可通過命令df -h 查看是否掛在成功,可以看到overlay掛載在根目錄下的merged目錄。
mount -t overlay overlay -o lowerdir=/lower,upperdir=/upper,workdir=/work /merged
· -t 指定掛載的文件系統(tǒng),這里指定overlay
· -o 指定掛載選項
· lowerdir=/lower 指定lower層為根目錄下的lower目錄
· upperdir=/upper 指定upper層為根目錄下的upper目錄
· workdir=/work 指定work為根目錄下的work目錄
· /merged 指定掛載到根目錄下的merged目錄,其實就是合并層
????????? ????
? ? ? ? ??????????????
驗證
注:一切的操作都只在掛載點操作(本文章內(nèi)的掛載點為/merged),這是為了防止出現(xiàn)不可預(yù)知的結(jié)果,本身掛載以后也不允許在lowerdir中去操作,因為它是只讀的,至于upperdir,還需要考證。
1、同名文件覆蓋
????????掛載后查看 /merged目錄情況,發(fā)現(xiàn)有三個文件file_a\b\c,查看內(nèi)容,可知確實發(fā)生了同名文件覆蓋,因為file_b.txt內(nèi)容為 “this upper second file”,并非 “this lower first file”,也就說這個文件是upper層的file_b.txt文件,覆蓋掉了lower層的。
????????????????????????
2、同名目錄合并
? ? ? ? 分別在upper層和lower層創(chuàng)建一個新目錄test,然后將upper目錄、lower目錄先前創(chuàng)建的文件都拷貝到新建的test目錄中去。
????????????????
????????????????
? ? ? ? 然后進入 /merged目錄查看,可發(fā)現(xiàn)里面有一個test目錄,這是同名目錄合并的結(jié)果,然后我們進入test目錄查看,發(fā)現(xiàn)里面有三個文件,查看文件內(nèi)容,根據(jù)文件內(nèi)容,我們可以發(fā)現(xiàn),同名目錄合并過程中,如果目錄內(nèi)有同名文件,也會遵循同名文件覆蓋的機制。
??????????????????????????????????????
3、寫時拷貝
1)驗證新增文件或目錄
? ? ? ? 在merged層新建文件hello.txt,內(nèi)容為 “hello world”,然后去往upperdir與lowerdir查看是否有出現(xiàn)hello.txt,通過結(jié)果我們可知,在合并層新建文件只會在upperdir中出現(xiàn),而不會影響lowerdir。
cd /merged
echo "hello world" > hello.txt
???????????????????????
? ? ? ??在merged層新建目錄hello,然后去往upperdir與lowerdir查看是否有出現(xiàn)hello目錄,通過結(jié)果我們可知,在合并層新建目錄只會在upperdir中出現(xiàn),而不會影響lowerdir。
????????
2)驗證修改文件
? ? ? ? 這里還要分文件是只存在于upperdir還是只存在于lowerdir,還是同時存在兩者呢,我們分別驗證。
? ? ? ? 2.1)首先我們先往只存在于upperdir中的file_a.txt中新增信息,然后去upperdir中查看是否新增了信息。通過結(jié)果可知修改只存在于upperdir中的文件時只會同步到upperdir中去。
cd /merged
echo "add str" >> file_a.txt
????????
? ? ? ? 2.2)然后我們修改只存在于lowerdir中文件,看看結(jié)果如何。lowerdir中有一個只存在于lowerdir中的文件file_c.txt,同樣新增信息,通過截圖我們可得知,當(dāng)我們修改只存在于lowerdir中的文件時,會將其拷貝到upperdir中并修改(可看到upper目錄中出現(xiàn)了只在lowerdir中出現(xiàn)的file_c.txt),而lowerdir中并不會做任何改變。
???????????????????????
? ? ? ? 2.3)修改同時存于lowerdir與upperdir中的文件,看看結(jié)果如何,通過結(jié)果我們可知,也是只會同步到upperdir中,而不會改變lowerdir中的文件。
? ?
3)驗證刪除文件
? ? ? ? 這里也要分文件存在于lowerdir還是upperdir中。
? ? ? ? 3.1)要刪除的文件只存在于upperdir,比如我們刪除只存于upperdir中的file_a.txt,看看結(jié)果如何,可以看到只會刪除掉upperdir中的文件,因為它本身只存在于那。
???????
? ? ? ? 3.2)刪除只存于lowerdir中的文件,我們刪除lowerdir中的文件file_c.txt,看看結(jié)果如何。通過結(jié)果可知,刪除只存在于lowerdir中的文件只會刪除掛載點(合并點)的文件,而不會刪除lowerdir中的文件。但是我們又發(fā)現(xiàn)在upperdir中還有file_c.txt的影子,但是通過查詢大小發(fā)現(xiàn)其實只是生成了一個大小為0的字符設(shè)備文件。
???????????????? ?????????????????
總結(jié)
????????通過以上的討論以及驗證方法,明白了所有操作僅影響上層目錄,而不會修改下層目錄,這種機制確保了下層目錄的只讀性和數(shù)據(jù)完整性。也明白了在OverlayFS中,Lower可以是只讀的,而Upper則需要是可讀寫的文件系統(tǒng),同時也可以利用這個機制來做一個恢復(fù)出廠的應(yīng)用。這個等另一個文章??OverlayFS文件系統(tǒng)小應(yīng)用?介紹。