動手實現AUFS檔案系統

2021-10-12 01:58:08 字數 1885 閱讀 6016

在之前的文章中我們**了docker是如何使用aufs檔案系統的,現在我們開始動手實踐一下aufs,用簡單的命令來建立乙個aufs檔案系統,感受下如何使用aufs和cow實現檔案管理。

在目錄下建立乙個aufs的資料夾,然後在aufs目錄下建立乙個mnt的資料夾作掛載點。接著在aufs目錄下建立乙個名為container-layer的資料夾,裡面有乙個名為container-layer.txt的檔案,檔案內容為」i am container layer」。同樣地,繼續在aufs目錄下建立4個名為image-layern的資料夾(n取值分別為l和4),裡面有乙個名為image-layer.txt的檔案,檔案內容為」i am image layer$」。使用如下命令檢查檔案內容。

要聯合的檔案目錄都己經準備好了。接下來把container-layer和4個名為image-layer$的資料夾用aufs的方式掛載到剛剛建立的mnt目錄下。在mount aufs的命令中,沒有指定待掛載的5個資料夾的許可權,預設的行為是dirs指定的左邊起第乙個目錄是read-write許可權,後續的都是read-only許可權。

還是《union file system在docker中的應用》文中曾經在系統aufs目錄下檢視檔案讀寫許可權的做法,這裡依然使用如下命令來確認新mount的檔案系統中每個目錄的許可權。

接下來,執行乙個有意思的操作,往mnt/image-layer1.txt的檔案末尾新增一行文字 「write to mnt』s image-layer1.txt」。根據上面介紹的cow技術,大家猜想一下會產生什麼樣的行為。

也就是說,當嘗試向mnt/image-layer4.txt檔案進行寫操作的時候,系統首先在mnt目錄下查詢名為image-layer4.txt的檔案,將其拷貝到read-write層的container-layer目錄中,接著對container-layer目錄中的image-layer4.txt檔案進行寫操作。至此,我們成功地完成了乙個小小的demo,實現了自己的aufs檔案系統。

《虛擬化的基石——namespace》、《通過namespace實現隔離》介紹了linux namespace,一共有6種類別的namespace,分別進行了簡單介紹。然後,以go語言為例實現了乙個demo,使大家能有乙個直觀的認識。而且對於這些namespace的應用,會有更加複雜的例子《linux cgroups的資源控制》、《cgroups在docker中的應用》介紹了linuxcgroups。通過linuxcgroups的三種結構,可以隨意定製對資源的限制及對資源做監控。最後使用go語言實現了乙個cgroups限制資源的demo,介紹了如何用go語言去操控容器的cgroups,進而實現限制容器資源的效果。《union file system在docker中的應用》介紹了union file system,列舉了其中的幾個具體實現,並且講解了docker是如何使用分層檔案系統來實現映象不同分層的重複利用的。最後,以aufs為例子介紹了如何構建,乙個簡單的分層檔案系統。後面在開發自己的容器映象的過程中就會使用這項技術。

賞 謝謝你請我喝咖啡

支付寶

docker基於 aufs 檔案系統

docker的核心功能就是容器版本管理,在容器層實現了cvs版本管理,比如git那種可以commit roll back 而aufs就是其實現基礎 aufs可以實現檔案系統的snapshot,這樣對fs的每次改動都可以做成乙個commit,而不影響上次原來的fs unionfs 可以把多個目錄 也叫...

Linux檔案系統實現

linux檔案管理從使用者的層面介紹了linux管理檔案的方式。linux有乙個樹狀結構來組織檔案。樹的頂端為根目錄 節點為目錄,而末端的葉子為包含資料的檔案。當我們給出乙個檔案的完整路徑時,我們從根目錄出發,經過沿途各個目錄,最終到達檔案。我們可以對檔案進行許多操作,比如開啟和讀寫。在linux檔...

檔案系統 why檔案系統

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