namespace與mount namespace

原文:《Namespaces in operation, part 1: namespaces overview》
部分譯文:

namspaces(命名空間)

目前,Linux實現了六種不同的namespaces。每一種namespace的目的是爲了抽象地包裝出某種特定的全局系統資源,來讓在對應namespace下的進程中,看起來像是擁有自己的獨立全局資源實例。namespaces的一個主要目的之一就是支持容器的實現,容器是一種輕量的虛擬化工具,這種工具提供了一種對外呈現爲一個進程是系統上唯一一個進程的能力。
在接下來的討論中,我們將按照他們的實現順序描述這些namespaces。CLONE_NEW*這些在括號中列出的標示符,會被用在下文中將被描述的namespace-related APIs(clone(), unshare()和setns())中,作爲不同namespace類型的常量名稱。

Mount namespaces(CLONE_NEWNS, Linux 2.4.19)

獨立出來一組可以被一組進程看到的文件系統掛載點。因此,處在不同mount namespace的進程族,會看到不同層次結構的文件系統。添加了mount namespace之後,mount()和unmount()的系統調用就不再操作可以被全局進程看到的掛載點了,而是去操作僅影響與調用進程相關聯的掛載點。
一種是用mount namespaces的方式是創造一個類似於chroot jails的環境。同時,對於同一個task而言,和單純是用chroot系統調用相比,mount namespaces是一種更加安全和靈活的工具。當然,mount namespace 其他更加複雜的用途的用途也是可以的。比如,mount namespace可以被用在主備關係上,mount時間就可以自動從一個namespace傳播到另一個namespace;舉個例子,這就允許掛載在一個namespace下的光盤設備出現在其他的namespace中。
Mount namespace是Linux上在2002年,第一個被實現的namespace。這也解釋了相當通用的“NEWS”的綽號(“new namespace的縮寫”):當時並沒有人意識到,會有其他不同類型的namesapce可能會在將來被用到。

Refs:
DOCKER基礎技術:LINUX NAMESPACE

基礎補充

掛載

每個文件系統都有獨立的inode、block,super block等信息,這些文件系統要鏈接到目錄樹才能夠被使用。將文件系統與目錄樹結合的操作被稱爲掛載。其中,掛載點是目錄,該目錄是進入文件系統的入口。(《鳥哥的Linux私房菜》
掛載是指由操作系統使一個存儲設備上的計算機文件和目錄可供用戶通過計算機的文件系統訪問的一個過程。 一般來說,當計算機關機時,每個已掛載存儲都將經歷一次卸載,以確保所有排隊的數據被寫入,並保證介質上文件系統結構的完整性(wikipedia

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章