章 29. 使用 NFS 共享檔案系統

目錄

29.1. 術語
29.2. 安裝 NFS 伺服器
29.3. 設定 NFS 伺服器
29.4. 設定用戶端
29.5. 更多資訊

摘要

透過網路配送和共享檔案系統在公司環境中極為常見。這種成熟的網路檔案系統 (NFS) 可與 NIS (黃頁通訊協定) 搭配使用。如需可與 LDAP 搭配使用並且還要使用 Kerberos 的更安全通訊協定,請選擇 NFSv4。若與 pNFS 結合使用,可以消除效能瓶頸。

NFS 與 NIS 攜手能讓使用者對網路有清楚的瞭解。可以使用 NFS 透過網路配送任意檔案系統。如果安裝妥當,使用者將會發現,不論他們目前使用的是哪個終端機,他們始終處於同一個環境中。

[Important]DNS 所需

原則上,可以只使用 IP 位址來進行所有的輸出。為了避免逾時,您需要有正常運作的 DNS 系統。即使為了記錄目的,DNS 也必不可少,因為掛接的精靈執行的是反向查詢。

29.1. 術語

YaST 模組中使用了下列詞彙。

輸出

由 NFS 伺服器輸出的目錄,用戶端可將該目錄整合到其系統中。

NFS 用戶端

NFS 用戶端是指透過「網路檔案系統」通訊協定使用 NFS 伺服器提供之 NFS 服務的系統。TCP/IP 通訊協定已整合到 Linux 核心中;不需要安裝任何其他軟體。

NFS 伺服器

NFS 伺服器向用戶端提供 NFS 服務。執行中的伺服器依賴於下列精靈運作:nfsd (工作者)、idmapd (使用者及群組名稱至 ID 的映射,反之亦然)、statd (檔案鎖定) 及 mountd (掛接要求)。

pNFS

平行 NFS,NFSv4 的通訊協定延伸。所有 pNFS 用戶端都可以直接存取 NFS 伺服器上的資料。

29.2. 安裝 NFS 伺服器

在進行預設安裝時並不會安裝 NFS 伺服器軟體。如果依第 29.3 節「設定 NFS 伺服器」 中所示設定 NFS 伺服器,系統會自動提示您安裝必要的套件。或者,使用 YaST 或 zypper 安裝套件 nfs-kernel-server

NFS 與 NIS 一樣,都是主從式系統。但一台機器可同時扮演這兩種角色 — 它可透過網路提供檔案系統 (輸出),也可以從其他主機掛接檔案系統 (輸入)。

29.3. 設定 NFS 伺服器

NFS 伺服器可透過 YaST 來設定,也可以手動設定。若要進行驗證,還可以將 NFS 與 Kerberos 結合使用。

29.3.1. 以 YaST 輸出檔案系統

使用 YaST,將您網路中的主機轉變為 NFS 伺服器 可將目錄和檔案輸出到所有授與存取權的主機之伺服器。該伺服器還可為群組的所有成員提供應用程式,這樣就不必逐個在每部主機本地安裝這些應用程式。

若要設定這樣的伺服器,請執行下列步驟:

過程 29.1. 設定 NFSv3 伺服器

  1. 啟動 YaST 並選取網路服務+NFS 伺服器;請參閱圖形 29.1 「NFS 伺服器組態工具」。系統可能會提示您安裝其他軟體。

    圖形 29.1. NFS 伺服器組態工具

    NFS 伺服器組態工具

  2. 啟用開始選項圓鈕。

  3. 如果系統上的防火牆 (SuSEfirewall2) 處於使用中狀態,請核取在防火牆中開啟連接埠。YaST 會啟用 nfs 服務來調整其組態以使其適用於 NFS 伺服器。

  4. 保持啟用 NFSv4核取方塊處於停用狀態。

  5. 若您需要安全存取伺服器,請按一下啟用 GSS 安全性。先決條件是您的網域中安裝有 Kerberos,且伺服器和用戶端都可進行 Kerberos 驗證。按一下下一步

  6. 按一下對話方塊上半部分中的新增目錄以輸出目錄。

  7. 如果您尚未設定允許的主機,系統會自動彈出另一個對話方塊,可讓您輸入用戶端資訊及選項。輸入主機萬用字元 (通常您可以保留預設設定不變)。

    有四種主機萬用字元類型可讓您針對各主機進行設定:單一主機 (名稱或 IP 位址)、網路群組、萬用字元 (例如 * 摽是所有機器都可存取伺服器) 以及 IP 網路。

  8. 按一下完成以完成組態。

