Network File Service (NFS)
要執行 NFS 服務,要安裝兩個 RPM 套件,portmap 和 nfs-utils,兩者皆是 System V 啟動方式,將服務的腳本放在 /etc/init.d/ 中。NFS 分享出來的目錄,設定在 /etc/exports 中。NFS 服務要啟動,一定要啟動 portmap、rps.nfsd、rps.mountd 三個服務。在預設狀況下,NFS 是使用 2049 通訊埠,如果 2049 被其他程式佔用,就由 portmap 來指派其他的服務埠。
NFS 可用 tcp_wrappers 來作為連線控管的機制,控管的標的是 portmap,例如要讓 192.168.0.0/24 的網段可以使用 NFS 服務,可以在 /etc/hosts.allow 中設定:
portmap: 192.168.0.
要確認本機是否有啟動 NFS 服務,可使用以下指令:
# rpcinfo -p
程式採用的協定連接阜
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 765 status
100024 1 tcp 768 status
100011 1 udp 680 rquotad
100011 2 udp 680 rquotad
100011 1 tcp 683 rquotad
100011 2 tcp 683 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 udp 32770 nlockmgr
100021 3 udp 32770 nlockmgr
100021 4 udp 32770 nlockmgr
100021 1 tcp 47175 nlockmgr
100021 3 tcp 47175 nlockmgr
100021 4 tcp 47175 nlockmgr
100005 1 udp 713 mountd
100005 1 tcp 716 mountd
100005 2 udp 713 mountd
100005 2 tcp 716 mountd
100005 3 udp 713 mountd
100005 3 tcp 716 mountd
# service portmap status
portmap (pid 2672) 正在執行…
# service nfs status
rpc.mountd (pid 3505) 正在執行…
nfsd (pid 3499 3498 3497 3496 3495 3494 3493 3492) 正在執行…
rpc.rquotad (pid 3471) 正在執行…
要確認遠端主機是否有開啟 NFS,可使用下列指令:
# rpcinfo -p REMOTE_HOST
# showmount -e REMOTE_HOST
本機目錄分享指令:
.exportfs -r:在修改完 /etc/exports 後更新分享目錄 (refresh)
.exportfs -v:顯示目前已經分享的目錄及其參數
.exportfs -a:分享所有在 /etc/exports 中指定的目錄
.exportfs -au:關閉所有在 /etc/exports 中指定的分享目錄
==============================
NFS Ports
NFS 服務埠基本上是由 portmap 來管理,我們也可以為 portmap 指定固定的服務埠,其中使用的程式包含 mountd、statd、和 lockd。要指定固定的服務埠可在 /etc/sysconfig/nfs 中設定:
MOUNTD_PORT=”4002″
STATD_PORT=”4003″
LOCKD_TCPPORT=”4004″
LOCKD_UDPPORT=”4004″
RQUOTAD_PORT=”4005″
STATD_OUTGOING_PORT=”4006″
NFS Server
NFS Server 要分享出去的目錄都寫在 /etc/exports 裡,其中預設的參數是 ro,sync,root_squash,語法:
/SHARE_DIRECTORY ALLOW_HOSTS(PERMISSION, 參數) (在 ALLOW_HOSTS 與 PERMISSION 之間不可以加空白)
例:
/var/ftp/pub *.example.com(ro,sync) bigserver.redhat.com(rw,sync) (/var/ftp/pub 這個目錄,在 *.example.com 的網域中可以唯讀、資料直接寫入的權限;在 bigserver.redhat.com 這台主機,有讀與寫、資料直接寫入的權限,其中網域名稱要能夠反查出來)
/root/presentations server2.example.com(rw,sync) (/root/presentations 這個目錄,在 server2.example.com 這台主機,有讀與寫、資料直接寫入的權限,其中網域名稱要能夠反查出來)
/data 192.168.10.0/255.255.255.0(sync) (/data 這個目錄,在 192.168.10.0/24 這個網段,有唯讀、資料直接寫入的權限)
參數:
.root_squash:預設參數,如果 NFS Client 是以 root 的身份在操作,會將其身份轉換成 nfsnobody。
.no_root_squash:不要將 root 的身份轉換成 nfsnobody。
.all_squash:其他使用者都將身份轉換成 nfsnobody。
.no_all_squash:預設參數,不會轉換 NFS Client 使用者的身份,會保留其 UID 和 GID。
.sync:預設參數,資料同步直接寫入硬碟,使用上會比較慢,可是資料比較有保障。
.async:資料不同步寫入硬碟,會先寫入緩衝區 (buffers),再在背景寫入硬碟,速度比較快,可是資料比較可能會有損毀。
.anonuid:預設為 anonuid=65534,nfsnobody,可在此指定要轉換的 UID。
.anongid:預設為 anongid=65534,nfsnobody,可在此指定要轉換的 GID。
啟動:
# chkconfig nfs on (設定每次開機都會啟動)
# service nfs start (現在啟動 NFS Server)
檢查:
# service nfs status (檢視本機 nfs server 狀況)
rpc.mountd (pid 16580) 正在執行…
nfsd (pid 16574 16573 16572 16571 16570 16569 16568 16567) 正在執行…
rpc.rquotad (pid 16563) 正在執行…
# exportfs -v (檢視本機分享目錄及其權限)
/var/ftp/pub 192.168.0.0/24(rw,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
# showmount -e localhost (顯示 localhost 所分享出來可供掛載的目錄)
Export list for localhost:
/var/ftp/pub 192.168.0.0/24
# rpcinfo -p localhost (顯示 localhost 所註冊的 RPC 服務)
程式採用的協定連接阜
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
…… 略 ……
100005 3 udp 644 mountd
100005 3 tcp 647 mountd
==============================
NFS Client
NFS 目錄的掛載可由 root 手動掛載或設定在 /etc/fstab 使在開機時自動掛載。
手動掛載:
# mount -t nfs SERVER_IP:/SHARE_DIRECTORY /MOUNT_POINT
例:
# mount -t nfs 192.168.0.2:/var/ftp/pub /mnt/nfs
# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G 5.9G 11G 36% /
/dev/sda1 99M 22M 72M 24% /boot
tmpfs 760M 0 760M 0% /dev/shm
192.168.0.2:/var/ftp/pub 18G 5.9G 11G 36% /mnt/nfs
自動掛載:
在 /etc/fstab 設定:
SERVER_IP:/SHARE_DIRECTORY /MOUNT_POINT nfs defaults 0 0
例:
# echo “192.168.0.2:/var/ftp/pub /mnt/share nfs defaults 0 0” >> /etc/fstab
# mount -a
# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G 5.9G 11G 36% /
/dev/sda1 99M 22M 72M 24% /boot
tmpfs 760M 0 760M 0% /dev/shm
192.168.0.2:/var/ftp/pub 18G 5.9G 11G 36% /mnt/share
autofs:
除了在 /etc/fstab 中設定開機掛載外,也可以使用 autofs 來自動掛載 NFS:
# echo “NFSDIR –fstype=nfs,rw,soft 192.168.0.2:/var/ftp/pub” >> /etc/auto.misc (將本行加到 /etc/auto.misc 中)
# service autofs restart (重新啟動 autofs)
正在停止 automount: [ 確定 ]
正在啟動 automount: [ 確定 ]
# cd /misc/NFSDIR (每次只要有人使用到此目錄,就會自動掛載)
# ls
This.is.var_ftp_pub
# mount (檢查一下所有掛載點看看有沒有掛載起來)
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/var/ftp/pub on /misc/NFSDIR type none (rw,bind)
相關參數:
在 /etc/fstab 或 /etc/auto.misc 中,如果掛載 NFS 可使用的參數如下:
.rsize=8192,wsize=8192:讀取及寫入的大小,影響網路傳輸時緩衝區記憶體容量,在區域網路時可加大,或是使用預設值:rsize=1024,wsize=1024。
.soft:斷線後會在背景重複呼叫直到回覆。
.hard:斷線後會在前景持續呼叫直到回覆。
.intr:和 hard 混合使用,如果呼叫太久可以中斷呼叫。
.nolock:取消檔案鎖定 (lockd) 的動作,以相容於舊版的 NFS。