一 exportfs命令

? ? exportfs命令是和nfs-utils這個包一起安裝的
使用場景:比如我們已經(jīng)配置并掛載好了一些機器,隔了一段時間后我們又需要新增加一些機器來訪問服務端或者是增加共享的目錄,那此時呢,我們就需要更改配置文件然后重啟nfs服務,但如果遠程客戶端正在使用我們這個nfs服務或者說正在掛載著,這時候如果我們停止了nfs服務的話,那么遠程客戶端就會掛起,這個影響就比較大了,因為此時客戶端上還掛載著這個共享目錄,由于不能正常訪問,加上客戶端服務器讀寫非常頻繁,那這就會導致客戶端讀寫這個目錄的進程,比如nginx、php就會掛起,我們知道,當這個進程停止的話,狀態(tài)就會變成d,而d表示這個進程不能停,一旦變成d,客戶端上的這個進程就不正常了,這個進程殺不死也重啟不了,最終導致這個服務異常,甚至死機。
? ? 很明顯,nfs這個服務是不能隨便停的,如果要停的話,需要將客戶端掛載的目錄先卸載下來
? ? # umount /mnt ? ?//從掛載點卸載目錄

? ? 但是系統(tǒng)提示磁盤忙,這是因為我們現(xiàn)在還處于被卸載的磁盤目錄下,我們有兩種方式解決,
一是退出待卸載的目錄,# cd ? ? ?# umount /mnt

二是使用懶漢模式 # umount -l /mnt ? ?//其中l(wèi)表示lazy
? ? 上面是卸載一臺機器上的目錄,但是我們?nèi)绻泻芏嗯_機器,要一臺一臺地去卸載就會很麻煩,這個時候比較好的方法就是在服務端使用exportfs命令重新來加載一下配置文件,而不用重啟nfs服務
1、exportfs常用選項
? ? -a ?全部掛載或全部卸載
? ? -r 重新掛載
? ? -u 卸載某一個目錄
? ? -v 顯示共享目錄
? ? 一般情況下如果要重新加載配置文件,可以像下面這樣使用
? ? # exportfs -arv
2、修改下配置文件來測試驗證
? ? 為了測試驗證exportfs這個命令,我們在服務端配置文件/etc/exports中增加如下配置內(nèi)容:
? ? /tmp 192.168.75.130(rw,sync,no_root_squash)

? ? 再來執(zhí)行下面的命令?
? ? # exports -arv ??

? ? 然后到客戶端執(zhí)行下面的命令
? ? # showmount -e 192.168.75.136 ? ? ?//查看共享目錄權限

? ? 我們再來將新增的共享目錄掛載到客戶端
? ? # mount -t nfs 192.168.75.136:/tmp /mnt ? ? ? ? //掛載后使用df -h命令查看是否掛載成功

? ? 現(xiàn)在服務端的目錄/tmp就是客戶端的/mnt目錄# ls /mnt

? ? 我們來到客戶端,在共享目錄下創(chuàng)建一個文件并寫入一些內(nèi)容# vim /mnt/1212.txt

? ? # ls -l /mnt/1212.txt ? ? ? ? ? ? ?//客戶端查看這個新建文件的詳細信息

? ? # ls -l /tmp/1212.txt ? ? ? ? ? ?//服務端查看這個新建文件的詳細信息

? ? 對比上面2張圖片可以看到,1212.txt這個文件的屬主和屬組都是root,這是因為我們在配置文件/etc/exports中設置了不限制root用戶no_root_squash,通常情況下,我們不限制root的情況多
二 NFS客戶端問題

centos6遇到比較多的一個問題,NFS4的版本會有這個問題:客戶端掛載共享目錄后,不管是root用戶還是普通用戶,創(chuàng)建新文件時屬主、屬組為nobody,而不是我們在配置文件中規(guī)定的屬主、屬組
解決以上問題有兩種方案
方案一:在客戶端掛載的時候指定nfs的版本號為3,也就是說在掛載命令中加入 -o nfsvers=3,下面兩條命令適用于不同的場景
# mount -t nfs-o nfsvers=3192.168.75.136:/tmp/ /mnt/ //執(zhí)行這條命令的前提是nfs已經(jīng)停止
#?mount -t nfs-oremount nfsvers=3192.168.75.136:/tmp/ /mnt///執(zhí)行這條命令的話不需要nfs處于停止運行狀態(tài)

方案二:修改文件/etc/idmapd.conf,將'#Domain = local.domain.edu'改為‘Domain = xxx.com’的格式,其中xxx可以隨意定義,修改完成后要重啟rpcbind服務
修改前

修改后

# systemctl restart rpcbind ? ? //重啟rpcbind服務