Linux搭建NFS


NFS文件共享

       NFS(Network File System)是網絡文件系統,是由sun公司開發的一種通過網絡方式共享文件系統的通用共享解決方案,目前NFS有三個版本,分別是NFSv2、NFSv3、NFSv4。V2雖然比較老,但是他的兼容性很好,CentOS7版本默認使用版本4提供NFS網絡文件系統共享服務,NFS監聽在TCP2049端口。

       當倆台計算機需要通過網絡建立連接時,雙方主機就一定要提供一些基本信息,如:IP地址、服務端口號等;當有100台客戶端需要訪問某台服務器時,服務器就需要記住這些客戶端的IP地址以及相應的端口號等信息。而這些信息需要程序來管理。在Linux中,這些的信息可以由某個特定服務自己來管理,也可以委托RPC來幫助自己管理。RPC是遠程調用協議,RPC協議為遠程通信程序管理通信雙方所需的基本信息。這樣NFS就可以專注於如何共享數據,支語通信的連接以及連接的基本信息,則全權委托給RPC管理,CentOS7系統由rpcbind服務提供RPC服務提供RPC協議的支持,目前NFSv4雖然不再需要與rpcbind直接交互,單rpc.mountd依然是NFSv4所必須的服務。所以,如果在CentOS7平台上實現NFS共享,需要同時啟動NFS與rpcbind服務

       所需軟件包:nfs-utils rpcbind(提供地址與端口注冊服務)

一條完整的共享條目語法結構如下,其中,客戶端主機可以是一個網段、單台主機或主機名

       共享路徑       客戶端主機(選項)

我們也可以為多個客戶主機設置不通的訪問選項

       共享路徑       客戶端主機1(選項)       客戶端主機2(選項)

最簡單的NFS配置可以僅給定一個共享路徑與一個客戶端主機,而不是指定選項,因為沒有選項時,NFS將使用默認設置,而默認屬性為ro、sync、wdelay、no_root_squash。具體NFS屬性以及其對應含義看選項

NFS選項:

NFS選項

功能

ro

只讀共享

rw

可讀可寫共享

sync

同步寫操作

async

異步寫操作

wdelay

延遲寫操作

root_squash

屏蔽遠程root權限

no_root_squash

不屏蔽遠程root權限

all_squash

屏蔽所有的遠程用戶權限

       以上選項中,ro與rw比較容易理解,用來定義客戶端訪問共享時可以獲得的權限是只讀訪問換時可讀可寫訪問。計算機對數據進行修改時會先將修改的內容寫入快速的內存,隨后才會慢慢寫入慢速的硬盤設備中,async選項允許NFS服務器在沒有完全把數據寫入硬盤前就返回成功消息給客戶端,而此時數據實際還存放在內存中,但客戶端則顯示數據已經寫入成功。這里要注意,該選項僅僅影響操作信息的返回時間,並不決定如何進行寫操作,sync選項確保在數據正真寫入存儲設備后才會返回成功信息。wdelay為延遲寫入選項。也就是說,他決定了先將數據寫入內存,再寫入磁盤,然后將多個寫入請求合並后寫入硬盤,這樣可以減少對磁盤IO的次數,從而優化性能,該選項可以優化NFS性能,單有可能導致非正常關閉NFS時數據丟失情況的發生。於此相反的選項就是no_wdelay,但該選項與async選項一起使用時將不會生效,因為async時基於wdelay實現對客戶端使用root賬號訪問NFS時,服務器虛榮默認會自動將root映射為服務器本地的匿名賬號,通過anonuid可以指定匿名賬號id,默認anonuid為65534,也就是nfsnobody賬號,使用no_root_squash可以防止這種映射而保留root權限,all_squash選項則可以屏蔽多有賬戶權限,將所有的用戶對NFS的訪問自動映射為服務器本地的匿名賬戶。默認情況下,普通賬號的權限時保留的,也就是沒有進行squash操作

server端:

安裝NFS服務

[root@localhost ~]# yum install -y nfs-utils rpcbind

檢測是否安裝成功

[root@localhost ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-32.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64

創建一個共享的目錄

[root@localhost ~]# mkdir /var/web
[root@localhost ~]# chmod a+w /var/web/

NFS配置文件時/etc/exports,是一個新的文件,所以直接添加就可以

[root@localhost ~]#cat /etc/exports
/var/web/ 192.168.17.0/24(rw,async)

要共享的目錄      允許訪問的網段(可以是一個IP地址或者主機名) rw是指可讀可寫

sync是指同步寫入磁盤

[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# systemctl enable rpcbind.service
[root@localhost ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

查看啟動是否成功

[root@localhost ~]# showmount -e 192.168.17.130
Export list for 192.168.17.130:
/var/web 192.168.17.0/24

若要想客戶端主機可以訪問並使用服務器所提供的共享目錄,可通過mount命令掛載NFS共享

       #mount -t nfs -o 選項 服務主機:/服務器共享目錄  /本地掛載目錄

client端:

客戶端進行安裝NFS

[root@localhost ~]# yum install -y nfs-utils rpcbind

掛載

[root@localhost ~]# mount 192.168.17.130:/var/web/ /opt
[root@localhost ~]# mount | grep /opt/
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  940M   17G   6% /
devtmpfs                 479M     0  479M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  6.7M  483M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                     98M     0   98M   0% /run/user/0
192.168.17.130:/var/web   18G  1.1G   17G   6% /opt
[root@localhost ~]# mount | grep /opt
192.168.17.130:/var/web on /opt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.17.131,local_lock=none,addr=192.168.17.130)

添加到開機自動掛載

[root@localhost ~]# cp -a /etc/fstab /etc/fstab.bak
[root@localhost ~]# echo "192.168.17.130:/var/web /opt nfs defaults,_netdev 0 0" >>/etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
192.168.17.130:/var/web /opt nfs defaults,_netdev 0 0
[root@localhost ~]# umount /opt/
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep nfs
192.168.17.130:/var/web on /opt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.17.131,local_lock=none,addr=192.168.17.130,_netdev)

server端:

[root@localhost ~]# cat /var/lib/nfs/etab 
/var/web    192.168.17.0/24(rw,async,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)

除了使用NFS的掛載參數來控制權限外,還可以通過共享目錄本身的權限來進行控制

實驗結果:

 

在server寫一個測試文件

 

客戶端就可以查看

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM