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