NFS是Network File System的縮寫。
NFS最先由Sun公司開發,分2,3,4三個版本,2和3由Sun起草開發,4.0開始Netapp公司參與並主導開發,最新爲4.1版本。
NFS數據傳輸基於RPC協議,RPC爲Remote Procedure Call的簡寫。
NFS應用場景是:A,B,C三臺機器上須要保證被訪問到的文件是同樣的,A共享數據出來,B和C分別去掛載A共享的數據目錄,從而B和C訪問到的數據和A上的一致。mysql
NFS結構
NFS原理
linux
在坐實驗前,準備兩臺虛擬機,A服務端(192.168.242.128),B客戶端(192.168.242.129)。nginx
[root@zlinux ~]# yum install -y nfs-utils //yum工具安裝nfs-utils時會一併安裝recbind
[root@zlinux ~]# vim /etc/exports //加入如下內容 /home/nfstestdir 192.168.241.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
小括號內的權限選項含義:sql
rw: 讀寫
ro: 只讀
sync: 同步模式,內存數據實時寫入磁盤
async :非同步模式
no_root_squash: 客戶端掛載NFS共享目錄後,root用戶不受約束,權限很大
root_squash: 與上面選項相對,客戶端上的root用戶收到約束,被限定成某個普通用戶
all_squash: 客戶端上全部用戶在使用NFS共享目錄時都被限定爲一個普通用戶
anonuid/anongid: 和上面幾個選項搭配使用,定義被限定用戶的uid和gidvim
[root@zlinux ~]# mkdir /home/nfstestdir [root@zlinux ~]# chmod 777 /home/nfstestdir/
[root@zlinux ~]# netstat -lntp //111端口說明rpcbind已啓動 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 800/nginx: master p tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 781/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1321/master tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 800/nginx: master p tcp6 0 0 :::3306 :::* LISTEN 1331/mysqld tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 781/sshd tcp6 0 0 ::1:25 :::* LISTEN 1321/master [root@zlinux ~]# ps aux |grep rpc //rpcbind服務已啓動 rpc 2476 0.0 0.0 64964 1048 ? Ss 19:11 0:00 /sbin/rpcbind -w root 3931 0.0 0.0 112680 972 pts/0 R+ 21:02 0:00 grep --color=auto rpc [root@zlinux ~]# systemctl start nfs //啓動nfs服務 [root@zlinux ~]# ps aux |grep nfs root 3983 0.0 0.0 0 0 ? S< 21:04 0:00 [nfsd4_callbacks] root 3989 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3990 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3991 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3992 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3993 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3994 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3995 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 3996 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd] root 4002 0.0 0.0 112680 976 pts/0 R+ 21:04 0:00 grep --color=auto nfs [root@zlinux ~]# systemctl enable nfs //設爲開機啓動 Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. [root@zlinux ~]# systemctl enable rpcbind
先安裝好nfs-utils
安裝包。app
[root@zlinux02 ~]# showmount -e 192.168.242.128 Export list for 192.168.242.128: /home/nfstestdir 192.168.1.0/24
使用showmount -e IP
命令,可查看NFS共享狀況。dom
[root@zlinux02 ~]# mount -t nfs 192.168.242.128:/home/nfstestdir /mnt/ [root@zlinux02 ~]# df -h //ke能夠看到增長了/mnt分區。 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 26G 2.7G 24G 11% / devtmpfs 903M 0 903M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 8.6M 904M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 197M 109M 88M 56% /boot tmpfs 183M 0 183M 0% /run/user/0 192.168.242.128:/home/nfstestdir 26G 3.4G 23G 14% /mnt
# 客戶端建立查看 [root@zlinux02 ~]# cd /mnt/ [root@zlinux02 mnt]# touch nfstestfile.txt [root@zlinux02 mnt]# ls -l 總用量 0 -rw-r--r--. 1 mysql mysql 0 3月 26 21:27 nfstestfile.txt # 服務端查看 [root@zlinux ~]# ls -l /home/nfstestdir/ 總用量 0 -rw-r--r--. 1 mysql mysql 0 3月 26 21:27 nfstestfile.txt #無論用哪一個用戶操做,將以1000uid,1000gid 操做 [root@zlinux ~]# id mysql uid=1000(mysql) gid=1000(mysql) 組=1000(mysql)
exportfs命令經常使用選項:ssh
-a 所有掛載或者所有卸載
-r 從新掛載
-u 卸載某個目錄
-v 顯示共享目錄async
經常使用組合: exportfs -arv
服務端更改配置文件後,不重啓服務,直接執行該命令就可使更改後的配置文件生效。
注意: 在重啓nfs服務以前須要先將全部掛載點卸載,不然將發生程序錯誤,嚴重者會拖垮系統。
服務端修改:tcp
[root@zlinux ~]# vim /etc/exports //增長一行如下內容 /tmp/ 192.168.242.0/24(rw,sync,no_root_squash) [root@zlinux ~]# exportfs -arv exporting 192.168.242.0/24:/tmp exporting 192.168.242.0/24:/home/nfstestdir
客戶端查看:
[root@zlinux02 ~]# showmount -e 192.168.242.128 Export list for 192.168.242.128: /tmp 192.168.242.0/24 /home/nfstestdir 192.168.242.0/24 [root@zlinux02 ~]# showmount -e 192.168.242.128 Export list for 192.168.242.128: /tmp 192.168.242.0/24 /home/nfstestdir 192.168.242.0/24
客戶端掛載共享目錄後,無論是root用戶仍是普通用戶,建立新文件時屬主、屬組爲nobody
客戶端掛載時加上-o nfsvers=3
客戶端和服務端都須要vim /etc/idmapd.conf把 "#Domain = local.domain.edu" 改成 "Domain = xxx.com" (域名自定義),而後再重啓rpcidmapd服務