1 概述
通過NFS搭建共享盤,友善共享資料
本次使用,伺服器ip的位址是192.168.32.11。需要共享的目錄是/sharedisk
2 伺服器端
2.1 安裝軟體
伺服器端安裝軟體包,有兩個包
yum -y install nfs-utils rpcbind
2.2. 開啟服務
service nfs start
service rpcbind start
注意: 後續要重新開機服務的話,重新開機順序建議是
service rpcbind restart
service nfs restart
如果 [root@localhost /]#showmount -e 192.168.32.11
出現報錯 clnt_create: RPC: Program not registered 這個報錯是由于重新開機順序導緻的
按照以下順序重新開機
/etc/init.d/rpcbind stop
/etc/init.d/nfs stop
/etc/init.d/rpcbind start
/etc/init.d/nfs start
測試 showmount -e 192.168.32.113
配置vim /etc/exports/etc/exports 伺服器端的配置這個檔案預設是空檔案,寫入以下的語句
/sharedisk 192.168.32.0/24(rw,no_root_squash,insecure,sync)
注意這裡的192.168.32.0/24指定是允許哪些機器來挂載,這裡如果沒有指定對應的ip,用戶端挂載的時候,會出現伺服器端拒絕的報錯
2.3 配置生效
exportfs -r
2.4 檢查
輸入指令
showmount -e
結果如下,看到允許挂載的機器清單
Export list for localhost.localdomain:
/sharedisk 172.16.0.0/16,192.168.32.0/24
2.5 共享檔案夾的權限設定
建議操作,把共享盤的權限設定為777.讓其他機器可以自由通路該盤。當然,這個要根據實際情況配置設定權限
chmod 777 /sharedisk
2.6 檢視所用到的端口
rpcinfo -p
添加允許端口到iptables或關閉iptables
如果這台伺服器不暴露在公網時或隻能通過内網IP通路時這樣做,否則不建議這樣做。根據實際情況而定
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
2.7 伺服器端設定開機啟動nfs盤
echo " /dev/sdb1/ /sharedisk ext4 defaults 0 0">>/etc/fstab
3 用戶端
3.1 安裝軟體
用戶端要安裝nfs-utils
yum install nfs-utils
如果沒有安裝,挂載的時候會出現如下的報錯
[root@localhost sharedisk]# mount -amount: wrong fs type, bad option, bad superblock on 192.168.32.11:/sharedisk, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.helper program)
In some cases useful info is found in syslog - try dmesg | tail or so.
3.2 檢查服務端共享情況
showmount -e 192.168.32.11
如果這裡沒有出現共享盤,要根據報錯進行排查
3.3 挂載共享盤
3.3.1 挂載測試
用戶端臨時挂載的語句如下
mount -t nfs 192.168.32.11:/sharedisk/sharepoint/ /sharedisk/sharepoint
注意,這裡如果挂載不上,出現伺服器端拒絕的報錯,可能是/etc/exports這個檔案沒有把要挂載的機器寫入
這裡并不建議用長期挂載的形式,因為nfs服務長期挂載,當伺服器關機或者停止nfs程序的時候,會導緻用戶端沒有正常解除安裝,這樣一來,用戶端關機關不了,隻能通過斷電才能關機。
一下是寫入/etc/fstab檔案的語句,開機挂載,但是建議不要這麼做,了解一下就好。
echo " 192.168.32.11:/sharedisk /sharedisk nfs defaults 0 0">>/etc/fstab
3.3.2 autofs挂載
這裡建議的解決辦法是通過autofs進行挂載。
用戶端安裝軟體autofs
yum install autofs
配置autofs
vim /etc/auto.master
/nfsfile /etc/auto.nfs
找一個目錄,指定給autofs用
vim /etc/auto.nfs
share -rw,bg,soft,rsize=32768,wsize=32768 192.168.32.61:/sharedisk
注意,auto.nfs這個檔案寫入的share這個是要挂載的目錄,不能存在,完整目錄是/nfsfile/share,進入 該目錄/nfsfile就會自動生成,不要自己建立。後面是指定挂載的屬性,最後是指定挂載的服務的盤。
autofs會自動檢測挂載點是否有使用,間隔5分鐘沒有使用,就會自動解除安裝/nfsfile/share這個盤。
這裡需要特别注意,如果autofs還沒解除安裝,而且用戶端正常通路/nfsfile/share這個挂載點,此時,伺服器端停止nfs服務,或者伺服器斷網,或者是伺服器挂機,其實/nfsfile/share相當于是一個不存在的目錄,如果在/nfsfile下通路share,或者直接在share下通路,是有問題的,終端将會被卡在,解決辦法是換個終端,等了20分鐘後,該終端有可以使用,但是不建議這個時候在挂載點操作,最好是先進入到其他目錄下工作,nfs伺服器恢複正常後,再重新進入/nfsfile/share通路資源。
但是如果nfs伺服器還沒恢複正常,還有終端在通路/nfsfile/share,即被卡在了/nfsfile/share路徑下,此時如果關機,centOS7的nfs将不能正常關機,需要斷電才能關機。
啟動服務
啟動服務後,cd /nfsfile/share就可以通路到nfs共享盤的資源了
service autofs restart
4 自動化腳本
4.1 NFS 腳本
#!/bin/bash
#
#******************************************************************************
#Author: Sunny
#Date: 2017-09-07
#FileName: install_nfs.sh
#version: 1.0
#Your change info:
#Description: For auto install nfs
#Copyright(C): 2017 All rihts reserved
#*****************************************************************************
read -p "Please input your choice,server or client: " choice
read -p "if it is server,input full path dir as serverfile (eg:/sharedisk2): " serverfile
read -p "if it is server,input path you want to mount serverfile(eg:/dev/sdb1: ): " mpoint
case $choice in
server)
[ -e $serverfile ] && echo $serverfile is exist || mkdir $serverfile
rpm -q nfs-utils &>/dev/null || yum -y install nfs-utils &>/dev/null;
rpm -q rpcbind &>/dev/null || yum -y install rpcbind &>/dev/null;
{ service rpcbind restart;rpcinfo -p |grep portmapper; }&>/dev/null || echo rpcbind does not start
{ service nfs restart;rpcinfo -p |grep nfs; }&>/dev/null || echo nfs does not start
echo "$serverfile 192.168.32.0/24(rw,no_root_squash,sync)">>/etc/exports
echo "$serverfile 172.18.0.0/16(rw,no_root_squash,sync)">>/etc/exports
exportfs -r
if $(grep "$serverfile" /etc/fstab&>/dev/null) ;then
echo "$serverfile already in /etc/fstab,please if you really want to mount $serverfile on $mpoint"
elif $(grep "$mpoint" /etc/fstab&>/dev/null) ;then
echo "$mpoint already in /etc/fstab,please if you really want to mount $serverfile on $mpoint"
else
echo " $mpoint $serverfile ext4 defaults 0 0">>/etc/fstab
mount -a
fi
showmount -e &>/dev/null && echo "nfs server start ok,you can check in client"|| echo "nfs start fail,please check"
;;
client)
rpm -q nfs-utils &>/dev/null || yum -y install nfs-utils &>/dev/null;
showmount -e 192.168.32.61
;;
esac
unset choice
unset serverfile
unset mpoint
exit
4.2 autofs腳本
#!/bin/bash
#
#***********************************************************************
#Author: Sunny
#Date: 2017-09-08
#FileName: install_autofs.sh
#version: 1.0
#Your change info:
#Description: For install autofs by auto
#Copyright(C): 2017 All rihts reserved
#***********************************************************************
read -p "Please input a full path dir you want to auto mount(default:/nfsfile): " autodir
read -p "Please creat a file in /etc you want to assign for autofs(default:auto.nfs): " autofile
read -p "Please input remote source file ip and file (default:192.168.32.61:/sharedisk): " remotesrc
rpm -q nfs-utils &>/dev/null || yum -y install nfs-utils &>/dev/null
if [ -z ${autodir:-} ];then
autodir=/nfsfile
fi
if [ -z ${autofile:-} ];then
autofile=auto.nfs
fi
if [ -z ${remotesrc:-} ];then
remotesrc=192.168.32.61:/sharedisk
fi
[ -e "$autodir" ]&>/dev/null && echo "$autodir already exist"|| mkdir "$autodir"
rpm -q autofs &>/dev/null || yum -y install autofs&>/dev/null;
#to assign a dir(in the eg is share ) which you want to access to the source dir
#attention,share is a dir,but is should not exist,the dir will exist when you access to it
if [ -e /etc/$autofile ];then
echo "$autofile is exist,please check"
exit 6;
else
cat >>/etc/$autofile<<eof
share -rw,bg,soft,rsize=32768,wsize=32768 $remotesrc
eof
sed -r -i.bak "/^\/misc/ a $autodir \/etc\/$autofile" /etc/auto.master
fi
service autofs restart &>/dev/null || echo "something unexpect happened,please check autofs service"
[ -e /root/bakfile ] || mkdir /root/bakfile
mv /etc/*.bak /root/bakfile
unset autodir
unset autofile
unset remotesrc
exit
5 注意事項
1 需要注意的是,如果通過寫入配置檔案的方式挂載,由于 NFS 使用的這個 RPC 服務,當用戶端連上伺服器時,那麼你的伺服器想要關機, 那可就會成為『不可能的任務』!如果你的伺服器上面還有用戶端在聯機,那麼你要關機, 可能得要等到數個鐘頭才能夠正常的關機成功!
建議你的 NFS Server 想要關機之前,能先『關掉 rpcbind 與 nfs 』這兩個東西!如果無法正确的将這兩個 daemons 關掉,那麼先以 netstat -utlp 找出 PID ,然後以 kill将它關掉先!這樣才有辦法正常的關機成功。
也可以利用 showmount -a localhost 來查出來那個用戶端還在聯機,或者是查閱 /var/lib/nfs/rmtab 或 xtab 等檔案來檢查亦可。找到這些用戶端後,先關掉這些用戶端的連接配接,即停掉用戶端的nfs服務,确認沒問題後在依次關機
這個注意事項是摘自鳥哥私房菜的13章 nfs的介紹,但是這裡并沒有測試到和介紹一樣的情況,以上都查詢不到資訊。