29.3.1.1. NFSv4 用戶端的輸出

對於固定的 NFSv4 用戶端集合來說,能輸出的目錄有兩種類型 — 做為虛擬根檔案系統的目錄,以及結合至虛擬檔案系統之某些子目錄的目錄。虛擬檔案系統可做為基礎點,底下所有為這些用戶端集合而輸出的檔案系統都有其位置。對於用戶端或用戶端集合來說,伺服器上只有一個目錄可以設定為虛擬根部來進行輸出。針對此用戶端,可將多個目錄結合至虛擬根中某些現有子目錄來輸出它們。

舉例來說,假設目錄 /exports 被選為所有可存取伺服器之用戶端的虛擬根部目錄。然後請將其加入輸出目錄的清單,並確定針對此目錄所輸入的選項包含了 fsid=0。如果另一個目錄 (/data) 也需要使用 NFSv4 輸出,請將該目錄也新增至清單中。針對此狀況輸入選項時,請確定 bind=/exports/data 位於清單中,而且 /exports/data/exports 的現有子目錄。bind=/target/path 選項中的任何變更 (不論是新增、刪除還是變更值) 都會反映在結合掛接目標中。

若要設定伺服器以輸出 NFSv4 用戶端的目錄,請使用過程 29.1, “設定 NFSv3 伺服器” 中的一般指南,但要變更下列步驟:

  1. 在第一個對話方塊中核取啟用 NFSv4

  2. 在第一個對話方塊中輸入適當的 NFSv4 網域名稱。

    請確定該名稱與存取此特定伺服器的 NFSv4 用戶端之 /etc/idmapd.conf 檔案中的一個名稱相同。此參數適用於 idmapd 精靈,而此精靈在支援 (伺服器和用戶端二者的) NFSv4 時是必要的。如果您沒有任何特殊需求,則請讓它維持為 localdomain (預設)。

    下一步後出現的對話方塊有兩個區段。上半部有兩欄,分別稱為目錄結合掛接目標。該服務將立即可用。

  3. 按一下對話方塊上半部分中的新增目錄以輸出目錄,然後按一下確定進行確認。

  4. 主機萬用字元文字欄位和選項中輸入您的主機名稱。

    選項文字欄位中,將 fsid=0 加入逗號分隔的選項清單,以將目錄設為虛擬根目錄。如果此目錄需要繫結至某個已設定之虛擬根部下的目錄,請確定已使用 bind=/target/path 在選項清單中提供目標繫結路徑。

    結合掛接目標欄無法直接編輯,只是列出目錄及其屬性。

  5. 按一下完成以完成組態。

29.3.1.2. NFSv3 和 NFSv2 的輸出

請在按一下下一步之前先確定起始對話方塊中的啟用 NFSv4並未勾選。

下一個對話方塊包括兩個部分。在上方的文字欄位中,鍵入要輸入的目錄。在下方,輸入可以存取它們的主機。有四種主機萬用字元類型可讓您針對各主機進行設定:單一主機 (名稱或 ip 位址)、網路群組、萬用字元 (例如 * 摽是所有機器都可存取伺服器) 以及 IP 網路。

圖形 29.2 「以 NFSv2 和 v3 輸出目錄」 中顯示了此對話方塊。如需這些選項的詳細說明,請參閱 man exports。按一下完成以完成組態。

圖形 29.2. 以 NFSv2 和 v3 輸出目錄

以 NFSv2 和 v3 輸出目錄

29.3.1.3. 共存的 v3 和 v4 輸出

NFSv3 和 NFSv4 的輸出可共存於同一個伺服器上。在起始組態對話方塊啟用了對 NFSv4 的支援之後,對於選項清單中沒有納入 fsid=0bind=/target/path 的輸出,v3 的輸出作業會予以考慮。

請參閱第 29.3.1.1 節「NFSv4 用戶端的輸出」 中的範例。如果您使用新增目錄來加入其他目錄 (例如 /data2),而對應的選項清單並未列出 fsid=0bind=/target/path,則此輸出即屬於 v3 的輸出作業。

[Important]

自動防火牆組態

