一、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和权限之间是不能有空格的,否则会有报错提示。
其他:
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默认端口
协议端口: 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服务相关端口 先看一下目前所使用的的端口情况
rpcinfo -p localhost
# 在配置文件中添加以下5行内容,其他的保持不动
# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
systemctl restart nfs && systemctl restart rpcbind
2.nfsd 端口修改
** 1).停止NFS
service nfs stop
2).在ROOT用户下修改文件 >vim /etc/services
三,客户端挂载目录。
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 重启生效(禁用防火墙)
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 即可。
|