搭建nfs伺服器客戶端
① NFS服務搭建及數據無縫遷移
五一節辦公室要停電,機房雖有UPS,但也支撐不了8小時。
因生產環境有業務系統掛了辦公室機房的NAS存儲,故需要進行遷移,步驟記錄如下:
先閑談下技術-----------------------
NFS和samba的區別
samba是混合型網路中的共享服務,windows伺服器可建samba服務,linux伺服器也可建samba服務
nfs只面向unix、linux間的共享,linux伺服器可建nfs服務(winodws系統也可以掛載nfs,就是有點不穩定)
NFS伺服器上的操作--------------------------
nfs伺服器操作系統版本:
[[email protected] ~]# more /etc/system-release
CentOS Linux release 7.9.2009 (Core)
nfs伺服器安裝nfs服務
[[email protected] ~]# yum -y install nfs-utils rpcbind
創建nfs目錄,並授權
[[email protected] ~]# mkdir /opt/nfs-test
[[email protected] ~]# chmod 777 /opt/nfs-test
編輯nfs服務配置文件
[[email protected] ~]# vi /etc/exports
內容如下:
/opt/nfs-test *(rw,root_squash,all_squash,sync)
重新載入nfs配置:
[[email protected] ~]# exportfs -r
nfs服務設置開機啟動
[[email protected] ~]# systemctl enable rpcbind
[[email protected] ~]# systemctl enable nfs
[[email protected] ~]# systemctl enable nfs-lock
[[email protected] ~]# systemctl enable nfs-idmap
啟動nfs服務
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# systemctl start nfs-lock
[[email protected] ~]# systemctl start nfs-idmap
查看nfs服務啟動後,所監聽的埠信息:
[[email protected] ~]# rpcinfo -p
linux伺服器伺服器上操作-------------------------------
業務伺服器安裝nfs軟體客戶端
[[email protected] ~]# yum -y install nfs-utils
建立一個掛載目錄
[[email protected] ~]# mkdir /opt/test-m
掛載nfs伺服器共享出來的目錄
[[email protected] ~]# mount -t nfs 10.x.x.10:/opt/nfs-test /opt/test-m/
查看下已掛載的nfs
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.5G 0 1.5G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 8.8M 1.5G 1% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/mapper/centos-root 97G 2.3G 95G 3% /
/dev/sda1 1014M 171M 844M 17% /boot
tmpfs 297M 0 297M 0% /run/user/0
10.x.x.6:/opt/nfs-test 97G 4.1G 93G 5% /opt/test-m
經測試,數據可讀可寫,證明nas服務沒有問題,於是進行數據同步,數據同步用rsync命令。
rsync -avp [email protected]::nas_6 /mnt/guidang/ --password-file=/root/rsync_pass --bwlimit=100000
數據同步完,通知研發進行掛載切換。研發同事在測試時,發現文件屬性中的uid及gid與原來的不一致,有些擔心,於是又小完善了一下NFS服務。
編輯nfs服務配置文件
[[email protected] ~]# vi /etc/exports
內容如下:
/opt/nfs-test *(no_all_squash,anonuid=600,anongid=600)
重新載入nfs配置:
[[email protected] ~]# exportfs -r
② 搭建NFS伺服器
NFS 是Network File System的縮寫,即網路文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公布。功能是通過網路讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網路訪問位於伺服器磁碟中的數據,是在類Unix系統間實現磁碟文件共享的一種方法。
NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procere Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的。
NFS應用場景,常用於高可用文件共享,多台伺服器共享同樣的數據,可擴展性比較差,本身高可用方案不完善,取而代之的數據量比較大的可以採用MFS、TFS、HDFS等等分布式文件系統。
1. 環境准備兩台Centos7.6虛擬機:
服務端:192.168.199.180
客戶端:192.168.199.190
2.創建用戶,指定用戶訪問共享文件夾:
useradd test #創建test用戶
passwd test #設置test密碼為123456
6.編輯nfs主配置文件/etc/exports;並添加以下內容:
/www 192.168.199.190(rw,sync,root_squash,no_all_squash,anonuid=1002,anongid=1002)
參數詳解:
NFS安裝完畢,需要創建共享目錄,共享目錄在/etc/exports文件裡面配置,可配置參數如下:
/www 192.168.199.190(rw,sync,root_squash,no_all_squash,anonuid=1002,anongid=1002)
第一列/www 表示需要共享的目錄
IP表示允許哪個客戶端訪問
IP後括弧里的設置表示對該共享文件的許可權
ro 只讀訪問
rw 讀寫訪問
sync 所有數據在請求時寫入共享
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的許可權(默認)
no_root_squas root用戶具有根目錄的完全管理訪問許可權
anonuid 指定用戶UID
anongid 指定用戶組ID
7.啟動nfs服務:systemctl start nfs
8.查看nfs及rpc埠是否啟動成功:
9. rpcinfo -p 192.168.199.180 查看,如圖所示:
RPC命令詳解: rpcinfo 命令會向 RPC 伺服器發出 RPC 調用,並將得到的結果顯示出來。rpcinfo 會列出所有在主機 host 上向 rpcbind 注冊的 RPC 服務。
10. 使用showmount -e localhost 命令用於查詢NFS伺服器的相關信息,顯示NFS伺服器的輸出清單。
11. 創建共享文件夾目錄www ;並在www目錄下新建jfe.txt並加入內容,授予www用戶用戶組的nfsnobody.nfsnobody許可權
mkdir -p /www #創建www共享目錄
touch /www/jfe.txt #在www目錄下創建jfe.txt文件
chown -R test:test /www #授權用戶用戶組test給www目錄
二、安裝客戶端:(192.168.199.190)
1. yum install nfs-utils -y
客戶端上不需要啟動nfs服務,只是為了使用showmount工具
2. 查看RPC埠是否啟動:netstat -ntpl
3.使用showmount -e 192.168.199.180命令顯示NFS伺服器輸出結果:
4.遠程掛載www共享目錄到客戶端的/mnt目錄下:mount -t nfs 192.168.199.180:/www /mnt
5. 進入到/mnt掛載盤符目錄下cd /mnt ;確認是否有jfe.txt文件存在及查看文件許可權屬於誰:
確認文件已存在,用戶用戶組均為test用戶所屬,其他用戶不能操作此目錄下的文件及文件夾;包括root用戶都不能操作刪除及修改文件,例如root用戶都不能刪除jfe.txt文件:
6.如果也只需要客戶端的test用戶去對www共享文件夾有增刪改查許可權的話,需要以下步驟:
a. 在客戶端創建相同的test用戶,並保證UID一致的情況下才能對共享目錄有許可權進行操作
b. 設置tets用戶密碼為123456
c. 查看test用戶UID參數值是多少 cat /etc/passwd
d. 那麼問題來了,服務端的test用戶UID為1002,客戶端test用戶UID為1004,共享目錄在客戶端的許可權也為1002,那麼1004是沒有許可權去訪問共享目錄的,可參考下目前狀態的錯誤圖;首先切換到test用戶,然後進入到/mnt目錄下進行jfe.txt文件刪除看是否報錯:
e. 經過測試同樣的tets用戶,但是客戶端的用戶UID跟服務端不一致,所以是沒有許可權刪除文件的,首先退出tets用戶,切換root用戶後,需要修改客戶端test用戶UID跟服務端一致即可解決問題,命令:usermod -u 1002 tets
7.修改完客戶端test用戶UID為1002後,切換到test用戶,查看是否有jfe.txt文件存在;然後追加新內容123456到jfe.txt中;最後新建123.txt文件成功,代表NFS共享目錄指定用戶讀取(增刪改查)成功。
8. 在NFS服務端把NFS跟RPC服務加入開機自啟動:
systemctl enable nfs-server
systemctl enable rpcbind
9. 在客戶端將NFS遠程共享目錄掛載命令加入fstab配置,不然伺服器重啟掛載點將消失,加入以下配置到/etc/fstab配置文件
192.168.199.180:/www /mnt nfs defaults 0 0
③ linux配置nfs步驟
NFS的配置過程很簡單。在伺服器端中編輯 /etc/exports 文件,添加如下內容: /home/nfs-share 192.168.1.122 (rw,sync)
第一項是要共享的目錄,後者為共享的配置參數一般為: (rw,sync,no_root_squash,no_all_squash,no_subtree_check)
然後開啟NFS和portmap服務:
/etc/init.d/nfs start //用service nfs start也可以 /etc/init.d/portmap start //用service portmap stasrt也可以
在centos6.5中portmap已經改為rpcbind 在客戶端,用mount –t nfs 192.168.123:/home/nfs-share /home/remote_file掛載伺服器端的共享目錄到本地的/home/remote-file掛載點,然後我們就可以在客戶端上應用到遠程主機上的/home/nfs-share目錄了。想要系統在開機時自動掛載,修改/etc/fstab文件,把NFS伺服器的共享目錄添加進去就可以了,這個不用多說。
如何知道遠程主機上的共享目錄情況呢?使用showmount命令,這個命令需要root許可權。它有三個選項(記住這三個選項代表的含義: showmount –a IP 顯示指定NFS伺服器的客戶端以及伺服器端在客戶端的掛載點 showmount –d IP 顯示指定NFS伺服器在客戶端的掛載點 showmount –e IP 顯示指定NFS伺服器上的共享目錄列表(或者叫輸出列表) 我們輸入命令showmount –a 192.168.1.123:
圖片客戶端中出現的mount clntudp_create: RPC: Program not registered錯誤是怎麼回事?噢,我剛才重啟了一下伺服器端,重啟後NFS服務沒有開啟。 我們開啟伺服器端的NFS服務,再從客戶端上查看一下NFS伺服器的情況:
Showmount –a顯示出NFS伺服器192.168.1.123的共享目錄被客戶端192.168.122掛載到/home中;
在showmount -e IP,出現clnt_create: RPC: Port mapper failure - Timed out報錯
解決方案:
被訪問的NFS伺服器上的防火牆沒有添加規則,向iptables裡面添加以下查看的所有埠即可(目前解決的方法,當然你也可以關閉防火牆,不過這樣是比較不安全的,如果你的nfs作用不大,建議你另選別的應用來替代吧!畢竟開那麼多的埠,比較不安全呀!)
通過#rpcinfo -p 10.10.209.148
[[email protected] /]# rpcinfo -p 10.10.209.148program vers proto port service100000 4 tcp 111 portmapper100000 3 tcp 111 portmapper100000 2 tcp 111 portmapper100000 4 udp 111 portmapper100000 3 udp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 52943 status100024 1 tcp 37706 status100011 1 udp 875 rquotad100011 2 udp 875 rquotad100011 1 tcp 875 rquotad100011 2 tcp 875 rquotad100003 2 tcp 2049 nfs100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 2 tcp 2049 nfs_acl100227 3 tcp 2049 nfs_acl100003 2 udp 2049 nfs100003 3 udp 2049 nfs100003 4 udp 2049 nfs100227 2 udp 2049 nfs_acl100227 3 udp 2049 nfs_acl100021 1 udp 37438 nlockmgr100021 3 udp 37438 nlockmgr100021 4 udp 37438 nlockmgr100021 1 tcp 46331 nlockmgr100021 3 tcp 46331 nlockmgr100021 4 tcp 46331 nlockmgr100005 1 udp 57177 mountd100005 1 tcp 43147 mountd100005 2 udp 49154 mountd100005 2 tcp 54810 mountd100005 3 udp 55707 mountd100005 3 tcp 58309 mountd
[[email protected] /]#
剛才在重啟NFS服務的時候,細心的話可以注意到,我們在輸入命令/etc/init.d/nfs start開啟nfs服務時,系統還自作主張地開啟了NFS quotas等其它3個服務。
怎麼回事?我們只輸入了一條啟動NFS服務的命令,它怎麼額外的啟動了3個服務?後面的啟動portmap服務又是怎麼回事? 我們首先要了解一點:NFS文件系統要提供服務單靠本身的NFS服務是不夠的,還需要調用其它服務,這個其它服務就是RPC(remote procere call,遠程過程調用)服務和portmap服務。由於NFS服務本身不提供文件傳輸功能,我們要遠程使用NFS文件系統就需要RPC服務的支持;而portmap服務用來為RPC服務進行動態埠分配和映射,所以portmap服務也是NFS服務所必須的。
我們查看一下服務的啟動情況:
所遇錯誤:
/etc/init.d/nfs-kernel-server: 沒有那個文件或目錄
解決方案:
沒有配置、安裝NFS
Linux 下配置NFS服務
1、安裝
2、配置
3、客戶端
所遇問題:centos6.5
portmap: 未被識別的服務
解決方案:
由於在6系列裡面,portmap已經改名了 ,6系列需要使用 service rpcbind start啟動[[email protected] ~]# service portmap start
portmap: 未被識別的服務
[[email protected] ~]# service rpcbind status
rpcbind (pid 1312) is running...
[[email protected] ~]#
好文共賞:
linux nfs文件共享
◆一、概念
NFS是網路文件系統(Network File System)的簡稱,是分布式計算機系統的一個組成部分,可實現在異構網路上共享和裝配遠程文件系統。
NFS由SUN公司開發,目前已成為文件服務的一種標准(RFC1904,RFC1813)。其最大的功能就是可以通過網路,讓不同 操作系統 的計算機可以共享數據,所以也可以看作是一個文件伺服器。NFS是除了SAMBA之外Windows與Linux及Unix與Linux之間通信的方法。
理想條件下的NFS 網路拓撲結構
1、設置Linux系統之間的文件共享(Linux與Windows中間文件共享採用SAMBA服務);
2、NFS只是一種文件系統,本身沒有傳輸功能,是基於RPC協議實現的,才能達到兩個Linux系統之間的文件目錄共享;
3、NFS為C/S 架構 ;
◆二、伺服器配置
1、配置文件
主要配置文件為:/etc/exports
格式為: 共享目錄 可mount主機IP(參數1,參數2,……)
如:/var/nfs 172.20. . (rw,sync,no_rootl_squash)
說明:必須注意nfs/目錄的訪問許可權,必須設置成777許可權;父目錄/var許可權無要求,普通的755即可;
2、啟動相關服務
然後依次啟動相關服務:portmap,nfslock,nfs
service portmap start
service nfslock start
service nfs start
關閉順序相反。
3、檢查共享目錄
隨後可以採用showmount –e查看一下,看看共享的目錄情況:
[[email protected] var]# showmount -e
Export list for ns.osserver:
/var/nfs 172.20. .
OK,到此為止,NFS伺服器搭建完畢;
◆三、客戶端配置
1、確保portmap運行
客戶端必須確保RPC協議相應的portmap正常運行,否則mount將失敗;
2、掛載/var/nfs目錄(本地掛載點為/mnt/nfs)
mount -t nfs 172.20.65.16:/var/nfs /mnt/nfs
成功mount以後,即可同本地目錄一樣隨意操作;
◆四、其它相關命令
1、當修改了/etc/exports文件後,可以不用重新啟動nfs服務,直接採用exports –rv 即可重新導出共享目錄;
該命令格式如下:
exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的內容
-r :重新mount /etc/exports中分享出來的目錄
-u :umount 目錄
-v :在 export 的時候,將詳細的信息輸出到屏幕上。
具體例子:
[[email protected] var]# showmount -e
Export list for ns.osserver:
/var/nfs 172.20. .
[[email protected] var]# exportfs –au #全部卸載
[[email protected] var]# showmount -e
Export list for ns.osserver:
[[email protected] var]# exportfs –rv #全部重新 export 一次
exporting 172.20. . :/var/nfs
[[email protected] var]#
2、showmout命令對於NFS的操作和查錯有很大的幫助,所以我們先來看一下showmount的用法
showmout
-a :這個參數是一般在NFS SERVER上使用,是用來顯示已經mount上本機nfs目錄的cline機器。
-e :顯示指定的NFS SERVER上export出來的目錄。
例如:
[[email protected] ~]# showmount -e 172.20.16.139
Export list for 172.20.16.139 :/root/share 172.20.16.137
[[email protected] var]# showmount -a
All mount points on localhost.localdomain: :/root/share,172.20. . :/root/share,172.20.16. :/root/share,172.20.16.139:/nfsshare,172.20.16.139:/root/share172.20.16.137: 172.20.16.137:,172.20. . 172.20.16.137:,172.20.16. 172.20.16.137:/root/share172.20.16.139: 172.20.16.139:,172.20. . 172.20.16.139:,172.20.16. 172.20.16.139:,172.20.16.139172.20.16.139:DEFAULT
◆五、常見問題解答
1、提示:mount to NFS server 餄.20.67.203' failed: server is down.
解決方案:可能是NFS伺服器的防火牆有問題;
2、提示:mount: RPC: Timed out
解決方案:由於RPC協議沒運行;啟動portmap服務;
也有可能是防火牆問題;Server/Client均有可能。
④ NFS伺服器的安裝與配置
由於實驗室的項目需要實現在CephFS之上建立NFS之上,所以記錄一下NFS伺服器的安裝與配置流程。
NFS 伺服器可以讓客戶端將網路遠程的 NFS 伺服器分享的目錄,直接掛載到本地端的機器當中。本地端的機器通過直接讀寫掛載的目錄,就可以同步到NFS伺服器之上。
系統平台:Ubuntu 14.04
NFS Server IP:192.168.1.2
iptables關閉: Firewall is disable.(NFS埠使用在默認情況下是不固定,所以若配置NFS伺服器需要搭配防火牆使用的話,請配置固定埠)
SELINUX=disabled
NFS的安裝只需要安裝rpcbind與nfs-server就可以對外提供服務了。
NFS伺服器的主要配置文件就是:/etc/exports。不過這個配置文件不一定會存在,可能需要使用 vim 主動新建這個文件。
/etc/exports文件由以下選項構成:
每一行最前面是要分享出來的目錄,目錄可以依照不同的許可權分享給不同的主機。若許可權參數不止一個時,則以逗號 (,) 分開。且主機名與小括弧是連在一起的喔!其中參數是可選的,當不指定參數時,nfs將使用默認選項。默認的共享選項是 sync,ro,root_squash,no_delay 當主機名或IP地址為空時,則代表共享給任意客戶機提供服務。
下面是一些NFS共享的常用參數:
這里我們使用了NFS v3的配置,如下圖所示:
配置完/etc/exports之後,接下來就可以啟動NFS伺服器了。
為了使NFS伺服器能正常工作,需要啟動rpcbind和nfs-kernel-server兩個服務,並且rpcbind一定要先於nfs-kernel-server啟動。
若要開機自啟動nfs服務,可以通過sysv-rc-conf配置自啟動服務。
客戶端的掛載很簡單,先建立一個掛載目錄
之後客戶端對應的文件目錄便掛載上對應的文件系統了。
客戶端可以通過命令配置開機自啟動掛載NFS的文件系統。
將對應的命令 mount -t nfs 192.168.12:/tmp /mnt/nfs
添加至/etc/rc.d/local,不要嘗試在直接在/etc/fstab/里掛載
小結 :梳理了一下在ubuntu之下NFS伺服器的安裝與配置。當然RedHat系列的發行版也是大同小異。若有疏漏,望指點斧正。
⑤ NFS 深入配置
1.1 NFS配置參數許可權
參數名稱
參數用途
rw
read-write,表示可讀寫許可權
ro
read-only,表示只讀許可權
sync
請求或寫入數據時,數據同步寫入到硬碟才完成
async
非同步寫到遠程緩沖區
all_squash
不管客戶端什麼用戶,到服務端都會被壓縮成匿名用戶
anonuid
匿名用戶的UID
anongid
匿名用戶的GID
在配置文件內設置共享目錄時所給予的許可權:
[[email protected] ~]$ cat /etc/exports
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)
配置好NFS服務後,/var/lib/nfs/etab文件中可以看到的配置參數以及默認自帶的參數:
[[email protected] ~]$ cat /var/lib/nfs/etab
/data
172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,
no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,
anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash
1.1.1 更改NFS默認用戶
1.1.1.1 nfs01服務端NFS、以及所有客戶端:
[[email protected] ~] id www
uid=1111(www) gid=1111(www) 組=1111(www)
1.1.1.2 服務端NFS特殊配置
配置文件增加如下內容:
[[email protected] ~]$ tail -2 /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)
共享目錄更改用戶和用戶組:
[[email protected] ~] ls -ld /data
drwxr-xr-x 2 www www 70 4月 18 10:05 /data
1.1.1.3 服務端NFS重啟
[[email protected] ~]$ systemctl reload nfs
1.1.1.4 每個客戶端掛載
[[email protected] ~] df -h
文件系統 容量 已用 可用 已用% 掛載點
172.16.1.31:/data 19G 1.8G 18G 10% /data
新創建文件驗證用戶名:
[[email protected] /data]# touch new_web01.txt
[[email protected] /data]# ls -l
總用量 0
-rw-r--r-- 1 www www 0 4月 18 11:01 new_web01.txt
-rw-r--r-- 1 www www 0 4月 17 11:59 oldboy.txt
-rw-r--r-- 1 www www 0 4月 17 12:30 oldgirl.txt
1.2 NFS服務重點知識梳理
當多個NFS客戶端訪問伺服器端讀寫文件時,需要具有以下幾個許可權:
NFS伺服器/etc/exports設置需要開放許可寫入的許可權,即伺服器端的共享許可權
NFS伺服器實際要共享的NFS目錄許可權具有可寫入w的許可權,即伺服器端本地目錄的安全許可權
每台機器都對應存在和NFS默認配置UID的相同UID的用戶
下表列出了常用的重點NFS服務文件或命令。
NFS常用路徑
說明
/etc/exports
NFS服務主配置文件,配置NFS具體共享服務的地點,默認內容為空
/var/lib/nfs/etab
NFS配置文件的完整參數設定的文件
/proc/mounts
客戶端的掛載參數
1.3 NFS客戶端掛載深入
1.3.1 mount -o 參數選項及系統默認設置
參數
參數意義
系統默認值
suid/nosuid
當掛載的文件系統上有任何SUID的程序時,只要使用nosuid就能夠取消設置SUID的功能
suid
rw/ro
可以指定文件系統是只讀(ro)或可讀寫(rw)
rw
dev/nodev
是否可以保留裝置文件的特殊功能
dev
exec/noexec
是否具有執行文件的許可權
exec
user/nouser
是否允許用戶擁有文件的掛載與卸載功能
nouser
auto/noauto
auto指的是「mount -a」時會不會被掛載的項目,如果不需要這個分區隨時被掛載,可以設置為noauto
auto
1.3.2 mount -o 參數詳細說明
參數選項
說明
async
涉及文件系統I/O的操作都是非同步處理,即不會同步寫到磁碟,能提高性能,但會降低數據安全。
sync
有I/O操作時,都會同步處理I/O,會降低性能,但數據比較安全。
atime
在每一次數據訪問時,會更新訪問文件的時間戳,是默認選項,在高並發的情況下,可以通過添加noatime來取消默認項。
ro
以只讀的方式掛載一個文件系統
rw
以可讀寫的方式掛載一個文件系統
auto
能夠被自動掛載通過-a選項
noauto
不會自動掛載文件系統
defaults
這是fstab里的默認值,包括rw、suid、dev、exec、auto、nouser、async
exec
允許文件系統執行二進制文件,取消這個參數,可以提升系統安全性。
noexec
在掛載的文件系統中不允許執行任何二進製程序,進僅對二進製程序有效。
noatime
訪問文件時不更新文件的時間戳,高並發情況下,一般使用該參數
nodiratime
不更新文件系統上的directory inode時間戳,高並發環境,推薦顯式應用該選項,可以提高系統I/O性能。
nosuid
不允許set-user-identifier or set-group-identifier位生效。
suid
允許set-user-identifier or set-group-identifier位生效。
nouser
禁止一個普通用戶掛載該文件系統,這是默認掛載時的默認選項。
remount
嘗試重新掛載一個已經掛載了的文件系統,這通常被用來改變一個文件系統的掛載標志,從而使得一個只讀文件系統變的可寫,這個動作不會改變設備或者掛載點。當系統故障時進人single或rescue模式修復系統時,會發現根文件系統經常會變成只讀文件系統,不允許修改,此時該命令就派上用場了。具體命令為:mount -o remount,rw /,表示將根文件系統重新掛載使得可寫。single或rescue模式修復系統時這個命令十分重要。
dirsync
目錄更新時同步寫人磁碟。
1.3.3 企業生產場景NFS共享存儲優化
硬體:使用ssd/sas磁碟,可以買多塊,製作成raid10。
NFS伺服器端配置:
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
NFS客戶端掛載優化配置命令:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,
wsize=131072 172.16.1.31:/data /mnt <===兼顧安全性能
對NFS服務的所有伺服器內核進行優化,執行命令如下:
cat >>/etc/sysctl.conf <<EOF
net.core.wmen_default = 8388608
net.core.rmen_default = 8388608
net.core.wmen_max = 16777216
net.core.rmen_max = 16777216
EOF
執行sysctl -p 生效
大型網站NFS網路文件系統的替代軟體為分布式文件系統,如:Moosefs(mfs)、GlusterFS、FastDFS。
1.4 NFS系統應用的優缺點
1.4.1 優點
簡單,容易上手,容易掌握。
NFS文件系統內數據是在文件系統之上的,即數據是能看得見的。
部署快速維護簡單方便,且可控,滿足需求就是最好的。
可靠,從軟體層面上看,數據可靠性高,經久耐用。
服務非常穩定。
1.4.2 缺點(局限)
存在單點故障,如果NFS服務端宕機了,所有客戶端都不能訪問共享目錄。
在大數據高並發的場合,NFS效率、性能有限。
客戶端認證是基於IP和主機名的,許可權要根據ID識別,安全性一般。
NFS數據是明文的,NFS本身不對數據完整性進行驗證。
多台客戶機掛載一個NFS伺服器時,連接管理維護麻煩。
1.4.3 解決性能問題的方法
使用CDN加速以及自己搭建文件緩存服務(squid、nginx、varnish)。
把多個目錄分配到不同的NFS伺服器上。
棄用NFS(即讀寫分離)。
使用分布式文件系統。
⑥ Ubuntu 16.04 搭建 NFS 文件共享伺服器
伺服器端需要安裝 nfs-kernel-server 軟體包:
$ sudo apt-get update
$ sudo apt-get install nfs-kernel-server
默認情況下,NFS 伺服器上定義了某個共享目錄,則該目錄及其子目錄下的所有文件都可被訪問。
出於對安全的考慮,客戶端任何需要 超級用戶 (即 root 用戶,UID=0 & GID=0)許可權的文件操作都默認映射到 UID=65534 和 GID=65534 的用戶,即 Ubuntu 系統中的 nobody:nogroup。
例如客戶端使用 root 許可權在掛載的共享目錄中創建文件時,該文件的 屬主 和 屬組 自動變為 nobody:nogroup ,而非 root:root 。
sudo mkdir -p /var/nfs/gernel
sudo mkdir -p /var/nfs/public
sudo chown nobody:nogroup /var/nfs/gernel
為了使 NFS 伺服器定義的共享文件可被指定的客戶端主機訪問,需要在伺服器端的 /etc/exports 文件中添加對應的記錄。
該文件的格式如下:
Directory Host(Options ...) Host(Options) #comment
關於 /etc/exports 文件的詳細語法格式可參考 man exports 。
文件示例:
列出 nfs 伺服器上的共享目錄
創建掛載點
sudo mkdir -p /mnt/nfs/gernel
sudo mkdir -p /mnt/nfs/public
sudo mkdir -p /mnt/nfs/starky
掛載遠程目錄
sudo mount 192.168.56.102:/var/nfs/gernel /mnt/nfs/gernel
sudo mount 192.168.56.102:/var/nfs/public /mnt/nfs/public
sudo mount 192.168.56.102:/home/starky /mnt/nfs/starky
許可權測試
NFS 的許可權設定基於 Linux 文件系統的許可權管理,即客戶端掛載遠程共享目錄後,會把它們當成本地磁碟目錄一樣對待,也是根據文件的屬主(組)及其對應的許可權設定來限制訪問。
gernel 目錄的屬主(組)為 nobody:nogroup(65534:65534),所以雖然該目錄為讀寫許可權,非 root 用戶無法執行新建操作。而 root 用戶由於 NFS 默認的安全機制,會自動映射到 nobody:nogroup。
由於我在客戶端和服務端都有一個名為 starky 的用戶,且它們的 UID:GID 都為1000:1000,所以服務端的 /home/starky 目錄可以直接被客戶端的 starky 用戶訪問。且由於 no_root_squash 選項,通過 sudo 命令創建的文件其屬主仍為 root(而不會再映射為 nobody)。
當然這會導致一些安全問題,比如多個客戶端同時都有 UID(GID)為1000的用戶(不管用戶名是什麼),則這些用戶會共享服務端 /home/starky 目錄里的文件許可權。
可編輯 /etc/fstab 文件令掛載共享目錄的 mount 操作成為系統的固定配置(手動輸入的 mount 命令屬於臨時掛載,重啟會自動卸載),使得系統重啟後可以自動掛載遠程文件系統。 /etc/fstab 文件的示例內容如下:
/etc/exports 文件的格式為: Directory Host(Options ...) Host(Options) #comment
其中的 Host 項用來指定可訪問對應共享目錄的主機,其格式可分為以下幾種:
傳輸協議
最初的 NFSv2 由於性能原因使用 UDP 協議,雖然 NFS 添加了自己的 包序列重組 和 錯誤檢查 功能,但 UDP 和 NFS 都不具備 阻塞控制 演算法,所以在大型的互聯網路環境中缺乏足夠的性能。
NFSv3 提供了 UDP 和 TCP 協議之間的選擇。NFSv4 只能使用 TCP 協議。
隨著 CPU,內存等硬體設備和網路傳輸速度的提高,最初由於性能需求而傾向 UDP 協議的選擇也變得不再必要。
State
NFSv2 和 NFSv3 是 無狀態 的連接,服務端不會跟蹤客戶端對共享目錄的掛載情況,而是使用 "cookie" 來記錄一次成功的掛載。"cookie" 不會因為伺服器重啟而刪除,可以用來在伺服器掛掉之後保留客戶端的連接信息。
NFSv4 是 有狀態 的連接,客戶端和服務端都會維護文件操作紀錄及文件鎖的狀態。所以不再需要 "cookie" 的使用。
文件鎖
早期版本的 NFS 協議(v2 & v3)由於是 無狀態 的連接,它們並不清楚哪些主機正在使用哪些文件。但是文件鎖的實現又需要獲取狀態信息。所以早期協議中的文件鎖是獨立於 NFS 實現的。
而 NFSv4 將文件鎖的實現整合到了核心協議中,雖然此舉增加了復雜度,但同時也解決了早期版本中的很多問題。
但是為了兼容使用 V2 和 V3 協議的客戶端,獨立的 locked 和 statd 守護進程仍舊需要。
安全相關
NFS 協議最初在設計時並不關注安全性,NFSv4 通過引入對更強大的安全服務和身份驗證的支持,加強了該協議的安全性。
傳統的 NFS 協議大多使用 AUTH_SYS 驗證方式,基於 UNIX 的用戶和組標識。在這種方式下,客戶端只需要發送自己的 UID 和 GID 並與伺服器上的 /etc/passwd 文件內容作對比,以決定其擁有怎樣的許可權。
所以當多個客戶端存在 UID 相同的用戶時,這些用戶會擁有相同的文件許可權。更進一步,擁有 root 許可權的用戶可以通過 su 命令切換到任意 UID 登錄,伺服器會因此給予其對應 UID 的許可權。
為了防止上面的問題出現,伺服器可選擇使用更健壯的驗證機制比如 Kerberos 結合 NFS PRCSEC_GSS。
NFS 共享目錄的訪問控制基於 /etc/exports 文件中定義的主機名或 IP 地址。但是客戶端很容易針對其身份和 IP 地址造假,這也會導致一些安全問題。
NFSv4 只使用 TCP 作為自己的傳輸協議,而且通常只開放 2049 埠進行數據傳輸。在配置防火牆時,除了放開 2049 埠的限制外,還要時刻注意數據傳輸的源地址和目標地址。
win10 系統默認不能掛載 NFS 共享目錄,需要進入 控制面板 - 程序 - 程序和功能 - 啟用或關閉 Windows 功能 ,勾選上 NFS 服務 。
UNIX and Linux System Administration Handbook, 4th Edition
How to Mount an NFS Share Using a Windows 10 Machine
⑦ Linux 環境下搭建NFS服務
NFS(Network File System),網路文件存儲系統,它最早是由 Sun 公司開發的,也是 FreeBSD 支持的文件系統中的一個,它允許網路中的計算機之間通過TCP/IP 網路共享資源。通過 NFS 協議,我們本地 NFS 的客戶端應用可以透明的讀寫位於服務端 NFS 伺服器上的文件,就像訪問本地文件一樣方便。簡單的理解,NFS 就是可以透過網路,讓不同的主機,不同的操作系統可以共享存儲的服務。
NFS 在文件傳送或信息傳送過程中依賴 RPC(Remote Procere Call)協議,即遠程過程調用,NFS的各項功能都必須向 RPC 來注冊,如此一來 RPC 才能了解 NFS 這服務的各項功能 Port,PID,NFS 在伺服器所監聽的 IP 等,而客戶端才能透過 RPC 的詢問找到正確對應的埠,所以 NFS 必須要有 RPC 存在是才能成功的提供服務,簡單的理解二者關系:NFS 是一個文件存儲系統,而 RPC 是負責信息的傳輸。
通過上面的簡介,我們知道 NFS 服務需要依賴 RPC 服務,所以這里 NFS 服務端需要安裝 rpcbind 和 nfs-utils ,客戶端只需要安裝 nfs-utils 即可,由於我們選用 CentOS 系統,所以可以使用 yum 快速的安裝。
然後安裝 NFS 服務
另:Ubuntu 16.04 安裝命令
我們在服務端創建一個共享目錄 /data/share ,作為客戶端掛載在遠端入口,然後設置許可權
然後,修改 NFS 配置文件 /etx/exports
說明一下,這里配置後邊有很多參數,每個參數有不同的含義,具體可以參考下邊。此處,我配置了將 /data/share 文件目錄設置為允許IP為 192.168.0.0/24 區間的客戶端掛載。然後,如果客戶端IP不在該區間也想要掛載的話,可以設置IP區間更大或者設置為 * 即允許所有客戶端掛載,例如: /home *(ro, sync,insecure,no_root_squash) 設置 /home 目錄允許所有客戶端只讀掛載。
接下來,我們先啟動 RPC 服務
我們發現,啟動了 NFS 服務後,RPC 注冊的埠列表明顯增多。現在服務端都啟動起來了,在服務端看下是否正確載入了設置的 /etc/exports 配置
最後,在另一台Linux虛擬機上測試一下,是否能夠正確掛載。首先,我們可以在客戶端查看下NFS服務端設置可共享的目錄信息
然後,在客戶端創建掛載目錄/share
最後,掛載遠端目錄到本地 /share 目錄
可以看到,可以正確將遠端 NFS 目錄掛載到本地。注意:掛載點 /share 目錄必須已經存在,而且目錄中沒有文件或子目錄
最後,我們在 NFS 服務端 /data/share 目錄下創建一個文件,看下客戶端能否正確讀取並修改
都可以了,這里因為上面設置了 NFS 遠端目錄許可權為 rw 擁有讀寫許可權,如果設置為 ro ,那麼客戶端只能讀取,不能寫入。根據實際應用場景合理配置。
NFS 默認使用 UDP協議進行掛載,為了提供 NFS 的穩定性,可以使用 TCP 協議掛載,那麼客戶端掛載命令如下:
最後,卸載命令
⑧ 【NFS】CentOS7.x NFS伺服器和客戶端設置
NFS:Network file system,網路文件系統
sun公司1984年推出,用來在網路中的多台計算機間實現資源共享(包括象文件或cd-rom)
設計的目的是:實現在不同系統間交互使用,所以它的通信協議採用與主機和操作系統無關的技術
NFS Server可以看作是File Server,它可以讓你的PC通過網路將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使 用NFS的遠端文件就象是在使用本地文件一樣
FS協議從誕生到現在有多個版本:NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)
RPC(Remote Procere call)
NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網路進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這 些傳輸協議用到這個RPC功能的。
NFS本身就是使用RPC的一個程序,或者說NFS也是一個RPC SERVER.所以只要用到NFS的地方都要啟動RPC
服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這么理解RPC和NFS的關系:NFS 是一個文件系統,而RPC是負責負責信息的傳輸。
nfs在系統中的後台守護進程: nfs
nfs服務需要啟動的其他進程:
rpc.nfsd:接收從遠程系統發來的NFS請求,並將這些請求轉化為本地文件系統請求
rpc.mountd:執行被請求的文件系統的掛接和卸載操作
rpc.portmapper:將遠程請求映射到正確的NFS守護程序
rpc.statd:在遠程主機重啟時,提供加鎖服務
rpc.quotaed:提供硬碟容量的管理能力,磁碟限額
在伺服器上使用 rpcinfo -p | grep -iE "service|NFS" 命令,顯示伺服器上可使用的 NFS 版本
# rpcinfo -p | grep -iE "service|NFS"
表示伺服器可提供 NFS V3 和 NFS V4。
如果不需要krb5p,設置完就可以直接可以mount了
如果需要krb5p,在/etc/sysconfig/nfs文件中要設置
RPCNFSDARGS="-N 4"
-N 表示禁用 ,也可以是"-N 3"或者"-N 2",這是代表NFS版本,NFSv2,3,4,改完這個要將服務restart
這一項必須要填,不然client端會報錯access錯誤,而server端不會有一點反應,連log中都不會出現報錯!
CentOS 7 NFS設置
https://huataihuang.gitbooks.io/cloud-atlas/service/nfs/setup_nfs_on_centos7.html
鳥哥的 Linux 私房菜 -- NFS 伺服器
http://linux.vbird.org/linux_server/0330nfs.php
CentOS 7.x NFS Server 的防火牆設定
http://blog.ilc.e.tw/blog/index.php?op=printView&articleId=682711&blogId=25793
CentOS 7 NFS伺服器和客戶端設置
http://blog.huatai.me/2014/10/14/CentOS-7-NFS-Server-and-Client-Setup/
Linux NFS參數配置
http://virues.iteye.com/blog/1345014
NFS各個版本之間的比較
https://blog.csdn.net/ycnian/article/details/8515517
系統管理指南:網路服務
https://docs.oracle.com/cd/E19253-01/819-7059/index.html
網路文件系統
https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.performance/nfs_ovw.htm
⑨ 本地NAS構建
由於阿里雲線上有NAS存儲,又不能公網訪問,所以本地通過軟體構建一個NAS以供測試。
NFS的掛載原理
NFS分為客戶端與伺服器端,一般設置為一個Server端,多個客戶端,也可設置為多對多,當伺服器端設置好共享目錄/data後,客戶端通過相應的訪問許可權,將共享目錄掛載到本地系統的某個目錄下,就可以透明的看到共享目錄里的文件了,依據伺服器制定的相應許可權做操作
NFS伺服器與客戶端的通信原理
客戶端NFS和服務端NFS通訊過程
1)首先伺服器端啟動RPC服務,並開啟111埠
2)啟動NFS服務,並向RPC注冊埠信息
3)客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS埠
4)服務端的RPC(portmap)服務反饋NFS埠信息給客戶端。
5)客戶端通過獲取的NFS埠來建立和服務端的NFS連接並進行數據的傳輸。
NFS系統守護進程
nfsd:它是基本的NFS守護進程,主要功能是管理客戶端是否能夠登錄伺服器;
mountd:它是RPC安裝守護進程,主要功能是管理NFS的文件系統。
當客戶端順利通過nfsd登錄NFS伺服器後,在使用NFS服務所提供的文件前,還必須通過文件使用許可權的驗證。它會讀取NFS的配置文件/etc/exports來對比客戶端許可權。
portmap:主要功能是進行埠映射工作。當客戶端嘗試連接並使用RPC伺服器提供的服務(如NFS服務)時,portmap會將所管理的與服務對應的埠提供給客戶端,從而使客戶可以通過該埠向伺服器請求服務。
環境:
新建一個虛擬機,系統安裝使用最小化安裝,可參照我前面的文章,有詳細介紹。一般情況是系統盤是和數據盤分開。系統盤在線上我一般情況是分配20G,如果是容器等應用系盤我會分配50G,當然如果是有很多鏡像的容器環境,那麼我會系統將/var/lib/docker等用單獨的數據盤來掛載。
安裝配置NAS文件共享存儲
1、服務端安裝
2、關閉防火牆
3、配置nas
配置文件:/etc/exports
共享目錄創建:
4. 本地NAS存儲目錄 192.168.230.0/24(授權訪問客戶端的地址段)
5. 重新載入NFS配置
參數說明:
rw:可讀寫的許可權
ro:只讀的許可權 anonuid:可以自行設定這個UID的值,這個UID必需要存在於你的/etc/passwd當中anongid:同anonuid,但是變成groupID就是了 sync:資料同步寫入到內存與硬碟當中 async:資料會先暫存於內存當中,而非直接寫入硬碟 insecure:允許從這台機器過來的非授權訪問
no_root_squash:登入NFS主機,使用該共享目錄時相當於該目錄的擁有者,如果是root的話,那麼對於這個共享的目錄來說,他就具有root的許可權,這個參數『極不安全』,不建議使用
root_squash:登入NFS主機,使用該共享目錄時相當於該目錄的擁有者。但是如果是以root身份使用這個共享目錄的時候,那麼這個使用者(root)的許可權將被壓縮成為匿名使用者,即通常他的UID與GID都會變成nobody那個身份
all_squash:不論登入NFS的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody
6. 啟動服務
7. 設置開機啟動
8. 查看埠佔用,以便開著防火牆的時候設置,如果閑麻煩,可以通過限制訪問IP
Linux nfs客戶端安裝
vi /ettc/hosts
在末尾加入
開機自動掛載
vi /etc/fstab
##尾行下面新增加一行寫入
註:_netdev表示設備需要網路
⑩ NFS筆記(二)NFS伺服器配置實例
一、NFS伺服器配置實例
實驗拓撲
二、實驗要求及環境
2.1實驗環境
NFS伺服器 IP:192.168.8.5
環境:
[[email protected] ~]# uname -a
Linux server7.ctos.zu 3.10.0-514.el7.centos.plus.i686 #1 SMP Wed Jan 25 12:55:04 UTC 2017 i686 i686 i386 GNU/Linux
[[email protected] ~]# cat /etc/redhat-release
CentOS release 7.3.1611 (AltArch)
客戶端IP:192.168.8.7
環境:
[[email protected] ~]# uname -a
Linux client-A.ctos.zu 2.6.32-696.el6.i686 #1 SMP Tue Mar 21 18:53:30 UTC 2017 i686 i686 i386 GNU/Linux
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
2.2、實驗要求
NFS伺服器
1、/home/share 目錄可讀寫,並且不限制用戶身份,共享給192.168.8.0/24網段不的所有主機;
2、/home/data 這個目錄僅共享給192.168.8.7這台主機,以供該主機上面的這個用戶來使用,
也就是說在192.168.8.5和192.168.8.7上均有賬號,且賬號均為;
3、/home/upload 這個目錄做為192.168.8.0/24網段的數據上傳目錄,其中/home/upload
的用戶和所屬組為nfs-upload這個名字,它的UID和GID均為222;
4、/home/nfs 這個目錄的屬性為只讀,可提供除了網段內的工作站外,向Internet也提供數據內容。
三、伺服器端設置
1、 編輯/etc/exports內容
[[email protected] etc]# cat /etc/exports
/home/share 192.168.8.0/24(rw,no_root_squash)
/home/data 192.168.8.7(rw)
/home/upload 192.168.8.0/24(rw,all_squash,anonuid=222,anongid=222)
/home/nfs 192.168.8.0/24(ro) *(ro,all_squash)
2、按要求建立每個對應目錄
2.1、創建/home/share目錄 任何人都可以在 /home/share內新增、修改文件,但
僅有該文件/目錄的建立者與root能夠刪除自己的目錄或文件。
[[email protected] etc]# mkdir -p /home/share
[[email protected] etc]# ll -d /home/share/
drwxr-xr-x. 2 root root 6 9月 5 15:50 /home/share/
[[email protected] etc]# chmod 1777 /home/share/
[[email protected] etc]# ll -d /home/share/
drwxrwxrwt. 2 root root 6 9月 5 15:50 /home/share/
2.2、創建/home/nfs
[[email protected] etc]# ll -d /home/nfs/
drwxr-xr-x. 2 root root 6 9月 5 16:52 /home/nfs/
2.3、創建/home/data目錄
[[email protected] etc]# mkdir -v /home/data
mkdir: 已創建目錄 "/home/data"
[[email protected] etc]# ll -d /home/data/
drwxr-xr-x. 2 root root 6 9月 5 16:57 /home/data/
[[email protected] etc]# useradd
[email protected] etc]# passwd
更改用戶 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字元
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[[email protected] etc]# cat /etc/passwd | grep
:x:1000:1000::/home/:/bin/bash
[[email protected] etc]# chmod 700 /home/data/
[roo[email protected] etc]# chown -R : /home/data/
[[email protected] etc]# ll -d /home/data/
drwx------. 2 6 9月 5 16:57 /home/data/
2.4、創建/home/upload目錄
#先建立對應賬號與組名及UID
[[email protected] etc]# groupadd -g 222 nfs-upload
[[email protected] etc]# useradd -g 222 -u 222 -M nfs-upload
[[email protected] etc]# cat /etc/passwd|grep nfs
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
nfs-upload:x:222:222::/home/nfs-upload:/bin/bash
#創建目錄,修改屬主
[[email protected] etc]# mkdir /home/upload
[[email protected] etc]# chown -R nfs-upload:nfs-upload /home/upload/
[[email protected] etc]# ll -d /home/upload/
drwxr-xr-x. 2 nfs-upload nfs-upload 6 9月 6 08:38 /home/upload/
2.5、重啟NFS服務
[[email protected] etc]# systemctl restart nfs
[[email protected] etc]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Active: active (exited) since 三 2017-09-06 08:41:40 CST; 8s ago
Process: 9171 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
Process: 9169 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
Process: 9168 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
Process: 9181 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 9180 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 9181 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
9月 06 08:41:40 server7.ctos.zu systemd[1]: Starting NFS server and services...
9月 06 08:41:40 server7.ctos.zu systemd[1]: Started NFS server and services.
[[email protected] etc]# tail /var/log/messages
Sep 6 08:41:40 server7 systemd: Started NFS Mount Daemon.
Sep 6 08:41:40 server7 rpc.mountd[9178]: Version 1.3.0 starting
Sep 6 08:41:40 server7 systemd: Started NFSv4 ID-name mapping service.
Sep 6 08:41:40 server7 systemd: Starting NFS server and services...
Sep 6 08:41:40 server7 kernel: NFSD: starting 90-second grace period (net c0c932c0)
Sep 6 08:41:40 server7 systemd: Started NFS server and services.
Sep 6 08:41:40 server7 systemd: Starting Notify NFS peers of a restart...
Sep 6 08:41:40 server7 sm-notify[9198]: Version 1.3.0 starting
Sep 6 08:41:40 server7 sm-notify[9198]: Already notifying clients; Exiting!
Sep 6 08:41:40 server7 systemd: Started Notify NFS peers of a restart.
2.6、查看NFS伺服器共享出來目錄
2.7、關閉防火牆、selinux
2.8查看配置
[[email protected] ~]# exportfs -v
/home/data 192.168.8.7(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/home/share 192.168.8.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/home/upload 192.168.8.0/24(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=222,anongid=222,sec=sys,rw,secure,root_squash,all_squash)
/home/nfs 192.168.8.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
/home/nfs <world>(ro,wdelay,root_squash,all_squash,no_subtree_check,sec=sys,ro,secure,root_squash,all_squash)
四、客戶端配置
4.1、客戶端也要安裝nfs-utils和rcpbind軟體包
[[email protected] ~]# yum install nfs-utils rpcbind -y
4.2、啟動RPC
[[email protected] ~]# service rpcbind start /systemctl start rpcbind
Starting rpcbind: [ OK ]
[[email protected] ~]# service rpcbind status
rpcbind (pid 1926) is running...
[[email protected] ~]# chkconfig --list |grep rpcbind
4.3、客戶端關閉防火牆、selinux
[[email protected] ~]# service iptables stop /systemctl stop firewalld
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading moles: [ OK ]
4.4測試網路
[[email protected] ~]# ping 192.168.8.5
PING 192.168.8.5 (192.168.8.5) 56(84) bytes of data.
64 bytes from 192.168.8.5: icmp_seq=1 ttl=64 time=2.16 ms
64 bytes from 192.168.8.5: icmp_seq=2 ttl=64 time=0.697 ms
64 bytes from 192.168.8.5: icmp_seq=3 ttl=64 time=0.346 ms
64 bytes from 192.168.8.5: icmp_seq=4 ttl=64 time=0.336 ms
64 bytes from 192.168.8.5: icmp_seq=5 ttl=64 time=0.335 ms
64 bytes from 192.168.8.5: icmp_seq=6 ttl=64 time=0.317 ms
64 bytes from 192.168.8.5: icmp_seq=7 ttl=64 time=0.512 ms
64 bytes from 192.168.8.5: icmp_seq=8 ttl=64 time=0.320 ms
^C
--- 192.168.8.5 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7555ms
rtt min/avg/max/mdev = 0.317/0.629/2.169/0.595 ms
4.5 在客戶端查看NFS伺服器共享出來目錄
[[email protected] ~]# showmount -e 192.168.8.5
Export list for 192.168.8.5:
/home/nfs (everyone)
/home/upload 192.168.8.0/24
/home/share 192.168.8.0/24
/home/data 192.168.8.7
4.6、掛載NFS伺服器上/home/nfs目錄到本地/opt/data目錄下
#臨時掛載
#永久掛載
編輯、/etc/fstab文件,新增如下條目:
192.168.8.5:/home/nfs /opt/data/ nfs4 defaults 0 0
更多信息參考 nfs參數詳解
#查看信息
[[email protected] data] # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 644M 5.6G 11% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 477M 26M 426M 6% /boot
192.168.8.5:/home/nfs
8.0G 1.6G 6.5G 20% /opt/data
[[email protected] data]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.8.5:/home/nfs on /opt/data type nfs (rw,vers=4,addr=192.168.8.5,clientaddr=192.168.8.7)
#創建文件測試
[[email protected] data]# touch testabc
touch: cannot touch `testabc': Read-only file system
4.7掛載/home/upload 目錄到客戶端/opt/upload目錄下
#掛載
[[email protected] data]# mkdir /opt/upload
[[email protected] data]# mount -t nfs 192.168.8.5:/home/upload /opt/upload/
#查看掛載是否成功
[[email protected] data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 644M 5.6G 11% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 477M 26M 426M 6% /boot
192.168.8.5:/home/nfs
8.0G 1.6G 6.5G 20% /opt/data
192.168.8.5:/home/upload
8.0G 1.6G 6.5G 20% /opt/upload
#客戶端創建nfs-upload用戶
[[email protected] ~]# groupadd -g 222 nfs-upload
[[email protected] ~]# useradd -g 222 -u 222 -m nfs-upload
#測試,可以看到創建的文件及目錄默認屬主為nfs-upload屬組為nfs-upload
[@client-A upload]$ pwd
/opt/upload
[@client-A upload]$ ll
total 0
#測試創建文件
[@client-A upload]$ touch test123
測試創建目錄
[@client-A upload]$ mkdir testdir
[@client-A upload]$ ll -a
total 4
drwxr-xr-x 3 nfs-upload nfs-upload 36 Sep 6 10:28 .
drwxr-xr-x. 4 root root 4096 Sep 6 18:22 ..
-rw-rw-r-- 1 nfs-upload nfs-upload 0 Sep 6 10:28 test123
drwxrwxr-x 2 nfs-upload nfs-upload 6 Sep 6 10:28 testdir
# 在客戶端用root用戶創建文件測試
[email protected] upload]# touch testabc
[[email protected] upload]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 6 10:31 nfstest123
-rw-r--r-- 1 nfs-upload nfs-upload 0 Sep 6 10:32 testabc
drwxrwxr-x 2 nfs-upload nfs-upload 6 Sep 6 10:28 testdir
可以看到用root用戶創建的文件屬主仍是nfs-upload
#測試刪除文件
[@client-A upload]$ rm test123
[@client-A upload]$ ll
total 0
drwxrwxr-x 2 nfs-upload nfs-upload 6 Sep 6 10:28 testdir