背景
最近有个需求,需要到另外一台服务器上拿文件过来做其它操作,第一反应就是用 ftp、ssh2 之类的 PHP 扩展实现,起一个服务,去把文件复制过来亦或下载下来,但是这个需求是用来自动化测试的,我不可能一直无限去起 ftp、ssh2 服务,太过频繁了,因此,就想着把那台服务器上放文件的目录挂载过来。
NFS简介
NFS是 Network File System 的缩写,即网络文件系统。一种使用于分散式文件协定,有 SUN 公司开发。功能是通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用程序通过网络可以访问位于服务器磁盘中的数据。
NFS 在文件传送或信息传送的过过程中,依赖于 RPC 协议。RPC,远程过程调用(Remote Procedure Call),是使客户端能够执行其他系统中程序的一种机制。NFS 本身是没有提供信息传输的协议和功能的,但 NFS 却能让我们通过网络进行资料的分享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用PRC的一个程序。
NFS服务端、RPC协议、客户端三者可以理解为房源、中介、租客之间的关系:
搭建
1.查看nfs是否安装
rpm -qa | grep nfs
2.安装
yum -y install nfs
结果报错:提示No package nfs available. Error: Nothing to do。对于此错误,我一般习惯性的去更新一下 yum 仓库yum -y update
更新完之后,再次运行安装,发现错误依旧,看来这种安装方法不适用。查看一波系统版本信息cat /etc/redhat-release
显示是CentOS 7.5,应该是没有默认安装包的,可以使用以下命令来安装nfs软件:
yum install nfs-utils rpcbind -y
3.已安装nfs,则编辑配置文件
vi /etc/exports
//配置内容如下:
/home/ota/ 101.37.150.166(rw,sync,no_root_squash)
4.启动nfs服务
systemctl start nfs.service
5.检查nfs启动情况
service nfs status
6.执行挂载命令
提前在101.37.150.166上新建目录,配置权限:
mkdir /mnt/nfs
chmod -R 777 /mnt/nfs
mount -t nfs 106.15.188.108:/home/ota /mnt/nfs
7.开机自动挂载
将第6步的命令:mount -t nfs 106.15.188.108:/home/ota /mnt/nfs
添加到 /etc/rc.local 开机就会自动挂载了。
挂载错误
mount: wrong fs type, bad option, bad superblock on 106.15.188.109:/home/ota,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
根据错误提示,查看 /sbin/mount. 文件,果然发现没有 /sbin/mount.nfs 的文件,安装 nfs-utils 即可
yum install nfs-utils
安装之后本以为万事大吉,谁知道又报以下错误:
mount.nfs: access denied by server while mounting 106.15.188.109:/home/ota
遇到这个错误怎么解?出绝招啦!修改第3步的内容,将刚才 /etc/exports 中的内容改为
/home/ota/ *(insecure,rw,async,no_root_squash)
这个时候再重新挂载,即可成功!