Linux Overlay文件系統是一種聯合文件系統,它通過將多個文件系統的內容合并呈現給用戶,從而提供一種靈活的方式來管理和訪問持久數據。其工作原理主要包括以下幾個方面:
基礎文件系統(Base Filesystem):這是OverlayFS中的最底層文件系統,包含了所有其他文件系統所沒有的持久數據。
覆蓋文件系統(Overlay Filesystems):這些是附加在基礎文件系統之上的額外文件系統。每個覆蓋文件系統都包含一組特定的文件和目錄,這些文件和目錄將被合并到基礎文件系統中。
工作目錄(Work Directory):這是當前正在使用的覆蓋文件系統的目錄。當訪問一個文件時,OverlayFS會在工作目錄中查找該文件。如果在當前工作目錄及其父覆蓋文件系統中找不到文件,OverlayFS會按照從下到上的順序檢查其他覆蓋文件系統,直到找到文件或到達最頂層的基礎文件系統。
合并策略(Merge Strategy):OverlayFS使用一種稱為“最后寫入者勝出”(last writer wins)的策略來合并覆蓋文件系統。這意味著,如果有多個覆蓋文件系統包含相同的文件,那么位于頂層的覆蓋文件系統中的文件將被保留,而較低層覆蓋文件系統中的文件將被覆蓋。
上下合并:OverlayFS的核心功能之一是將多個目錄(通常是一個只讀層和一個可寫層)合并成一個單一的虛擬文件系統視圖。這種合并方式允許用戶同時訪問和操作多個層中的文件,而不需要手動切換或復制文件內容。
同名文件覆蓋:當上下層目錄中存在同名文件時,OverlayFS會優先顯示上層目錄(upperdir)中的文件,隱藏下層目錄(lowerdir)中的同名文件。
同名目錄合并:當下層目錄(lowerdir)和上層目錄(upperdir)都有一個同名的子目錄時,OverlayFS會將這兩個目錄的內容合并在一起顯示給用戶。
寫時拷貝(Copy-on-Write, CoW):當對合并視圖中的文件進行寫操作時,OverlayFS會將下層目錄中的只讀文件復制到上層目錄,并在上層目錄中進行修改。這種寫時拷貝機制確保了下層目錄的只讀性不受影響,同時提供了對文件的寫訪問能力。
OverlayFS的主要應用場景是在容器化環境中,可以將基礎鏡像作為只讀文件系統層,并通過Overlay文件系統在其上創建一個可讀寫的文件系統層。這樣,可以輕松地在容器中進行文件的修改和添加,而不會影響到基礎鏡像的完整性。