NFS中的mount應(yīng)用
在NFS的設(shè)置中,我們常會接觸到mount的使用。那么對于mount的操作我們應(yīng)該如何進(jìn)行呢?為了在同時出現(xiàn)多個NFS版本導(dǎo)出時有效地實(shí)現(xiàn)統(tǒng)一裝載,您必須具備一個NFS裝載工具.了解通用NFS裝載工具如何幫助減少多個NFS版本的處理,并簡化這些版本的管理.本文描述通用NFS裝載的概念,并且概括地介紹這個系統(tǒng)的優(yōu)勢及其應(yīng)用.此外,本文還給出一些總體設(shè)計(jì)細(xì)節(jié).
網(wǎng)絡(luò)文件系統(tǒng)(Network File System,NFS)是一個常用的分布式文件系統(tǒng),它使遠(yuǎn)程客戶機(jī)能夠在服務(wù)器上執(zhí)行文件操作.通過使用 export 操作,服務(wù)器就使外部機(jī)器能夠訪問它的目錄和文件系統(tǒng).為了訪問這些目錄,客戶機(jī)將導(dǎo)出的目錄或文件系統(tǒng) mount(裝載)到它的本地目錄結(jié)構(gòu)中.在已裝載的目錄內(nèi)部,客戶機(jī)能夠像訪問本地文件一樣訪問遠(yuǎn)程文件.到目前為止,NFS 在導(dǎo)出和裝載目錄或文件系統(tǒng)方面支持 3 個版本:版本 2、3 和 4.
在本文中,我們演示如何使用通用NFS裝載工具將所有現(xiàn)有的NFS版本的導(dǎo)出和裝載合并到一個無縫的機(jī)制中.讓我們考慮這樣一個場景:服務(wù)器為 3 個版本的NFS導(dǎo)出目錄項(xiàng).目前,如果客戶機(jī)要訪問所有這些項(xiàng),它必須在不同的裝載點(diǎn)分開裝載每個項(xiàng).盡管NFS版本 4 提供的偽樹(pseudo-tree)機(jī)制能夠一次裝載所有 NFSv4 導(dǎo)出項(xiàng),但它僅適用于由該版本生成的項(xiàng).雖然版本 4 能夠進(jìn)行一次性裝載(存在偽樹時),但是客戶機(jī)必須分開裝載版本 2 和 3 的項(xiàng).
通用NFS裝載工具實(shí)際上是 mount 命令的包裝器,它使用戶能夠通過一個命令從特定服務(wù)器裝載所有導(dǎo)出項(xiàng).因?yàn)楦膭覰FS服務(wù)器不太好,所以這個包裝器在客戶機(jī)(對用戶是透明的)內(nèi)部分別執(zhí)行不同的 mount.
看看NFS服務(wù)器上的目錄結(jié)構(gòu),如圖 1 所示:
圖 1. 服務(wù)器上的目錄結(jié)構(gòu)
在這個場景中,需要在客戶機(jī)中執(zhí)行以下 mount:
◆一個 NFSv4 mount:裝載 NFSv4 偽樹(Fileset1 和 Fileset2).NFSv4 偽樹特性允許 NFSv4 客戶機(jī)在偽樹中對所有導(dǎo)出的項(xiàng)僅執(zhí)行一個 mount 操作.
◆兩個 NFSv3 mount:裝載 Tools 和 Docs.
◆一個 NFSv3 mount:裝載 Binaries.
使用NFS裝載工具可以將這些裝載合并為一個裝載.使用命令:
gennfsmount <NFS server> <mountpoint>
使用通用NFS裝載工具有以下優(yōu)點(diǎn):
◆用戶僅需進(jìn)行一次裝載就能訪問服務(wù)器上的所有信息;以前不支持這個功能.
◆假如有這樣一個服務(wù)器,它不僅導(dǎo)出版本 2 和 3 的舊文件集,還導(dǎo)出版本 4 的新文件集.客戶機(jī)能夠通過一個操作訪問所有這些文件集并執(zhí)行安裝.
◆使用這個通用工具改善了在特定服務(wù)器或特定導(dǎo)出目錄/文件系統(tǒng)中的搜索.
◆因?yàn)檫@個工具能夠自動隔離基于版本的NFS導(dǎo)出,所以用戶不再需要管理這些不同的裝載點(diǎn).
◆NFS 管理員能夠在服務(wù)器上保留舊的NFS版本導(dǎo)出,因?yàn)閮H需使用 mount 命令就可以像訪問新版本數(shù)據(jù)項(xiàng)一樣訪問它們.
使用 automount 工具也能夠獲得類似的結(jié)果,但它需要管理員對 automount 進(jìn)行許多配置才能獲得所需的NFS裝載.automount 的 hostmap 特性聲稱能夠從服務(wù)器 mount 所有導(dǎo)出項(xiàng),并且不需要管理員進(jìn)行任何配置,但使用 hostmap 裝載 NFSv4 項(xiàng)時會出現(xiàn)問題.另外,它對 /etc/hosts 文件中列出的所有服務(wù)器都進(jìn)行操作.它不能在單個裝載點(diǎn)上裝載特定服務(wù)器導(dǎo)出的所有項(xiàng).總體而言,通用NFS裝載機(jī)制是最方便的.接下來,我們看看在實(shí)現(xiàn)通用NFS裝載工具的過程中的一些設(shè)計(jì)決策.#p#
設(shè)計(jì)實(shí)現(xiàn)細(xì)節(jié)
我們先看一下通用NFS裝載系統(tǒng)的基礎(chǔ)架構(gòu).通用NFS裝載工具從內(nèi)部向服務(wù)器發(fā)送一個請求,要求訪問所有導(dǎo)出項(xiàng).
圖 2. 通用NFS裝載工具請求訪問所有導(dǎo)出項(xiàng)
收到服務(wù)器的回復(fù)之后,將執(zhí)行清單 1 中的算法:
清單 1. 通用NFS裝載工具的算法
Start
Create temporary directories for all versions.
Initialize list of mount security flavors.
Embed this list in each internal mount operation.
For each item in the export-list
Do
Mount internally for every NFSv2 and NFSv3 export
Update internal log
End for
Mount internally only once for NFSv4 export.
Update internal log
Stop
security flavors 是一個由逗號分隔的安全方法列表(sys、krb5 和 krb5i 等).在裝載點(diǎn)的 read/write 操作期間將用到這些方法.這個列表用于匹配服務(wù)器支持的安全方法.此外,隨后在該裝載點(diǎn)下發(fā)生系統(tǒng)調(diào)用時也用到該列表.相應(yīng)的導(dǎo)出項(xiàng)的NFS版本也可以使用類似的機(jī)制.
當(dāng)所有內(nèi)部裝載完成時,將使用 UnionFS 合并所有內(nèi)部目錄,如清單 2 所示.
清單 2. 使用 UnionFS 合并所有內(nèi)部目錄
mount -t unionfs -o dirs=<temp_dir1>[:<temp_dir2>...] none <mount-point>
還記得 前一個場景嗎?在前面的場景中,客戶機(jī)上有一個針對 v4 偽樹的 NFSv4 裝載,兩個針對 Tools and Docs 的 NFSv3 裝載,一個針對 Binaries 的 NFSv3 裝載,并且我們使用通用NFS裝載工具 —gennfsmount <NFS server> <mountpoint>— 將它們合并到一個裝載中.在這個例子中,將創(chuàng)建以下臨時目錄:
◆/tmp/NFSv4
◆/tmp/NFSv3/Tools
◆/tmp/NFSv3/Docs
◆/tmp/NFSv2/Binaries
然后使用 unionfs 合并它們,如清單 3 所示:
清單 3. 使用 unionfs 進(jìn)行合并
mount -t unionfs -o dirs=/tmp/NFSv4:/tmp/NFSv3:/tmp/NFSv2 none /mnt
這會生成以下目錄結(jié)構(gòu):
圖 3. unionfs 生成的目錄結(jié)構(gòu)
接下來,我們看看如何使用這個系統(tǒng).#p#
tips:
UnionFS
UnionFS 是針對 Linux和 FreeBSD 的文件系統(tǒng)服務(wù),它允許透明地覆蓋獨(dú)立的文件系統(tǒng)(即分支)的文件和目錄以構(gòu)成一個連貫的文件系統(tǒng),從而實(shí)現(xiàn)統(tǒng)一裝載文件系統(tǒng).對于具有相同路徑的目錄的內(nèi)容,將出現(xiàn)在生成的文件系統(tǒng)的一個合并目錄中.針對 Linux 的 UnionFS 有兩個版本:
◆Version 1.x 是獨(dú)立的,可以作為模塊構(gòu)建.
◆Version 2.x 是***的;它經(jīng)過重新設(shè)計(jì)和實(shí)現(xiàn),并且是 Andrew Morton 的 Linux -mm 樹的一部分(因此它應(yīng)該出現(xiàn)在主資源樹中).
使用這個系統(tǒng)
在這個場景中,NFS 服務(wù)器導(dǎo)出屬于不同NFS版本的不同項(xiàng).不過在客戶機(jī)上僅執(zhí)行一個裝載:通用NFS裝載.圖 4 顯示了服務(wù)器導(dǎo)出的項(xiàng).
圖 4. 在服務(wù)器上導(dǎo)出的項(xiàng)
在這里,服務(wù)器導(dǎo)出 5 個屬于不同NFS版本的NFS項(xiàng).nfs4_A 和 nfs4_B 構(gòu)成一個 NFSv4 偽樹(/nfs4_A 和 /nfs4_A/nfs4_B).其余的是版本 2 和 3 的NFS導(dǎo)出項(xiàng).
圖 5 顯示了服務(wù)器上的文件.
圖 5. 服務(wù)器上的文件
在這個場景中,僅需使用一個裝載操作,客戶機(jī)就可以訪問不同裝載目錄下的文件.不過,在這個系統(tǒng)中,用戶使用一個裝載操作就可以在一個目錄結(jié)構(gòu)中訪問所有這些文件.
圖 6 顯示了使用通用NFS裝載工具后的客戶機(jī)輸出:
圖 6. 通用NFS裝載工具的輸出
如您所見,圖 6 顯示了由通用NFS裝載工具執(zhí)行的多個內(nèi)部裝載./mnt 目錄合并了所有NFS裝載.
結(jié)束語
至此,我們已經(jīng)演示了通用NFS裝載工具的架構(gòu)和機(jī)制.這個工具不僅為NFS服務(wù)器上的文件提供更容易的單點(diǎn)訪問,而且為NFS空間提供更加緊湊的視圖,因此它是NFS客戶機(jī)的好幫手.