NFS:Network file system,網路文件系統.由sun公司1984年推出,用來在網路中的多台計算機間實現資源共享(包括象文件或cd-rom).設計的目的是:實現在不同系統間交互使用,所以它的通信協議採用與主機和操作系統無關的技術
NFS Server可以看作是File Server,它可以讓你的PC通過網路將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使用NFS的遠端文件就象是在使用本地文件一樣.
一 服務端配置文檔
$ cat /etc/exports
- /data/storage/bbs 10.10.100.0/24(rw,sync)
- 格式如下
- #[共享目錄] [主機/網路](許可權) []()多個
1 共享目錄屬性
ll /data/storage/bbs/ | awk '/^d/ {print $1,$2,$3,$4}'
- drwxr-xr-x 6 www www
- drwxr-xr-x 13 www www
- drwxr-xr-x 2 www www
- drwx------ 4 www www
- drwxr-xr-x 10 www www
- drwxr-xr-x 11 www www
- drwxr-xr-x 313 www www
- drwxr-xr-x 241 www www
- drwxr-xr-x 276 www www
- drwxr-xr-x 9 www www
- drwxr-xr-x 121 www www
注意:文件夾屬主屬組與許可權,與客戶端相同
2 授權的主機或網路
- 可以使用完整的IP 或者是網路,例如10.10.100.10 或10.10.100.0/24 ,也可以使用主機名稱,
- 但這個主機名稱要在/etc/hosts 內,或者使用DNS 找到該名稱
3 許可權詳解
參數值 內容說明
- ro | rw
- 該目錄分享的許可權是可讀寫(read-write) 或只讀(read-only),但最終能不能讀寫,還是與檔案系統的rwx 及身份有關.
- sync | async sync
- 代表資料會同步寫入到內存與磁碟中,async 則代表資料會先暫存於內存當中,而非直接寫入磁碟!
- no_root_squash | root_squash | all_squash
- 用戶端使用NFS系統的帳號若為root 時,系統該如何判斷這個帳號的身份?預設的情況下,
- 用戶端root 的身份會由root_squash 的設定壓縮成nfsnobody, 如此對伺服器的系統會較有保障.
- 但如果你想要開放用戶端使用root 身份來操作伺服器的檔案系統,那麼這裡就得要開no_root_squash 才行,
- all_squash 不論登入NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody(nfsnobody)
- anonuid | anongid
- anon 意指anonymous (匿名者) 前面關於*_squash 提到的匿名使用者的UID 設定值,通常為nobody(nfsnobody),
- 但是你可以自行設定這個UID 的值!當然,這個UID 必需要存在於你的/etc/passwd 當中! anonuid 指的是UID 而anongid 則是群組的GID.
注意:若是多個許可權,則以逗號 "," 分開
- $ /etc/init.d/nfs start
- $ /etc/init.d/nfslock start
5 驗證 nfs 伺服器
$ netstat -antulp | grep -E '2049|rpc'
- tcp 0 0 0.0.0.0:896 0.0.0.0:* LISTEN 15980/rpc.rquotad
- tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
- tcp 0 0 0.0.0.0:910 0.0.0.0:* LISTEN 15995/rpc.mountd
- tcp 0 0 0.0.0.0:628 0.0.0.0:* LISTEN 16134/rpc.statd
- tcp 0 0 10.0.100.71:2049 10.0.100.82:680 ESTABLISHED -
- tcp 0 0 192.168.57.71:2049 192.168.57.92:982 ESTABLISHED -
- udp 0 0 0.0.0.0:2049 0.0.0.0:* -
- udp 0 0 0.0.0.0:907 0.0.0.0:* 15995/rpc.mountd
- udp 0 0 0.0.0.0:622 0.0.0.0:* 16134/rpc.statd
- udp 0 0 0.0.0.0:625 0.0.0.0:* 16134/rpc.statd
- udp 0 0 0.0.0.0:893 0.0.0.0:* 15980/rpc.rquotad
注意:2049為nfs監聽埠
- # mount -t nfs -o nosuid,noexec,nodev,rw -o bg,soft,rsize=32768,wsize=32768 10.10.100.77:/data/storage/bbs/ /storage/
2 客戶端掛載參數
參數 意義
- suid | nosuid
- 如果掛載的partition 上面有任何SUID 的binary 程式時, 你只要使用nosuid 就能夠取消SUID 的功能
- rw | ro
- 你可以指定該檔案系統是只讀(ro) 或可讀寫!伺服器可以提供給你可讀寫,用戶端可以僅允許只讀的參數設定值
- dev | nodev
- 是否保留裝置檔案的特殊功能
- exec | noexec
- 是否具有執行binary file 的許可權
- user | nouser
- 是否允許使用者進行檔案的掛載與卸載功能
- fg |bg
- 當執行掛載時,該掛載的行為會在前台(fg) 還是在後台(bg) 執行;若在前台執行時,則mount 會持續嘗試掛載,直到成功或time out 為止,若為後台執行, 則mount 會在背持續多次進行mount ,而不會影響到前景的程序操作.
soft | hard- 如果是hard 的情況,則當兩者之間有任何一部主機離線,則RPC 會持續的呼叫,直到對方恢復連線為止.如果是soft 的話,那RPC 會在time out 后重複呼叫,而非持續呼叫, 因此系統的延遲會比較不這麼明顯.
- intr
- 當你使用上頭提到的hard 方式掛載時,若加上intr 這個參數, 則當RPC 持續呼叫中,該次的呼叫是可以被中斷的(interrupted).
- rsize | wsize
- 讀出(rsize)與寫入(wsize)的區塊大小(block size).這個設定值可以影響用戶端與NFS服器端傳輸資料的緩衝記憶容量.
3 client端 系統中的www用戶
- www:x:5000:5000::/home/www:/sbin/nologin
4 apache 用戶與組
- <IfModule !mpm_netware_module>
- <IfModule !mpm_winnt_module>
- User www
- Group www
- IfModule>
- IfModule>
5 clinet端 掛載點屬性
- drwxr-xr-x 6 www www
- drwxr-xr-x 13 www www
- drwxr-xr-x 2 www www
- drwx------ 4 www www
- drwxr-xr-x 10 www www
- drwxr-xr-x 11 www www
- drwxr-xr-x 313 www www
- drwxr-xr-x 241 www www
- drwxr-xr-x 276 www www
- drwxr-xr-x 9 www www
- drwxr-xr-x 121 www www
注意:文件夾屬主屬組與許可權,與服務端相同
三 維護 NFS
1 nfs 使用的協議與埠
- grep -E '^nfs.*nfsd$' /etc/services
- nfs 2049/tcp nfsd
- nfs 2049/udp nfsd
2 RPC 使用的埠
- grep -E 'portmap' /etc/services
- sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
- sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
注意:
RPC 是固定使用port 111 來監聽埠
RPC 服務的功能就是在指定NFS 服務所對應的port number ,並且反回給用戶端,讓用戶端可以連結到正確的埠上去.
RPC 是如何知道每個NFS 的埠?這是當伺服器在啟動NFS 時會隨機取用數個埠,並主動的向RPC 註冊,因此RPC 可以知道每個埠對應的NFS.
- 服務端重新掛載nfs
- exportfs -arv
- 服務端卸載全部nfs
- exportfs -auv
- 服務端|客戶端 顯示nfs共享目錄
- showmount -e [ip]
擴展
NFS 的長連接
- 顯示NFS 共享目錄
- $ showmount -e
- Export list for one.test.com:
- /data/iso 10.0.100.0/24,192.168.57.0/24
- /data/htdocs/8080 10.0.100.0/24,192.168.6.0/24
- 査看與NFS綁定的連接
- $ netstat -antulp | grep 2049
- tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
- tcp 0 0 192.168.57.71:2049 192.168.57.92:984 ESTABLISHED -
- udp 0 0 0.0.0.0:2049 0.0.0.0:* -
- 當客戶端掛載NFS 后,客戶端就與服務端保持連接狀態"ESTABLISHED",如果幾百個NFS客戶端,
- 嘿嘿 不過如果在掛載時使用bg參數使用後台,則會在沒有數據時釋放連接.
參考
http://linux.vbird.org/linux_server/0330nfs.php
結束
使用 NFS時請先將rpcbind 服務啟動,rhel5/centos5 系列為 portmap 服務,rhel6/centos6 系列為 rpcbind 服務.
本文出自 「dongnan」 博客,請務必保留此出處http://dngood.blog.51cto.com/446195/827766
[火星人 ] 配置nfs 伺服器已經有767次圍觀