nfs是什么
网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(pressentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS一般用来存储共享视频,图片等静态数据。
nfs挂载示意图
nfs挂载示意图
当我们在NFS服务器设置好一个共享目录/home/public后,其他有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:df –h。
nfs原理图
实现步骤
nfs服务器的部署
实验背景:
服务端:desktop 172.25.254.110 截图为白色
客户端:server 172.25.254.210 截图为黑色
实验步骤:
在服务端 和客户端 都执行 yum install nfs-utils -y
在服务端
systemctl start nfs-server
systemctl status nfs
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
1.2.3.
vim /etc/exports #nfs的主要配置文件
添加
/mnt *(ro,sync) #表示只读挂载,sync方式传输
exportfs -rv 刷新文件
sync和async的区别:
async 客户端编写文件时,同时同步到服务器 稳定 低速 对服务器压力大 一边写在内存中,存一边在硬盘中
sync 客户端编写完之后,再同步到服务器 不稳定 速度快
在客户端:
showmount -e 172.25.254.110
mount 172.25.254.110:/mnt/ /media/
cd /media/
ls
nfs的自动挂载
看谁就挂载谁看完就自动卸载 和samba一样
服务端 先共享文件出来=
1.vim /etc/exports
添加
/etc *(ro,sync)
exportfs -rv 刷新
1.2.
在客户端
测试 showmount -e 172.25.254.110
1.编辑文件 /etc/auto.master
添加
/media /etc/auto.nfs
2.vim /etc/auto.nfs
添加
* 172.25.254.110:/& #同配符的方式
3.重启服务 systemctl restart autofs
4.cd /media/
ls
cd mnt
df
在规定时间 退出/media目录 挂载失败
5.cd /media/
ls
cd etc
df
1.2.3.5.6.7.8.etc目录自动挂载
nfs的权限管理
在服务端 开启nfs之后
开始时,客户端是不支持对mnt目录写入的。
vim /etc/exports
添加
设置 /mnt *(rw,sync)
exportsfs -rv 刷新
chmod 777 /mnt 修改权限 chmod 777 /mnt 这样的话,其他用户才能对mnt可写
1.2.
3.
在客户端
cd /media/mnt/
touch filess
ls
在服务器端
cd /mnt/
ll
当不进行任何设置时,客户端新建的用户在客户端用户和组都是nfsnobody
对ROOT用户的设定
在服务端
vim /etc/exports
添加
/mnt *(rw,sync,anonuid=1001,anongid=1002)#指定root用户在客户机新建文件时所用的组和用户身份
exportsfs -rv
1.
2.
在客户端:
cd /media/mnt/
touch file33 #发现是服务端/etc/exports指定的用户id
ll
对student用户的设定
在客户端:
su - student
cd /media/mnt
ls
touch file44
ll
如果不做设置,在客户机用student用户新建文件,则客户机和服务器都是student
在服务器端:
cd /mnt/
ll
vim /etc/exports
/mnt *(rw,sync,anonuid=1001,anongid=1002,all_squash)
exportsfs -rv
设置all_squash 则所有用户(不管是root还是student)在新建文件时,都用1001 和1002,即你设定的用户和组
1.2.
3.
在客户端:
su - student
cd /media/mnt
ls
touch file55
ll
服务端
3.no_root_squash root用户用root 其他用户用自
no_root_squash 和all_squash不能同时存在
在服务器端
vim /etc/exports
/mnt *(rw,sync,anonuid=1001,anongid=1002,no_root_squash)
在客户端
su - student
cd /media/mnt
ls
touch file66
ll
服务端:
4.172.25.254.2(ro) *(rw,sync) 对54是只读,对其他任何是读写。
小范围的特定设置需要在 * 前面 否则大范围覆盖小范围。 特定设置不生效。
在服务端
vim /etc/exports
/mnt 172.25.254.2(ro) * (rw......)
exportfs -rv
1.2.
在真机测试:
mount 172.25.254.110:/mnt /mnt/
cd /mnt/
ls
touch fileq #显示只读