如果您的系統上啟用了 SuSEfirewall2,YaST 會在選取在防火牆中開啟連接埠時,啟用 nfs 服務以調整其 NFS 伺服器組態。

29.3.2. 手動輸出檔案系統

NFS 輸出服務的組態檔案為 /etc/exports/etc/sysconfig/nfs。除了這些檔案之外,NFSv4 伺服器組態還需要 /etc/idmapd.conf。若要啟動或重新啟動服務,請執行 rcnfsserver restart 指令。如果已在 /etc/sysconfig/nfs 中設定 NFSv4,還會啟動 rpc.idmapd。NFS 伺服器需依賴執行的 RPC 埠對應程式。因此,也請以 rcrpcbind restart 啟動或重新啟動埠對應程式服務。

29.3.2.1. 以 NFSv4 輸出檔案系統

NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 通訊協定。若要設定以 NFSv4 輸出的目錄,其程序和之前的 NFS 版本會有些許不同。

29.3.2.1.1. /etc/exports

/etc/exports 檔案包含一份項目清單。每一個項目都指出一個共享的目錄,並記錄它的共享方式。/etc/exports 中的典型項目會包含:

/shared/directory   host(option_list)

例如:

/export   192.168.1.2(rw,fsid=0,sync,crossmnt)
/export/data   192.168.1.2(rw,bind=/data,sync)

這裡使用了 IP 位址 192.168.1.2,以識別允許的用戶端。您也可以使用主機的名稱以及指向一組主機 (*.abc.com* 等) 或網路群組 (@my-hosts) 的萬用字元。

指定 fsid=0 的目錄是一個特殊的目錄。它是所輸出檔案系統的根目錄,有時稱為虛擬根檔案系統。此目錄還必須包含 crossmnt,以便使用 NFSv4 進行正確操作。透過 NFSv4 輸出的所有其他目錄必須掛接在此掛接點下面。如果要輸出的目錄不在此輸出根目錄下,則需要將該目錄繫結至輸出網路樹。可使用 bind= 語法完成此操作。

在上面的範例中,/data 並不位於 /export 之下,因此我們輸出 /export/data,並指定 /data 目錄應繫結至該名稱。目錄 /export/data 必須存在,並且通常應為空白。

用戶端從此伺服器進行掛接時,掛接的只是 servername:/,而不是 servername:/exportservername:/data 不必掛接,因為該目錄會在 servername:/ 掛接後自動顯示在其下方。

29.3.2.1.2. /etc/sysconfig/nfs

/etc/sysconfig/nfs 檔案包含一些決定 NFSv4 伺服器精靈行為的參數。NFS4_SUPPORT 參數必須設定為 yesNFS4_SUPPORT 決定 NFS 伺服器是否支援 NFSv4 輸出和用戶端。

29.3.2.1.3. /etc/idmapd.conf

Linux 機器的所有使用者都有名稱和 ID。idmapd 會針對伺服器接收的 NFSv4 要求進行名稱和 ID 的對應,然後對用戶端發出回覆。此動作必須同時在 NFSv4 的伺服器和用戶端上執行,因為 NFSv4 的通訊中只使用名稱。

對於可能使用 NFS 來共享檔案系統的機器,請確定有一個統一的方式來對各機器之間的使用者指定使用者名稱和 ID (uid)。您可以透過 NIS、LDAP 或您網域中的任何統一網域驗證機制來達成這個目的。

在用戶端和伺服器兩端的 /etc/idmapd.conf 檔案中,Domain 參數必須設定為相同的值。如果您不確定,請讓伺服器和用戶端檔案中的網域保持為 localdomain。我們在此提出一個組態檔案的例子,如下所示:

[General] 

Verbosity = 0 
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nobody

如需更多參考,請參閱 idmapdidmapd.conf; man idmapd, man idmapd.conf 的 man 頁面。

29.3.2.1.4. 啟動和停止服務

/etc/exports/etc/sysconfig/nfs 進行變更後,請以 rcnfsserver restart 啟動或重新啟動 NFS 伺服器服務。對 /etc/idmapd.conf 進行變更後,請使用指令 killall -HUP rpc.idmapd 重新載入組態檔案。

如果 NFS 服務需要在開機時啟動,請執行指令 chkconfig nfsserver on

29.3.2.2. 以 NFSv2 和 NFSv3 輸出檔案系統

