NFS(network file system)網(wǎng)絡(luò)文件系統(tǒng),類似Windows中的文件夾共享,如下有三臺(tái)機(jī)器A, B, C,它們需要訪問(wèn)同一個(gè)目錄,目錄中都是圖片,傳統(tǒng)的做法是把這些圖片分別放到A, B, C,但是使用NFS只需要放到A上,然后A共享給B和C即可。訪問(wèn)的時(shí)候,B和C是通過(guò)網(wǎng)絡(luò)的方式去訪問(wèn)A上的那個(gè)目錄。
一、在A機(jī)上安裝 NFS 服務(wù)器所需的軟件包
yum install -y nfs-utils
yum install -y ?rpcbind
(實(shí)際上需要安裝兩個(gè)包nfs-utils和rpcbind, 不過(guò)當(dāng)使用yum安裝nfs-utils時(shí)會(huì)把rpcbind一起安裝上)
二、編輯exports文件,添加從機(jī)
vim ?/etc/exports
/home/nfs ? 192.168.222.201(rw,sync,fsid=0) ? 192.168.222.202(rw,sync,fsid=0)
配置說(shuō)明:
這一行分為三個(gè)部分:
第一部分:/home/nfs ,這個(gè)是本地要共享出去的目錄。
第二部分:192.168.222.0/24 ,允許訪問(wèn)的主機(jī),可以是一個(gè)IP:192.168.222.201,也可以是一個(gè)IP段:192.168.222.0/24
第三部分:括號(hào)中部分。
rw表示可讀寫(xiě),ro只讀;
sync :同步模式,內(nèi)存中數(shù)據(jù)時(shí)時(shí)寫(xiě)入磁盤(pán);async :不同步,把內(nèi)存中數(shù)據(jù)定期寫(xiě)入磁盤(pán)中;
no_root_squash :加上這個(gè)選項(xiàng)后,root用戶就會(huì)對(duì)共享的目錄擁有至高的權(quán)限控制,就像是對(duì)本機(jī)的目錄操作一樣。不安全,不建議使用;
root_squash:和上面的選項(xiàng)對(duì)應(yīng),root用戶對(duì)共享目錄的權(quán)限不高,只有普通用戶的權(quán)限,即限制了root;
all_squash:不管使用NFS的用戶是誰(shuí),他的身份都會(huì)被限定成為一個(gè)指定的普通用戶身份;
anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用戶限定后的uid和gid,前提是本機(jī)的/etc/passwd中存在這個(gè)uid和gid。
fsid=0表示將/home/nfs整個(gè)目錄包裝成根目錄
這個(gè)配置文件也可以這樣寫(xiě):
/opt/test/ 192.168.222.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
NFS 修改配置文件后無(wú)需重啟服務(wù),如下命令刷新即可:
exportfs ? -rv
三、啟動(dòng)A機(jī)上nfs服務(wù)
先為rpcbind和nfs做開(kāi)機(jī)啟動(dòng):
systemctl enable rpcbind.service
systemctl enable nfs-server.service
然后分別啟動(dòng)rpcbind和nfs服務(wù):
systemctl start rpcbind.service
systemctl start nfs-server.service
確認(rèn)NFS服務(wù)器啟動(dòng)成功:
rpcinfo -p
通過(guò)查看service列中是否有nfs服務(wù)來(lái)確認(rèn)NFS是否啟動(dòng)。
showmount -e 192.168.222.200
查看可掛載目錄及可連接的IP
四、關(guān)閉A機(jī)上的防火墻或者給防火墻配置nfs的通過(guò)規(guī)則
iptables ?-F
systemctl stop firewalld.service
五、在B,C機(jī)上配置clinet端
1、安裝nfs,并啟動(dòng)服務(wù)。
yum install -y ?rpcbind
systemctl start rpcbind.service
systemctl enable rpcbind.service
客戶端不需要啟動(dòng)nfs服務(wù),只需要啟動(dòng)rpcbind服務(wù)
2、檢查 NFS 服務(wù)器端是否有目錄共享
showmount -e 192.168.222.200
3、使用 mount 掛載A服務(wù)器端的目錄/home/nfs到客戶端B的目錄/home/nfs下
[root@localhost ~]# mkdir /home/nfs
[root@localhost ~]# mount -t nfs192.168.222.200:/home/nfs//home/nfs/
[root@localhost ~]# df -h
文件系統(tǒng)?????????????????? 容量? 已用? 可用 已用% 掛載點(diǎn)
/dev/mapper/centos-root???? 11G? 1.3G? 9.1G?? 13% /
devtmpfs?????????????????? 911M???? 0? 911M??? 0% /dev
tmpfs????????????????????? 921M???? 0? 921M??? 0% /dev/shm
tmpfs????????????????????? 921M? 8.5M? 912M??? 1% /run
tmpfs????????????????????? 921M???? 0? 921M??? 0% /sys/fs/cgroup
/dev/sda1????????????????? 497M? 170M? 328M?? 35% /boot
tmpfs????????????????????? 185M???? 0? 185M??? 0% /run/user/0
192.168.222.200:/home/nfs?? 11G? 1.3G? 9.1G?? 13% /home/nfs
4、掛載完成,可以正常訪問(wèn)本機(jī)下的/home/nfs,如果在服務(wù)端A在共享目錄/home/nfs中寫(xiě)入文件,B、C機(jī)上可以看到,但是不能在這個(gè)目錄中寫(xiě)入文件.
六、在服務(wù)器端A再建立一個(gè)共享目錄,并且可以允許A、B、C寫(xiě)入共享目錄
1、在B、C機(jī)上取得root用戶ID號(hào)
[root@localhost home]# id root
uid=0(root) gid=0(root) 組=0(root)
2、在A服務(wù)器上再建立一個(gè)共享目錄
mkdir /home/nfs1
# vim /etc/exports
/home/nfs 192.168.222.201(rw,sync,fsid=0) 192.168.222.202(rw,sync,fsid=0)
/home/nfs1 192.168.222.0/24(rw,sync,all_squash,anonuid=0,anongid=0)
加入第二行,anonuid=0,anongid=0即為root用戶id。
3、讓修改過(guò)的配置文件生效
exportfs ?-rv
使用exportfs命令,當(dāng)改變/etc/exports配置文件后,不用重啟nfs服務(wù)直接用這個(gè)exportfs即可,它的常用選項(xiàng)為[-aruv].
-a :全部掛載或者卸載;
-r :重新掛載;
-u :卸載某一個(gè)目錄;
-v :顯示共享的目錄;
4、 查看新的可掛載目錄及可連接的IP
showmount -e 192.168.222.200
5、在B、C clinet端新掛載一個(gè)目錄
showmount -e 192.168.222.200? #查看新的掛載共享目錄是否有了。
mkdir nfs1
mount -t nfs 192.168.222.200:/home/nfs1/ /home/nfs1/
ll / >/home/nfs1/test.txt?? #測(cè)試向新的共享目錄中可以寫(xiě)入文件了。
(卸載掛載:umount /home/nfs1/)
6、想在客戶機(jī)B、C上實(shí)現(xiàn)開(kāi)機(jī)掛載,則需要編輯/etc/fstab或者將掛載命令寫(xiě)入到?/etc/rc.local
vim /etc/fstab
加入以下內(nèi)容:
192.168.222.200:/home/nfs ? ? ? ? ? ? ? ?/home/nfs ? ? nfs??? nolock?? 0 0
192.168.222.200:/home/nfs1?????????????? /home/nfs1 ? ?nfs??? nolock?? 0 0
保存后,重新掛載
mount -a
vim /etc/rc.local
mount ?-t nfs ?192.168.222.200:/home/nfs1/ ?/home/nfs1/