28 使用 NFS 共享檔案系統 #
網路檔案系統 (NFS) 是允許存取伺服器上檔案的通訊協定,存取方式與存取本地檔案非常相似。
28.1 綜覽 #
網路檔案系統 (NFS) 是經過充分證明且受到廣泛支援的標準化網路通訊協定,它允許在單獨的主機之間共用檔案。
網路資訊服務 (NIS) 可用於在網路中進行集中式使用者管理。將 NFS 和 NIS 結合使用,可透過檔案和目錄權限在網路中進行存取控制。NFS 與 NIS 攜手能讓使用者對網路有清楚的瞭解。
在預設組態中,NFS 完全信任網路,因此會信任連接到可信網路的任何機器。在可透過實體方式存取 NFS 伺服器所信任的任何網路的任何電腦上,任何具有管理員特權的使用者都可以存取該伺服器提供的所有檔案。
在許多情況下,此安全性層級非常適合以下情形︰所信任的網路是真正的私人網路,通常局限於單個機櫃或機房,並且無法進行未經授權的存取。將整個子網路做為一個整體信任的其他情形限制較多,需要更精密的信任機制。為了符合這些情形的需要,NFS 使用 Kerberos 基礎架構來支援各種安全性層級。Kerberos 需要 NFSv4 (預設使用該通訊協定)。如需詳細資料,請參閱Chapter 6, Network Authentication with Kerberos。
YaST 模組中使用了下列詞彙。
- 輸出
由 NFS 伺服器輸出的目錄,用戶端可將該目錄整合到其系統中。
- NFS 用戶端
NFS 用戶端是指透過「網路檔案系統」通訊協定使用 NFS 伺服器提供之 NFS 服務的系統。TCP/IP 通訊協定已整合到 Linux 核心中;不需要安裝任何其他軟體。
- NFS 伺服器
NFS 伺服器向用戶端提供 NFS 服務。執行中的伺服器依賴於以下精靈運作︰
nfsd
(worker)、idmapd
(用於 NFSv4 的 ID 到名稱映射,僅在某些情境下需要)、statd
(檔案鎖定) 和mountd
(掛接要求)。- NFSv3
NFSv3 是第 3 版實作,即支援用戶端驗證的「舊」無狀態 NFS。
- NFSv4
NFSv4 是新版 (第 4 版) 實作,支援透過 kerberos 的安全使用者驗證。NFSv4 只需要一個連接埠,因此比 NFSv3 更適合在防火牆後的環境中使用。
協定的定義如 tools.ietf.org 所示。
- pNFS
平行 NFS,NFSv4 的通訊協定延伸。所有 pNFS 用戶端都可以直接存取 NFS 伺服器上的資料。
原則上,可以只使用 IP 位址來進行所有的輸出。為了避免逾時,您需要有正常運作的 DNS 系統。即使為了記錄目的,DNS 也必不可少,因為掛接的精靈執行的是反向查詢。
28.2 安裝 NFS 伺服器 #
預設不會安裝 NFS 伺服器。若要使用 YaST 安裝 NFS 伺服器,請依次選擇
› 、 ,然後啟用 區段的 選項。按 以安裝所需的套件。NFS 與 NIS 一樣,都是主從式系統。但一台機器可同時扮演這兩種角色 — 它可透過網路提供檔案系統 (輸出),也可以從其他主機掛接檔案系統 (輸入)。
SUSE Linux Enterprise Server 上不支援在輸出伺服器本地掛接 NFS 磁碟區。
28.3 設定 NFS 伺服器 #
NFS 伺服器可透過 YaST 來設定,也可以手動設定。若要進行驗證,還可以將 NFS 與 Kerberos 結合使用。
28.3.1 以 YaST 輸出檔案系統 #
使用 YaST,將您網路中的主機轉變為 NFS 伺服器,此類伺服器可將目錄和檔案輸出到擁有其存取權的所有主機或一個群組下的全體成員。因此,無需在每個主機上本地安裝應用程式,伺服器也可以提供應用程式。
若要設定這樣的伺服器,請執行下列步驟︰
啟動 YaST 並選取圖形 28.1 「NFS 伺服器組態工具」。系統可能會提示您安裝其他軟體。
› ;請參閱圖 28.1︰ NFS 伺服器組態工具 #啟用
選項圓鈕。如果系統上的防火牆 (SuSEfirewall2) 處於使用中狀態,請核取
。YaST 會啟用nfs
服務來調整其組態以使其適用於 NFS 伺服器。檢查是否要注意:NFSv2。
。如果停用 NFSv4,YaST 將只支援 NFSv3。如需啟用 NFSv2 的相關資訊,請參閱如果選取 NFSv4,請另行輸入適當的 NFSv4 網域名稱。
idmapd
精靈會使用此參數。Kerberos 設定需要該精靈,當用戶端無法處理數字使用者名稱時,也需要使用該精靈。如果您不執行idmapd
或無任何特殊要求,請將它保留為localdomain
(預設值)。如需idmapd
精靈的詳細資訊,請參閱/etc/idmapd.conf
。
若您需要安全存取伺服器,請按一下
。先決條件是您的網域中安裝有 Kerberos,且伺服器和用戶端都可進行 Kerberos 驗證。按 繼續執行下一個組態對話方塊。按一下對話方塊上半部分中的
以輸出目錄。如果您尚未設定允許的主機,系統會自動彈出另一個對話方塊,可讓您輸入用戶端資訊及選項。輸入主機萬用字元 (通常您可以保留預設設定不變)。
有四種主機萬用字元類型可讓您針對各主機進行設定︰單一主機 (名稱或 IP 位址)、網路群組、萬用字元 (例如
*
摽是所有機器都可存取伺服器) 以及 IP 網路。如需這些選項的詳細資訊,請參閱
輸出
手冊頁。按一下
以完成組態。
28.3.2 手動輸出檔案系統 #
NFS 輸出服務的組態檔案為 /etc/exports
和 /etc/sysconfig/nfs
。如果 NFSv4 伺服器組態包含經過 Kerberos 驗證的 NFS,或者用戶端不能使用數字使用者名稱,則除了這些檔案外,還需要 /etc/idmapd.conf
。
若要啟動或重新啟動服務,請執行 systemctl restart nfsserver
指令。此指令還會將 NFS 伺服器必需的 RPC portmapper 重新啟動。
為確保 NFS 伺服器永遠都會在開機時啟動,請執行 sudo systemctl enable nfsserver
。
NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 通訊協定。現在,針對 NFSv4 輸出的目錄設定方法與 NFSv3 相同。
在 SUSE Linux Enterprise Server 11 上,必須在 /etc/exports
中指定結合掛接。現在仍支援此方式,但已有了取代方案。
/etc/exports
/etc/exports
檔案包含一份項目清單。每一個項目都指出一個共享的目錄,並記錄它的共享方式。/etc/exports
中的典型項目會包含︰/SHARED/DIRECTORY HOST(OPTION_LIST)
例如︰
/export/data 192.168.1.2(rw,sync)
這裡使用了 IP 位址
192.168.1.2
,以識別允許的用戶端。您也可以使用主機的名稱以及指向一組主機 (*.abc.com
、*
等) 或網路群組 (@my-hosts
) 的萬用字元。如需所有選項及其意義的詳細說明,請參閱 man 頁面
exports
(man exports
)。如果您在 NFS 伺服器執行時修改了
/etc/exports
,則需使用sudo systemctl restart nfsserver
指令重新啟動 NFS 伺服器,以使變更生效。/etc/sysconfig/nfs
/etc/sysconfig/nfs
檔案包含一些決定 NFSv4 伺服器精靈行為的參數。參數NFS4_SUPPORT
必須設定為yes
(預設值)。NFS4_SUPPORT
決定 NFS 伺服器是否支援 NFSv4 輸出和用戶端。如果您在 NFS 伺服器執行時修改了
/etc/sysconfig/nfs
,則需使用sudo systemctl restart nfsserver
指令重新啟動 NFS 伺服器,以使變更生效。提示:裝載選項在 SUSE Linux Enterprise Server 11 上,必須在
/etc/exports
中指定--bind
掛接。現在仍支援此方式,但已有了取代方案。現在,針對 NFSv4 輸出的目錄設定方法與 NFSv3 相同。注意:NFSv2如果 NFS 用戶端仍相依於 NFSv2,可透過以下設定在伺服器的
/etc/sysconfig/nfs
中將其啟用︰NFSD_OPTIONS="-V2" MOUNTD_OPTIONS="-V2"
重新啟動服務後,執行以下指令檢查版本 2 是否可使用︰
tux >
cat /proc/fs/nfsd/versions +2 +3 +4 +4.1 -4.2/etc/idmapd.conf
從 SLE 12 SP1 開始,僅當使用 Kerberos 驗證或用戶端不能使用數字使用者名稱時,才需要
idmapd
精靈。自 Linux 核心 2.6.39 起,Linux 用戶端可以使用數字使用者名稱。idmapd
精靈會將傳送到伺服器的 NFSv4 要求進行名稱到 ID 的映射,並回覆用戶端。如果需要,
idmapd
需在 NFSv4 伺服器上執行。用戶端上的名稱到 ID 映射將由以下套件提供的nfsidmap
來執行︰ nfs-client。對於可能使用 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
若要啟動
idmapd
精靈,請執行systemctl start nfs-idmapd
。如果您在精靈執行時修改了/etc/idmapd.conf
,則需使用systemctl start nfs-idmapd
指令重新啟動精靈,以使變更生效。如需更多資訊,請參閱
idmapd
與idmapd.conf
的手冊頁 (man idmapd
與man idmapd.conf
)。
28.3.3 NFS 配合使用 Kerberos #
若要讓 NFS 使用 Kerberos 驗證,必須啟用一般安全性服務 (GSS)。在初始 YaST NFS 伺服器對話方塊中選取
。您必須有一個工作中的 Kerberos 伺服器才能使用此功能。YaST 不會設定伺服器,而只是使用所提供的功能。如果您要使用 Kerberos 驗證,則除了 YaST 組態之外,還必須要完成以下步驟才能執行 NFS 組態︰請確定伺服器和用戶端位於相同的 Kerberos 領域中。它們必須存取相同的 KDC (金鑰配送中心) 伺服器,並共享它們的
krb5.keytab
檔案 (所有機器上的預設位置都是/etc/krb5.keytab
)。如需有關 Kerberos 的詳細資訊,請參閱Chapter 6, Network Authentication with Kerberos在用戶端上執行
systemctl start rpc-gssd.service
以啟動 gssd 服務。在伺服器上執行
systemctl start rpc-svcgssd.service
以啟動 svcgssd 服務。
若要進行 Kerberos 驗證,也需要在伺服器上執行 idmapd
精靈。如需詳細資訊,請參閱 /etc/idmapd.conf
。
如需有關設定啟用 Kerberos 之 NFS 的詳細資訊,請參閱第 28.5 節 「更多資訊」 中的連結所提供的內容。
28.4 設定用戶端 #
您不需安裝其他軟體就能將您的主機設定為 NFS 用戶端。所有需要的套件預設都會安裝。
28.4.1 以 YaST 輸入檔案系統 #
授權使用者可以使用 YaST NFS 用戶端模組將NFS 目錄從 NFS 伺服器掛接到本地檔案樹。請執行下列步驟︰
啟動 YaST NFS 用戶端模組。
在
索引標籤中按一下 。輸入 NFS 伺服器的主機名稱、要輸入的目錄和在本地掛接此目錄的掛接點。使用 NFSv4 時,在
標籤中選取 。另外, 必須包含 NFSv4 伺服器所用的相同值。預設網域為localdomain
。若要為 NFS 使用 Kerberos 驗證,則 GSS 安全性必須啟用。選取
。如果您要使用防火牆並希望允許遠端電腦存取服務,請啟用
索引標籤中的 。防火牆的狀態顯示於核取方塊旁。按一下
,儲存變更。
組態將會寫入 /etc/fstab
中,並會掛接指定的檔案系統。當您稍後啟動 YaST 組態用戶端時,它也會從這個檔案讀取現有組態。
在透過網路將根分割區掛接為 NFS 共用的 (無磁碟) 系統中,設定 NFS 共用可供存取的網路裝置時請保持謹慎。
將系統關閉或重新開機時,預設的處理順序是先關閉網路連接,然後卸載根分割區。對於 NFS 根分割區,這種順序會造成問題,因為在尚未與 NFS 共用啟動網路連接的情況下,根分割區無法完全卸載。為防止系統停用相關的網路裝置,請依第 16.4.1.2.5 節 「啟動網路裝置」中所述開啟網路裝置組態索引標籤,然後在 窗格中選取 。
28.4.2 手動輸入檔案系統 #
從 NFS 伺服器手動輸入檔案系統的先決條件是有 RPC 埠對應程式正在執行。nfs
服務負責正確啟動該程式;因此,請以 root
身分輸入 systemctl start nfs
,以啟動該服務。接著,可以像處理本地分割區一樣,使用 mount
指令在檔案系統中掛接遠端檔案系統︰
tux >
sudo mount HOST:REMOTE-PATHLOCAL-PATH
例如,若要從 nfs.example.com
機器輸入使用者目錄,可以使用︰
tux >
sudo mount nfs.example.com:/home /home
28.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
身分執行 systemctl start autofs
以啟動設定。在此範例中,server1
的 /data
目錄 /nfsmounts/localdata
會掛接 NFS,而 server2
的 /nfsmounts/nfs4mount
會掛接 NFSv4。
如果在 autofs 服務執行期間有程式編輯了 /etc/auto.master
檔案,則必須使用 systemctl restart autofs
重新啟動自動掛載器,才能使變更生效。
28.4.2.2 手動編輯 /etc/fstab
#
/etc/fstab
中典型的 NFSv3 掛接項目如下︰
nfs.example.com:/data /local/path nfs rw,noauto 0 0
對於 NFSv4 掛接,請在第三欄中使用 nfs4
而不是 nfs
︰
nfs.example.com:/data /local/pathv4 nfs4 rw,noauto 0 0
noauto
選項可防止在啟動時自動掛接檔案系統。如果要手動掛接各檔案系統,可以縮短掛接指令的長度,僅指定掛接點︰
tux >
sudo mount /local/path
請注意,如果未輸入 noauto
選項,系統的 init 程序檔會在啟動時處理這些檔案系統的掛接。
28.4.3 平行 NFS (pNFS) #
NFS 是最舊的通訊協定之一,開發於八十年代。雖然如此,NFS 對於共用小型檔案還是綽綽有餘的。但是,當您要傳輸大型檔案或有大量的用戶端要存取資料時,NFS 伺服器會成為瓶頸,嚴重影響系統效能。出現這種情況的原因是檔案大小快速變大,而乙太網路的相對速度無法完全跟上這一變化。
當您向一般 NFS 伺服器要求檔案時,伺服器會尋找檔案中繼資料、收集所有資料,並透過網路將資料傳輸到您的用戶端。但是,不論檔案的大小,效能瓶頸都會變得很明顯︰
對於小型檔案,大部分時間都用在收集中繼資料上.
對於大型檔案,大部分時間則用在將資料從伺服器傳輸至用戶端上。
pNFS (或平行 NFS) 克服了這個局限性,因為它將檔案系統中繼資料與資料位置分隔開來。因此,pNFS 需要兩種類型的伺服器︰
中繼資料或控制伺服器,用於處理所有非資料流量
一或多個儲存伺服器,用於存放資料
中繼資料與儲存伺服器構成了一個邏輯 NFS 伺服器。當用戶端想要讀取或寫入時,中繼資料伺服器會告知 NFSv4 用戶端使用哪個儲存伺服器來存取檔案區塊。用戶端可以直接存取伺服器上的資料。
SUSE Linux Enterprise Server 僅在用戶端上支援 pNFS。
28.4.3.1 使用 YaST 設定 pNFS 用戶端 #
依程序 28.2 「輸入 NFS 目錄」 中所示繼續操作,但要按一下 核取方塊並選擇性地按一下 。YaST 會執行所有必要的步驟,並將所有需要的選項寫入檔案 /etc/exports
。
28.4.3.2 手動設定 pNFS 用戶端 #
請參閱第 28.4.2 節 「手動輸入檔案系統」 開始設定。大部分組態均由 NFSv4 伺服器執行。對於 pNFS,唯一的差異是將 minorversion
選項和中繼資料伺服器 MDS 伺服器新增至 mount
指令︰
tux >
sudo mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT
為了協助進行除錯,請在 /proc
檔案系統中變更該值︰
tux >
sudo echo 32767 > /proc/sys/sunrpc/nfsd_debugtux >
sudo echo 32767 > /proc/sys/sunrpc/nfs_debug
28.5 更多資訊 #
除了 exports
、nfs
和 mount
的 man 頁面以外,/usr/share/doc/packages/nfsidmap/README
中也提供了有關設定 NFS 伺服器和用戶端的資訊。如需更多線上文件,請參閱下列網站︰
如需詳細的線上技術文件,請造訪 SourceForge。
如需設定已監督之 NFS 的指示,請參閱 NFS 第 4 版開放原始碼實作參考。
如果您有任何關於 NFSv4 的問題,請參閱 Linux NFSv4 常見問答集。