Centos7NFS(网络文件系统的搭建
一、NFS简介
NFS(Network File System,网络文件系统)是历史最为悠久的文件共享协议之一,其目的是允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已;
NFS网络文件系统;不同操作系统的机器实现数据的共享;RPC协议远程调用;
只要用的NFS的地方都要启动RPC服务;NFS是一个文件系统,RPC负责文件的传输;
nfs和rpc的关系:nfs是一个文件系统,负责管理分享的目录;rpc负责文件的传递
nfs启动时至少有rpc.nfsd和rpc.mountd2个daemon
rpc.nfsd主要是管理客户机登陆nfs服务器时,判断该客户机是否能登陆,和客户机ID信息。
Rpc.mountd主要是管理nfs的文件系统。当客户机顺利登录nfs服务器时,会去读/etc/exports文件中的配置,然后去对比客户机的权限。
协议端口:
RPC:111 tcp/udp
nfsd: 2049 tcp/udp
mountd:RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768–65535)来进行通讯 ,可以在/etc/nfsmount.conf文件中指定mountd的端口
二、服务器端NFS安装
1,首先在服务端上安装nfs-utils和rpcbind。
NFS 默认端口是:2049
查看端口是否开放/被占用:
netstat -antpu | grep 2049
yum -y install rpcbind 支持安全NFS RPC服务的连接
yum -y install nfs-utils 包括基本的NFS命令与监控程序
其他:查看共享磁盘空间
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)
例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示:
2.编辑nfs配置文件。
mkdir -p /data ###创建共享目录
vim /etc/exports
/data/ 192.168.153.162 (rw,sync,no_root_squash)
/data/表示要共享的目录 192.168.153.162 共享给谁,这里也可以写网段。
(rw,sync,no_root_squash) 读写、同步、不限制root用户。
这里有个地方要注意:在ip和权限之间是不能有空格的,否则会有报错提示。
当服务端修改配置文件后,我们可以不用重启服务,使用exportfs -arv即可生效
要不会出现错误:
其他:
1)exportfs命令
一般格式: exportfs + 参数
具体参数详解:
-a # 全部挂载(或卸载)/etc/exports文件内的设定。
-r # 重新加载/etc/exports中的设置
-u # 卸载某一目录。
-v # 在export时将共享的目录显示在屏幕上。
2)关于NFS共享的常用参数
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
no_all_squash 保留共享文件的UID和GID(默认)
root_squash 加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas 和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
root用户具有根目录的完全管理访问权限;
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID;要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
3,启动rpcbind nfs服务。
nfs是网络文件系统,rpc服务用于远程过程的调用,要使用nfs服务前,需要先在服务器端先开启rpc服务,通过rpc服务告诉nfs进程传输文件数据时的端口信息,进行程序控制;所以必须成功启动rpcbind后再启动nfs-utils
systemctl start rpcbind
systemctl enable nfs #设置开机启动
systemctl enable rpcbind #设置开机启动
systemctl start rpcbind (先启动) #启动rpcbind;必须在启动nfs-utils之前启动rpcbind!!!
systemctl start nfs #启动nfs-utils
再次查看端口2049:
netstat -antpu | grep 2049
4.修改NFS默认端口
1)、前言
协议端口:
RPC:111 tcp/udp
nfsd: 2049 tcp/udp
mountd:RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768–65535)来进行通讯 ,可以在/etc/nfsmount.conf文件中指定mountd的端口;
1.NFS server 端口修改
NFS server启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS sever 端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口
2)、防火墙配置步骤
(1)、先看一下目前所使用的的端口情况
rpcinfo -p localhost
(2)、在配置文件中添加以下5行内容,其他的保持不动
# 在配置文件中添加以下5行内容,其他的保持不动
# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
备注:nfs客户端防火墙:
iptables -A INPUT -s 10.46.121.240 -p tcp -m multiport --dport 111,2049,30001:30004 -j ACCEPT
iptables -A INPUT -s 10.46.121.240 -p udp -m multiport --dport 111,2049,30001:30004 -j ACCEPT
(3)、firewall白名单
1.添加白名单
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=30001/tcp --permanent
firewall-cmd --zone=public --add-port=30002/tcp --permanent
firewall-cmd --zone=public --add-port=30003/tcp --permanent
firewall-cmd --zone=public --add-port=30004/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=30001/udp --permanent
firewall-cmd --zone=public --add-port=30002/udp --permanent
firewall-cmd --zone=public --add-port=30003/udp --permanent
firewall-cmd --zone=public --add-port=30004/udp --permanent
2.重启防火墙:
systemctl restart firewalld.service
3.查看防火墙端口
firewall-cmd --list-ports
(4)、重启:
systemctl restart rpcbind && systemctl restart nfs
2.nfsd 端口修改
1).停止NFS
service nfs stop
2).在ROOT用户下修改文件 >vim /etc/services
三,Lunix客户端挂载目录。
1,在挂载目录之前,需要用到showmount命令,所以要安装nfs-utils. yum install -y nfs-utils。
2,查看服务器端都共享了哪些目录。 showmount -e 192.168.153.162 可以看到
备注:如果出现如下错误:
查看服务端防火墙是否开启:
systemctl start firewalld.service 开启防火墙
systemctl stop firewalld.service 停止防火墙
systemctl restart firewalld.service 重启防火墙
systemctl disable firewalld.service 重启生效(禁用防火墙)
systemctl status firewalld 查看防火墙状态
firewall-cmd --state 查看状态
查看端口开放情况
firewall-cmd --list-ports
netstat -ntlp 查看端口
添加端口到防火墙
firewall-cmd --zone=public --add-port=10022/tcp --permanent
删除端口到防火墙
firewall-cmd --zone=public --remove-port=9050/tcp --permanent
3.创建客服端:创建共享目录
mkdir -p /data/es
4.挂载
mount -t nfs 主机名或IP:/共享目录 /挂载点
mount -t nfs -onolock,nfsvers=3 192.168.153.162:/data/ /data/es
如果不加 -onolock,nfsvers=3 ,挂载的时候会出现各种问题,所以我们要指定nfs版本为3。
注:访问本地的/data/es相当于访问192.168.153.162的共享目录/data/
注意!该方式是临时挂载,如需永久挂载请将挂载目录添加至/etc/fstab
编辑fstab
vim/etc/fstab
添加一行保存退出:
内网/外网ip:/共享的目录 /共享的目录 nfs defaults 0 0
192.168.153.162:/data/ /data/es nfs defaults 0 0
192.168.153.162:/data/ /data/es nfs nolock,nfsvers=3 0 0
5.其他: 自动挂载目录/etc/fstab详解
案例:192.168.153.162:/data/ /data/es nfs defaults 0 0
1 2 3 4 5 6 7
- (第1列) 需要挂载或访问的设备路径
- (第2列) 挂载点目录,即访问点
- (第3列) 系统格式(文件系统类型)
blkid 查看文件格式
常见的有
vfat,ntfs,fat32等windows系统格式,
xfs,ext2/3/4 ,等Linux的系统格式,
swap 是指交换分区,
auto 是指让系统自动识别文件的系统类型,一般是用于频繁格式化系统类型的光驱或者是软驱,
udf 刻录光驱,
iso9660 一般为系统镜像光盘
4. (第4列) 对配置挂载点的配置
ro: 以只读来挂载文件系统(read only)
rw: 以可读可写的属性来挂载系统
sync 和 async:对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,通俗点讲,就是当你拷贝一个东西到设备或者分区中时,所有的写入变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
虽然async是默认属性,但是对于u盘,移动硬盘这种可移动存储设备,最好还是让他们使用sync选项。
defaults: 所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。
一般用户没有特殊需求,直接使用defaults就可以了
5. (第5,6列: dump 和 fsck 选项 )
dump是一个备份工具,而fsck是一个文件系统扫描检查工具。
可以用man或者google获得更加详细的信息。
第5列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,一般上dump很多设置为0。
第6列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统 / 对应该字段的值应该为1,其他文件系统应该为2。若文件系统在启动时不需要扫描检查,则设置该字段为0。
以上配置则完成了自动挂载文件的配置
末行wq,保存退出后
执行mount -a , 即可完成挂载。 df -h 对挂载操作进行检查
swapon -a , 是对交换分区的启用挂载。 swapon -s 检查交换分区的情况
6.查看挂载情况
df -h 查看挂载情况。
7.测试NFS能否正常使用
服务器端:192.168.153.159
1.客户端:挂载点上传文件
服务器端:192.168.153.162
2.共享目录查看是否有挂载点上传的文件,有表示NFS可正常使用
二,当服务端修改配置文件后,我们可以不用重启服务,使用exportfs -arv即可生效,当然你也可以重启服务。此时,客户端需要重新挂载一下。
exportfs 命令的使用
-a :全部挂载或者卸载;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录
在使用nfs时,常用一个选项就是 -o nolock
我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中 192.168.153.162:/data/ /data/es nfs nolock,nfsvers=3 0 0 然后 mount -a 即可。
四、在windows客户端挂载
① 打开-控制面板-程序-打开或关闭windows功能-勾选NFS客户端
② 创建挂载点,打开dos命令行进行挂载
方法1:
1).挂载命令
挂载方法: mount IP:/共享目录位置 + 挂载点
卸载方法: umount + 挂载点
2).打开dos窗口Win键+R 输入cmd打开控制台
**如果网络错误85:**更换盘符,盘符被其他硬盘占用了
方法2:
打开我的电脑—》映射磁盘驱动器
我的电脑–>鼠标右键–》映射磁盘驱动器
格式: \\ip\\共享目录
成功如下图
卸载挂载:
五centos7停止NFS相关服务
centos7-关闭 rpcbind 服务
1、关闭 rpcbind 服务
sudo systemctl disable rpcbind
2、关闭开机自启动
sudo systemctl disable rpcbind
3、立即执行关闭
systemctl stop rpcbind.socket
4、 验证是否监听
netstat -anup
关闭NFS
systemctl stop nfs
六.centos7挂载出错故障排除思路:
出错故障排除思路:
① 检查共享目录的配置文件,权限、目录等
② 是否开启了防火墙,如开启了请添加规则放行相应的端口号
③ 如果是云主机,要检查安全组里的规则是否放行端口等
④ 尽量在配置文件中定义使用固定的端口号,便于添加规则
⑤ 错误如下图(原因是windows端经常会使用大的端口号导致的)
案例1:
① windows端常出现的问题:提示网络错误-53
解决方法:
NFS服务器有一个”在非安全模式工作(允许更高的端口号)“的选项。Windows NFS客户端经常使用的是大的端口号。你可以在你的共享项设置中添加insecure选项
例如:/data/xxx *(insecure,rw)
重启服务再次挂载就可以了