本節僅適用於 NFSv3 和 NFSv2 的輸出作業。如需以 NFSv4 輸出的詳細資訊,請參閱第 29.3.1.1 節「NFSv4 用戶端的輸出」

以 NFS 輸出檔案系統時需要兩個組態檔案:/etc/exports/etc/sysconfig/nfs。典型 /etc/exports 檔案項目的格式如下:

/shared/directory   host(list_of_options)

例如:

/export   192.168.1.2(rw,sync)

這裡的 /export 目錄與主機 192.168.1.2 共享,選項清單為 rw,sync。此 IP 位址可使用萬用字元以用戶端名稱或用戶端集合取代 (例如 *.abc.com),甚至也可以 netgroup 取代。

如需所有選項及其意義的詳細說明,請參閱 man 頁面 exports (man exports)。

變更了 /etc/exports/etc/sysconfig/nfs 以後,請以 rcnfsserver restart 指令啟動或重新啟動 NFS 伺服器。

29.3.3. NFS 搭配使用 Kerberos

若要為 NFS 使用 Kerberos 驗證,則 GSS 安全性必須啟用。在初始 YaST NFS 伺服器對話方塊中選取啟用 GSS 安全性。您必須有一個工作中的 Kerberos 伺服器才能使用此功能。YaST 不會設定該伺服器,只會使用所提供的功能。如果您要使用 Kerberos 驗證,則除了 YaST 組態之外,還必須要完成以下步驟才能執行 NFS 組態︰

  1. 請確定伺服器和用戶端位於相同的 Kerberos 領域中。它們必須存取相同的 KDC (金鑰配送中心) 伺服器,並共享它們的 krb5.keytab 檔案 (所有機器上的預設位置都是 /etc/krb5.keytab)。如需有關 Kerberos 的詳細資訊,請參閱Chapter 6, Network Authentication with Kerberos (↑Security Guide)

  2. 請以 rcgssd start 來啟動用戶端上的 gssd 服務。

  3. 請以 rcsvcgssd start 來啟動伺服器上的 svcgssd 服務。

如需有關設定啟用 Kerberos 之 NFS 的詳細資訊,請參閱第 29.5 節「更多資訊」 中的連結所提供的內容。

29.4. 設定用戶端

您不需安裝其他軟體就能將您的主機設定為 NFS 用戶端。所有需要的套件預設都會安裝。

29.4.1. 以 YaST 輸入檔案系統

授權使用者可以使用 YaST NFS 用戶端模組將NFS 目錄從 NFS 伺服器掛接到本地檔案樹。請執行下列步驟:

過程 29.2. 輸入 NFS 目錄

  1. 啟動 YaST NFS 用戶端模組。

  2. NFS 共用索引標籤中按一下新增。輸入 NFS 伺服器的主機名稱、要輸入的目錄和在本地掛接此目錄的掛接點。

  3. 如果您要使用防火牆並希望允許遠端電腦存取服務,請啟用NFS 設定索引標籤中的在防火牆中開啟埠。防火牆的狀態顯示於核取方塊旁。

  4. 使用 NFSv4 時,請確定選取了啟用 NFSv4核取方塊,並且NFSv4 網域名稱中的值與 NFSv4 伺服器使用的值相同。預設網域為 localdomain

  5. 按一下確定,儲存變更。

組態將會寫入 /etc/fstab 中,並會掛接指定的檔案系統。當您稍後啟動 YaST 組態用戶端時,它也會從這個檔案讀取現有組態。

29.4.2. 手動輸入檔案系統

從 NFS 伺服器手動輸入檔案系統的先決條件是有 RPC 埠對應程式正在執行。若要啟動該程式,請以 root 身分輸入 rcrpcbind start。接著,可以像處理本地分割區一樣,使用 mount 指令在檔案系統中掛接遠端檔案系統︰

mount host:remote-pathlocal-path

例如,若要從 nfs.example.com 機器輸入使用者目錄,可以使用︰

mount nfs.example.com:/home /home

29.4.2.1. 使用自動裝載服務

autofs 精靈可用於自動掛接遠端檔案系統。請將下列項目加入您的 /etc/auto.master 檔案:

/nfsmounts /etc/auto.nfs

