Redhat設定NFS掛載的簡單步驟
初識 nfs 還是在測試 lvs 負載均衡的時候,為了保證程式碼的一致性,將一臺 Realserver 作為 nfs 伺服器,而其他 Realserver 均以 nfs 將程式碼掛載過來。這樣就保證了程式碼的一致性,但也是由很大隱患的,一旦那臺 Realserver 宕機,那就全軍覆沒了...好了,廢話不多說,進入 nfs 掛載簡單步驟。
一、安裝 nfs
一般 redhat 是預設安裝了 nfs 服務的,如果非預設安裝且取消勾選 nfs 的話,需要掛載 iso 或下載安裝包手動安裝,就幾個 rpm 包,就不多說了。
二、配置/etc/exports
nfs 允許掛載的目錄及許可權需在檔案/etc/exports 中進行定義。例如,我們要將程式碼所在目錄/www/code 共享出來,那麼我們需要編輯/etc/exports 檔案,追加一行:
1 | /www/code*(rw,sync,no_root_squash) |
其中:
- /www/code 是要共享的目錄;
- * 代表允許所有的網路段訪問(僅測試中使用,實際使用應該做嚴格的 IP 限制);
- rw 開啟共享目錄的可讀寫許可權;
- sync 是資料同步寫入記憶體和硬碟;
- no_root_squash 是客戶端分享目錄使用者的許可權,如果客戶端使用 root,那對於該共享目錄而言,客戶端就有 root 許可權;
其他更多引數說明:
Shell1234567891011121314151617 | ro只讀訪問rw讀寫訪問sync所有資料在請求時寫入共享async nfs在寫入資料前可以響應請求secure nfs通過1024以下的安全TCP/IP埠傳送insecure nfs通過1024以上的埠傳送wdelay如果多個使用者要寫入nfs目錄,則歸組寫入(預設)no_wdelay如果多個使用者要寫入nfs目錄,則立即寫入,當使用async時,無需此設定。hide在nfs共享目錄中不共享其子目錄no_hide共享nfs目錄的子目錄subtree_check如果共享/usr/bin之類的子目錄時,強制nfs檢查父目錄的許可權(預設)no_subtree_check和上面相對,不檢查父目錄許可權all_squash共享檔案的UID和GID對映匿名使用者anonymous,適合公用目錄。no_all_squash保留共享檔案的UID和GID(預設)root_squash root使用者的所有請求對映成如anonymous使用者一樣的許可權(預設)no_root_squas root使用者具有根目錄的完全管理訪問許可權anonuid=xxx指定nfs伺服器/etc/passwd檔案中匿名使用者的UID anongid=xxx指定nfs伺服器/etc/passwd檔案中匿名使用者的GID |
三、啟動 nfs 服務
在啟動 nfs 之前需要先啟動 portmap 服務,否則如下報錯:
Shell123456 | [root@localhost~]# service nfs start Starting NFS services:[OK]Starting NFS quotas:Cannot register service:RPC:Unable toreceive;errno=Connection refused rpc.rquotad:unable toregister(RQUOTAPROG,RQUOTAVERS,udp).[FAILED]Starting NFS daemon: |
正確方法先啟動 portmap 再啟動 nfs,如下:
Shell12 | service portmapservice nfs start |
或
Shell12 | /etc/init.d/portmap start/etc/init.d/nfs start |
四、在客戶端主機上掛載共享目錄
1、掛載之前同樣需要先啟動 portmap 服務(同上);
2、在客戶端使用 showmount -e 檢視 nfs 主機共享情況:
Shell123 | [root@localhost2~]# showmount -e 192.168.1.100 Export list for192.168.1.100:/www/code* |
3、在客戶端建立 code 資料夾(名稱需相同,路徑可以不同),並使用 mount 掛載命令:
Shell1 | mount-tnfs192.168.1.100:/www/code/www/code |
注意事項:千萬不要學博主,測試時誤使用了 mount -t nfs 192.168.1.100:/www/code /www/,導致原先/www 目錄內容全部被卸下,就算重新 mount -o loop 也是很麻煩的!所以強烈建議路徑保持一致!
4、若無報錯,則可使用 df -h 檢視到掛載情況:
Shell1234567 | [root@localhost~]# df -h 檔案系統容量已用可用已用%掛載點/dev/sda231G3.7G25G13%//dev/sda540G9.5G29G26%/www/dev/sda1190M12M169M7%/boot tmpfs2.0G02.0G0%/dev/shm192.168.1.100:/www/code237G131G94G59%/www/code |
5、若是需要長期使用,則可以設定開機自動掛載,將相關服務設定為自啟動,並將掛載命令也加入開機啟動即可(略)
五、在客戶端解除安裝已掛載的目錄
1、常規解除安裝命令:
Shell1 | umount/www/code |
2、有時因為 nfs 主機或網路故障,會出現常規解除安裝提示 device is busy 的提示,此時強制解除安裝命令如下:
Shell1 | umount-f/www/code |
或
Shell1 | umount-l/www/code |
3、上述解除安裝命令均無法生效時,請繼續往下看:
以下摘自網路:
fuser 通常被用在診斷系統的“resource busy”問題,通常是在你希望 umount 指定的掛載點得時候遇到。 如果你希望 kill 所有正在使用某一指定的 file, file system or sockets 的程序的時候,你可以使用-k 選項。
格式為: $ fuser -m -v (nfs 掛載點) 回車執行後得到的結果依次是:使用者 程序號 許可權 命令
此命令可以檢視到訪問此裝置的所有程序,停止程序後 umount.
如果新增引數 -k 則可以一次性將所有當前訪問 nfs 共享盤陣的程序停止 也可以加-i 開啟互動顯示,以便使用者確認
或者用 fuser 命令:
#fuser -v -m 掛載點
即可查處 使用者 PID 等,KILL 掉該程序後再 umount.
或者
#umount -l 掛載點
選項 –l 並不是馬上 umount,而是在該目錄空閒後再 umount.還可以先用命令 ps aux 來檢視佔用裝置的程式 PID,然後用命令 kill 來殺死佔用裝置的程序,這樣就 umount 的 NFS 服務安全非常放心了.
好了,以上就是 redhat 下的簡單設定,也是博主自己用的步驟,適合初次使用 nfs 的筒子參考,希望對你有所幫助!