twbsd.org
 
  Select Language: Home  SmbFTPD Forum 

書籍資料

ch00 序.htm

ch01 FreeBSD 簡介.htm

ch02 安裝 FreeBSD.htm

ch03 UNIX 系統入門.htm

ch04 使用者管理.htm

ch05 網路設定.htm

ch06 檔案系統管理.htm

ch07 系統安全.htm

ch08 編譯核心.htm

ch09 系統調校.htm

ch10 軟體安裝.htm

ch11 X Window 的使用.htm

ch12 NAT 及防火牆.htm

ch13 網頁伺服器.htm

ch14 網頁伺服器進階應用.htm

ch15 FTP 伺服器.htm

ch16 郵件伺服器.htm

ch17 郵件伺服器進階應用.htm

ch18 DHCP伺服器.htm

ch19 資料庫系統.htm

ch20 Samba 網路芳鄰.htm

ch21 NFS.htm

ch22 DNS 伺服器.htm

ch23 指令應用.htm

ch24 Shell Script.htm

cha1 附錄A etc目錄下的檔案介紹.htm

cha2 附錄B 製作 FreeBSD 安裝光碟.htm

cha3 附錄C 版權宣告.htm

 


View printable page

第二十一章 NFS

在 UNIX 的世界裡,二台 UNIX 系統要共享檔案時,最常使用的協定是 NFS (Network File System)。NFS 是一個歷史悠久的協定,它就像是 Windows 世界中的網路芳鄰一樣,可以讓我們將另一台機器的目錄當成本機的目錄使用。

本章將介紹如何架設 NFS 伺服器,讀完本章後,您將了解下列主題:

  • NFS 的運作原理。
  • 如何設定 NFS。
  • 如何使用 NFS 伺服器。

21.1 概論

NFS 是 Network File System。NFS 就好像是 UNIX 系統中的網路芳鄰,您可以使用 NFS 將伺服器上的資料夾匯出,讓其他 UNIX 主機可以將所匯出的資料夾掛入。當您有多台 UNIX 主機時,使用 NFS 可以讓您共享同一個資料夾。如此一來,同一份資料就不必放在多台機器上,而可以經由 NFS 來節省空間並達到資料的同步。使用 NFS 不僅可以分享一個系統中的目錄,您也可以用來分享光碟機、軟碟機等裝置。

由於 NFS 發展已久,它和一般檔案分享協定最大的差別在於 NFS 的主要程式是內建在系統核心中,而非像 Samba、FTP 等主要的程式是安裝在另一套軟體上。不過這不代表 NFS 不需要任何軟體就可以運行,在 FreeBSD 中,它還是需要下列幾支程式的幫忙:

  • nfsd:用來提供客戶端 NFS 服務。
  • mountd:用來告訴 nfsd 要分享的資料夾有哪些。nfsd 會將收到的 NFS 要求交由這支程式來執行。
  • rpcbind:用來告訴 NFS 客戶端伺服器所使用的連接埠為何。

如果您使用的是 FreeBSD 4.x,您會使用 portmap 而非 rpcbind 這支程式。

在客戶端方面,要使用 NFS 服務並不需要任何 daemon,但您也可以執行 nfsiod 這支程式以提高 NFS 的效能。

21.2 NFS 設定

首先,我們要先編輯 server 端的 /etc/rc.conf ,並加入下列的設定:

# 如果您使用 FreeBSD 4.x,請使用 portmap_enable。
portmap_enable="YES"
# 由於 FreeBSD 5.x 中,portmap 這支程式己被取代為 rpcbind,
# 所以如果您使用 FreeBSD 5.x,請使用 rpcbind_enable。
rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_enable="YES"
mountd_flags="-r"

在選項 nfs_server_flags 中,-u 表示我們提供 UDP 方式連線,而 -t 表示以 TCP 方式連線。如果您所要使用 NFS 的 client 都是 FreeBSD,您可以只以 TCP 連線,如此可以有較佳的效能。-n 4 表示我們一次打開四個 nfsd 的 daemon。

接著我們要設定 /etc/exports,這個檔案是用來設定我們所要分享的資料夾及其權限。/etc/exports 可能長得像這個樣子。

/usr/src /usr/local     -maproot=root
/home  -alldirs  -maproot=root -network 192.168.0.0 -mask 255.255.255.0
/cdrom -ro  -mapall=alex

