目录
介绍
NFS(Network File System,网络文件系统)是一种古老的用于在UNIX/Linux主机之间进行文件共享的协议(电脑间的共享)。它古老到你必须穿着白大褂才能接近一台计算机的年代。在那个年代,所有的联网计算机都被认为是可信的,而不像现今这样,任何人都有多种多样方法能连接到你的计算机。因此,NFS在开发的时候专注于快速及易用的文件共享,而忽视了其安全性设计
NFS 是FreeBSD支持的文件系统中的一种,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上使用。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样
由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口用于传输。但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接。此时就需要RPC
RPC(Remote Procedure Call,远程过程调用):由于服务器在启动NFS时会随机选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port 111来监听客户端的需求并向客户端响应正确的端口号(一般用于NFS的相关信息,方便客服端查到)
应用
一般用于前端web服务的共享存储,一般包括用户的头像,附件,图片等等(微信头像、图片、附件)网站的源代码不跟NFS放在一起,以防服务器崩了全坏,因此NFS是互联网中数据存储最常用的服务之一,中小型网站用得最多
NFS的工作原理
切记:!!!!先启动RPC服务
NFS的使用
步骤
1、两台机子
一台为服务器,一台为主机,我做实验时用的就是将一台机子进行了克隆,克隆为node(用户端),而原先的server(服务)则不变
克隆的位置在管理快照里面,找到最下面有一个“新建链接克隆”
克隆完后进入机子,将其的名字改为node
hostnamectl set-hosetname node
设更改机子名字
reboot
更改后要进行重启
(以上虚拟机的部署为Mac Os的用户,Windows用户不用这个,Windows可以直接在VM虚拟机里直接克隆,比Mac Os方便)
搞定后,两台机子同时启动,在用链接软件同时进行连接
这样方便后面的操作
2、安装
首先先用yum list | grep nfs在服务端进行查看,看看是否安装NFS
搜索出来后,查看这几行,其中第一行
就是NFS的主要文件,如果没有,可以进行安装,输入
yum install nfs-utils -y
即可进行安装
同理可用yum list | grep rpc来查看是否有rpc,若没有则需要安装一个rpc
yum install rpcbind -y
注意:rpcbind为rpc的全名,安装时必须将其打全
3、配置文件
配置etc下的exports文件,可能不存在,可以直接用cat /etc/exports进行查看文件是否存在,若不存在,cat后就会创建一个
(主配置文件exports为空)
格式:共享目录的路径 允许访问的客服端名单(共享的权限参数)
名单写被允许的用户的域名ip,且后面的权限参数跟名单之间没有空格
所写的白名单里可以写完整的ip地址或者是ip网段:
1、10.211.55.10/24
2、10.211.55.10/255.255.255.0(与第一种一样,只是把后面的子网掩码没有简化)
3、10.211.55.0/24(直接允许某个网段)
4、*(允许所有的主机都可以访问)
共享的权限参数:共有三段(___,____,____)
示例:/home/public *(rw,sync,all_squash)——服务器共享路径为/home/public里的数据,所有人都可以访问,可读可写,同步传输,账户映射为nobody
4、实验
服务端
准备
服务端先检查 selinux和防火墙是否开放:
getenforce
systemctl status firewall
然后服务端安装rpcbind,nfs-utils,
然后服务端在根下面建立一个同名的文件:mkdir /nfsfile
然后进行查看nfsfile的权限:ls -ld /nfsfile
得到此时文件夹只能读,不能写,然后先往文件里写入数据:
echo "welcome to www.myworld.com" > /nfsfile/readme
便于后期查看是否能够访问成功,是否能够进行网络共享
修改服务端的主配置文件:vim /etc/exports
进来后按照前面的格式进行修改:路径 白名单(权限)
检查无误后即可保存退出
启动服务:
切记!!!先启动rpc,再启动nfs
systemctl start rpcbind
rpc优先
systemctl start nfs-server
nfs随后
没有报错就是胜利!✌️
若rpc启动报错(启动报错就不要碰nfs,否则实验失败)!!!可用以下代码解决
systemctl stop rpcbind
先暂停
systemctl start rpcbind
再启动
再为rpc和nfs增加开机启动(无顺序):systemctl enable rpcbind systemctl enable nfs-server
客户端
准备
安装nfs,因为要用到相关的工具:yum install nfs-utils -y
使用showmount命令,可以查看服务端的rpc服务器,进而查询到对应的nfs服务器,知道对方共享了那些信息可以进行访问
客服端访问是通过访问的方式进行访问的,通过远程挂载实现的,客户端是通过建立一个目录后,将对面的目录挂载到本地,然后就当作本地目录一样访问
步骤
建立一个目录mkdir /nfs1,然后用远程挂载命令将对方的共享目录与我的目录做关联,然后就可以通过本地目录(nfs1)进入服务端所共享的目录,用代码
mount -t nfs 10.211.55.10:/nfsfile /nfs1
-t 指所用的协议
10.211.55.10:/nfsfile 前面ip为指明的路径与目标目录用:隔开后输入目录名字
/nfs1 指所挂载的本地目录
如何去访问呢?直接通过
cd /nfs1
cd到本地目录
ls
查看本地目录的内容
cat readme
查看共享目录里的内容
即可访问
如果能看到就表明访问成功
但此时的挂载还只是临时挂载,不是永久挂载,若要做到永久挂载需要进行先回到root界面,直接cd,修改在客户端输入vim /etc/fstab 切记!!!!!!后面的修改必须全部正确!!!!!
先添加成这样方便后面的添加,以防出错
首先知道的是挂载设备名即为本地所需要挂载的远程目录:10.211.55.10:/nfsfile
挂载点目录,即为本地的目录:/nfs1
再三检查后保存退出,然后输入mount -a执行挂载,mount -a的意思是:将未执行挂载的进行挂载,若有问题,则会在输入后报错,立马改正,就不会使电脑启动失败
可以用mount | grep nfs进行查看挂载
df -h进行查看文件的挂载(若重启成功后,查看时发现还在则成功)
查看完后重启查看成果
然后此时就是成功永久挂载
最后查看也是成功即可