如果能正確填入 auto.nfs 檔案,/nfsmounts 目錄此後便會成為用戶端上所有 NFS 掛接作業的根部。選擇 auto.nfs 這個名稱是從方便角度考量,您可以自行選擇任何名稱。使用以下指令在 auto.nfs 中為所有 NFS 掛接作業新增項目︰

localdata -fstype=nfs server1:/data
nfs4mount -fstype=nfs4 server2:/

root 身分使用 rcautofs start 啟動設定。在此範例中,server1/data 目錄 /nfsmounts/localdata 會掛接 NFS,而 server2/nfsmounts/nfs4mount 會掛接 NFSv4。

如果 /etc/auto.master 檔案在 autofs 服務的執行過程中被編輯,則必須使用 rcautofs restart 重新啟動自動掛載器,才能使變更生效。

29.4.2.2. 手動編輯 /etc/fstab

/etc/fstab 中典型的 NFSv3 掛接項目如下:

nfs.example.com:/data /local/path nfs rw,noauto 0 0

NFSv4 掛接也可以新增至 /etc/fstab 檔案。對於這些掛接作業,請在第三欄中使用 nfs4 (而非使用 nfs),並確定遠端檔案系統在第一欄中的 nfs.example.com: 之後做為 / 提供。/etc/fstab 中的 NFSv4 掛接範例行如下:

nfs.example.com:/ /local/pathv4 nfs4 rw,noauto 0 0

noauto 選項可防止在啟動時自動掛載檔案系統。如果要手動掛接各檔案系統,可以縮短掛接指令的長度,僅指定掛接點︰

mount /local/path

請注意,如果未輸入 noauto 選項,系統的啟始化程序檔會在啟動時處理這些檔案系統的掛接。

29.4.3. 平行 NFS (pNFS)

NFS 是最舊的通訊協定之一,開發於八十年代。雖然如此,NFS 對於共用小型檔案還是綽綽有餘的。但是,如果您要傳輸大型檔案或大量用戶端想要存取資料,NFS 伺服器將會成為瓶頸,並對系統效能造成明顯影響。出現這種情況的原因是檔案大小快速變大,而乙太網路的相對速度未能緊隨其後。

當您申請一般NFS 伺服器中的檔案時,該伺服器會尋找檔案中繼資料、收集所有資料並透過網路將其傳輸至您的用戶端。但是,不論檔案的大小,效能瓶頸都會變得很明顯:

  • 對於小型檔案,大部分時間都用在收集中繼資料上

  • 對於大型檔案,大部分時間則用在將資料從伺服器傳輸至用戶端上

pNFS (或平行 NFS) 克服了這個局限性,因為它將檔案系統中繼資料與資料位置分隔開來。因此,pNFS 需要兩種類型的伺服器:

  • 中繼資料控制伺服器,用於處理所有非資料流量

  • 一或多個儲存伺服器,用於存放資料

中繼資料與儲存伺服器構成了一個邏輯 NFS 伺服器。當用戶端想要讀取或寫入時,中繼資料伺服器會告知 NFSv4 用戶端使用哪個儲存伺服器來存取檔案區塊。用戶端可以直接存取伺服器上的資料。

SUSE Linux Enterprise 僅支援在用戶端上的 pNFS。

29.4.3.1. 使用 YaST 設定 pNFS 用戶端

過程 29.2, “輸入 NFS 目錄” 中所示繼續操作,但要按一下pNFS (v4.1)核取方塊並選擇性地按一下NFSv4 共享。YaST 會執行所有必要的步驟,並將所有需要的選項寫入檔案 /etc/exports

29.4.3.2. 手動設定 pNFS 用戶端

請參閱第 29.4.2 節「手動輸入檔案系統」 開始設定。大部分組態均由 NFSv4 伺服器執行。對於 pNFS,唯一的差異是將 minorversion 選項和中繼資料伺服器 MDS 伺服器新增至 mount 指令:

mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT

為了協助進行除錯,請在 /proc 檔案系統中變更該值:

echo 32767 > /proc/sys/sunrpc/nfsd_debug
echo 32767 > /proc/sys/sunrpc/nfs_debug

29.5. 更多資訊

除了 exportsnfsmount 的 man 頁面以外,/usr/share/doc/packages/nfsidmap/README 中也提供了有關設定 NFS 伺服器和用戶端的資訊。如需更多線上文件,請參閱下列網站:


SUSE Linux Enterprise Server 管理指南 11 SP4