NFS网络共享文件
网络文件系统,英文Network File System(NFS),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。多个服务器之间需要共享文件,通过NFS服务共享是一个简单的方法。
一、(可选)NFS服务端准备
1、在NFS新挂载一块硬盘,或新建一个目录
2、将硬盘分区及格式化
fdisk /dev/sdb
#输入n,然后一路默认最后输入w,完成分区
#然后格式化
mkfs.xfs /dev/sdb1
#然后挂载到目录
mkdir -p /nfs-data;
mount /dev/sdb1 /nfs-data
#将下面信息写入/etc/fstab文件,让系统开启自动挂载
/dev/sdb1 /nfs-data xfs defaults 0 0
3、查看是否挂载成功
df -h
二、安装NFS组件
在当做NFS服务端和客户端的主机上都安装NFS组件
yum install -y nfs-utils
#其实还需要rpcbind组件的,不过安装nfs-utols的时候回自动连带安装了
#设置开机启动,关闭防火墙
systemctl enable rpcbind.service;
systemctl enable nfs-server.service
systemctl stop firewalld
三、配置主机
服务端编辑/etc/exports
文件,配置哪些主机可以使用
/nfs-data 192.168.136.0/24(rw,sync,no_root_squash,no_wdelay)
#第一部分/nfs-data是要共享的目录
#第二部分192.168.136.0/24是有权限使用共享目录的地址段,也可以直接写一些IP地址,例如192.168.136.10(rw,sync,no_root_squash,no_wdelay) 192.168.136.20(rw,sync,no_root_squash,no_wdelay)
#第三部分是具体权限:
#rw表示可读写,ro只读
#sync :同步模式,内存中数据实时写入磁盘;
#async :不同步,数据在内存中,定期写入磁盘
#no_root_squash :加上这个选项后,root用户就会对共享的目录像是对本机的目录一样拥有最高权限。
#root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限
#all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份
#anonuid=xxx/anongid=xxx :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid
- NFS常用挂载选项
ro 只读访问
rw 读写访问
sync 同步写数据
async 异步写入数据
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,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
四、启动服务
#服务端两个都需要启动
systemctl start rpcbind
systemctl start nfs
#客户端只需要启动rpcbind即可
systemctl start rpcbind
#查看NFS服务器启动是否成功
rpcinfo -p
#查看主机对外共享的目录以及客户端ip段信息
showmount -e <需要查看的服务端ip>
五、挂载NFS服务器
在客户端挂载NFS服务器
mkdir /data
mount -t nfs 192.168.136.183:/nfs-data /data
# 可以df -h看一下挂载情况,也可以本地写入文件,去服务端查看一下是否同步成功
六、autofs自动挂载(针对client端)
1、(不推荐)方式一
通过系统配置 /etc/fstab
自动挂载
server_IP:/remote_dir /local_dir nfs defaults 1 1
例如:
192.168.56.101:/home/shareStoreDir /home/shareStoreDir nfs defaults 0 0
- 第1个1表示备份文件系统,第2个1表示从/分区的顺序开始fsck磁盘检测,0表示不检测。
- 这种方法不推荐,尝试过程中发现开机很慢,而且开机后并没有挂载成功。
- 后查找原因是开机时,系统还没有完全完成所有服务的启动,包括网络服务:network。
- 在网络无法连入时试图mount NFS当然会失败
2、(不推荐)方式二
开机自动挂载:在/etc/rc.d/rc.local
文件中添加记录
添加开机启动脚本
mount -t nfs -o nolock hostname(orIP):/directory /mnt
还是会遇到上面开机后并没有挂载成功的问题,供解决方法可以休眠几秒后尝试
命令修改为:
sleep 5;mount -t nfs xx.xx.xx.xx:/home /mnt/nfs
3、(推荐)开机自动挂载 autofs
NFS客户端在获取数据时与NFS服务器进行连接,而在没有获取数据的时间内,自动的断开与NFS服务器之间的连接,这就是NFS的自动挂载技术。
注: 只有cd /tmp/a/nfs 进去, 触发一下,才能自动挂载。 另外 nfs目录,不能提前创建,自动挂载时,系统自动创建nfs目录。
1)安装autofs
yum install -y autofs
# 启动并设置开机自启
systemctl start autofs.service
systemctl enable autofs.service
2)主要有两个配置文件
/etc/auto.master: 文件定义本地挂载点
/etc/auto.xxx 配置文件是用来设置需要挂载的文件系统类型和选项(这个文件可以自己指定,只要和auto.master中的配置文件名称对应即可)
3)auto.master
文件
该文件定义本地挂载点
-
/data
:是要挂载的本地目录,我们在向NFS服务器发送请求信号时,一定要在这个目录下面进行操作,否则是无效的。 -
/etc/auto.nfs
:是一个配置 NFS服务器共享文件的路径,及本地在/data
目录中要与远程共享文件挂载的目录及权限,在auto.nfs
文件中还要详细说明 –-timeout=60
:指NFS客户端在多久没有向NFS服务器请求数据时断开挂载连接。
- 如果一个NFS服务器上有许多的客户端一直连接的话,NFS服务器会承受很大的带宽压力,这对NFS服务器的正常使用会造成很大的影响,因此,为了解决这一弊端,可以设定超时时间
4)auto.nfs
文件
该文件不是系统文件,由用户自定义,格式参考auto.misc
,后缀可以随意修改,但必须和auto.master
文件中保持一致。设置需要挂载的文件系统类型和选项
5)重启autofs
systemctl restart autofs.service
6)强烈建议
- 在
auto.master
文件中的本地要挂载的本地目录,必须为空目录,否则在systemctl stop autofs.service
时,会出现问题。 - 如果本地要挂载的本地目录不为空目录,stop以后,目录下原始数据就会被挂载覆盖。autofs会自动把配置文件挂载在
本地要挂载的本地目录
mount # 可查看所有挂载情况