第一個欄位為所要分享的目錄,如果所要分享的目錄位於同一個 slice 上,則必須寫在同一行。例如我們要分享的目錄是 /usr/src 及 /usr/local,因為這二個目錄位於同一個硬碟的分割區上,所以必須寫在同一行,也就是說同一個分割區只有一種權限。在目錄之後,我們會指定一些設定權限的參數,其意義如下:

參數 意義
-ro 表示 read only,唯讀。
-maproot=user 如果 client 以 root 存取,則將它的權限對映成本機 user 的權限。
-mapall=user 將所有 client 的存取連線對映到 user,也就是說所有人的身份都轉成 user。
-alldirs 可以讓使用者將該分享資料夾的任一目錄做為 mount point。也就是說當我們分享的是 /usr 時,client 也可以將 /usr/include 當成掛入點來 mount。但前提是 /usr 必須是一個獨立的 filesystem,也就是說 /usr 必須是獨立分割成一個 slice。
-network IP -mask MASK  指定允許連線的網域。

您可以 man exports 來獲得更多關於 exports 格式的資訊。我們每次設定完 /etc/exports 都必須以下列指令重新啟動 mountd:

# kill -HUP `cat /var/run/mountd.pid`

不過由於我們是第一次設定,所以連 mountd 都還沒有啟動,所以你可以選擇重新開機或是執行下列指令來啟動 NFS 服務。

首先是啟動 RPC port map,如果您是使用 FreeBSD 4.x,請將下列 rpcbind 指令改為 portmap

# rpcbind
# nfsd -u -t -n 4
# mountd -r

完成了 Server 端的設定後,我們還要做 client 端的設定。在 client 端的 rc.conf 中,我們要加入下列的設定:

nfs_client_enable="YES"
nfs_client_flags="-n 4"

當設定了 nfs_client_enable 為 YES 後,在開機時即會自動啟動 nfsiod ,而這裡的 -n 4 和 server 的設定一樣,代表我們一次要啟動四份 nfsiod 來做 nfs 連線。我們不一定要在 NFS client 啟動 nfsiod,如果沒有 nfsiod,照樣可以使用,但 nfsiod 可以提高連線效率。

設定完 rc.conf 後,要重新開機才會生效,同樣的,如果您不想重新開機,你可以手動執行下列指令來讓 nfs client 生效:

# nfsiod -n 4

現在我們可以開始使用 NFS 了。首先,我們可以使用 showmount 這個指令來查看 server 上有哪些分享的資料夾,假設 NFS server為 192.168.1.1:

# showmount -e 192.168.1.1
Exports list on 192.168.1.1:
/home Everyone
/usr 192.168.1.2

接著我們就可以將想要掛入的資料夾 mount 進來:

# mount 192.168.1.1:/home /mnt

如果您要想在一開機就將該資料夾掛入,您可以編輯 /etc/fstab,並加入下列設定:

192.168.1.1:/home   /mnt    nfs rw  0   0

21.3 NFS 的限制

在使用 NFS 時,有些事我們必須特別注意。如果您 NFS server 負擔相當重,也許你會發現該伺服器時常沒有回應,而 client 端也會因此而無法動作。這並非 FreeBSD 獨有的問題,使用 NFS 時,網路卡的選擇及網路整體的品質很重要。否則在 client 和 server 系統負擔不一時,很容易產生沒有回應的情形。

有時候我們將 mount 某台伺服器的資料夾,但如果該伺服器關機或是停止 NFS 服務,當您 ls 所掛入的目錄時,整台機器會因而停止動作。此時除非該 NFS 伺服器又開啟,否則您只能重新啟動了。因此,建議您 mount NFS 並完成所需的存取動作後,就立即 umount,才不會使 client hang 住。如果您希望當所 mount 的伺服器發生問題時,本機可以不受到影響,您可以改用 mount_nfs 指令並加上參數 -i 及 -s。

# mount_nfs -s -i 192.168.1.1:/home /mnt

參數 -i 允許我們在使用 Ctrl+C 來中斷 mount 的動作。參數 -s 是使用 soft mount 模式,當檔案系統對於所 mount 的伺服器操作失敗時,重試幾次後就不再試了。

 

Top Ths file was last modified: 2007 February 25 10:54:04.

Copyright © 2002-2024 Alex Wang from www.twbsd.org. All rights reserved.