# NFS远程目录挂载 NFS 是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。 ## 一、服务端(CentOS) 1、检查 nfs 服务 ```bash #CentOS rpm -qa | grep nfs rpm -qa | grep rpcbind ``` 2、安装 nfs ```bash #CentOS yum -y install nfs-utils rpcbind ``` 3、设置开机自动启动服务 ```bash chkconfig nfs on chkconfig rpcbind on ``` 4、启动服务 ```bash service rpcbind start service nfs start ``` 5、创建共享目录 ```bash mkdir /data/nfs-share chmod -R 777 /data/nfs-share ``` 6、配置 exports 文件 ```bash vim /etc/exports ======================================= /data/nfs-share 192.168.1.1(rw) ======================================= ``` 7、刷新配置,立即生效 ```bash exportfs -a ``` 8、查看挂载目录/mount ```bash #可以用showmount -e 服务端ip来查看可挂载的目录 showmount -e showmount -e 192.168.1.1 ``` ## 二、客户端(CentOS) 1、创建共享目录 ```bash mkdir /data/share-file ``` 2、挂载目录 ```bash #挂载一个远程目录到本地目录 mount 192.168.1.1:/data/nfs-share /data/share-file ##若挂载失败,错误提示如下: mount: wrong fs type, bad option, bad superblock on 192.168.1.1:/xxx/xxx, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount. helper program) In some cases useful info is found in syslog - try     dmesg | tail or so ##安装nfs-utils即可 yum install nfs-utils ``` 3、卸载已挂载目录 ```bash umount /data/share-file ``` 4、nfs挂载出现"access denied by server while mounting"的解决方法 ```bash 1、使用了非法端口,也就是使用了大于1024的端口。 这个错误,可以通过查看日志确认: [root@local~ /]# cat /var/log/messages | grep mount Jan 2 12:49:04 localhost mountd[1644]: refused mount request from 192.168.1.1 for /data/nfs-share/ (/data/nfs-share): illegal port 1689 解决办法: 修改配置文件/etc/exports,加入 insecure 选项,重启nfs服务,再尝试挂载。 /data/nfs-share/ *(insecure,rw,async,no_root_squash) 2、NFS版本问题 编辑/etc/sysconfig/nfs文件,找到下面: #Turn off v2 and v3 protocol support #RPCNFSDARGS="-N 2 -N 3" #Turn off v4 protocol support #RPCNFSDARGS="-N 4"  /*把这句前面的#号去掉*/ 最后保存,重启nfs服务,再尝试挂载;如果挂载不上,可尝试在后面加-o nolock参数。 3、查看客户端挂载的目录是否具备读写权限,添加相应权限即可。 4、nfs服务器上的/etc/hosts中设置了客户端机器IP对应域名,去掉即可。 ``` ## 一、服务端(Ubuntu) 1、安装 NFS 服务 ```bash sudo apt install nfs-kernel-server sudo apt install portmap ``` 2、设置共享目录 ```bash #通过命令 showmount -e 可以查询哪些目录被共享出去,这个命令是安装nfs-kernel-server后加入系统的 showmount -e #Export list for xtmgr90: #这就显示没有目录被共享出去 #现在我们在/home/zyadmin下新建一个共享目录nfs,将此目录共享出去 mkdir nfs ``` 3、配置文件/etc/exports ```bash sudo vim /etc/exports =================================================== /home/zyadmin/nfs *(rw,sync,no_subtree_check,no_root_squash) =================================================== #注意(rw,sync,no_subtree_check,no_root_squash)不要有空格 #*代表所有的网段都可以访问这台服务器,rw代表其他人访问这个目录有读写权限(ro为只读),sync为同步,代表所有数据在请求时写入共享,no_subtree_check代表不检测父目录的的权限,no_root_squash代表root用户具有根目录的的完全管理访问权限。 ``` 4、启动NFS服务器 ```bash #方法一 /etc/init.d/rpcbind restart /etc/init.d/nfs-kernel-server restart #方法二 service portmap restart service nfs-kernel-server restart #方法三(推荐) systemctl restart rpcbind.service systemctl restart nfs-server.service ``` 5、查看nfs进程是否正常启动 ```bash ps -ef | grep nfs ``` 6、再次查看共享的挂载目录 ```bash showmount -e Export list for xtmgr90: /home/zyadmin/nfs * ``` ## 二、客户端(Ubuntu) 1、安装 NFS 服务 ```bash sudo apt install nfs-common ``` 2、创建共享目录并挂载 ```bash mkdir nfs-share sudo mount 172.16.33.72:/home/zyadmin/nfs nfs-share #挂载一个远程的目录到本地目录 ``` 3、卸载已挂载的目录 ```bash sudo umount nfs-share ``` 4、设置 NFS 服务 ```bash #一般服务在没有设置时是不会开机自启动的,如果要开机自自动,那么还要进行一下设置 systemctl status nfs-common #如果有的服务被masked,服务被冻结,那么先解冻再设置 systemctl unmask nfs-common.service systemctl status nfs-common.service #实在不行那就服务器每次开机后手动再挂载一次 ```