NFS是network file sytem的缩写,他最大的特点就是可以通过网络,让不同的机器,不同的系统实现文件共享。NFS客户端可以将NFS服务器共享的目录挂载在本地的文件系统中,访问目录就如同访问自己本地目录一样。
NFS工作原理:
1. 首先NFS服务器端开启rpcbind;
2. 然后服务端开启NFS服务,这时NFS的各项功能都需要向RPC服务注册,这时rpc会通知portmap模块将可用的端口分配给statd,rquotad等;
3. 然后NFS客户端RPC服务就会通过网络向NFS服务端的RPC服务的111端口发出NFS文件存取功能的询问请求。
4. NFS服务端的RPC服务找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务。
5. 此时NFS客户端就可获取到nfs服务端各个进程的正确端口,然后通过客户端rpc就直接与NFS服务器的rpc进行存取数据了(rpc知道了nfs的具体端口,就可以实现远程调用,即传输)。
NFS安装部署:
- nfs服务端:192.178.2.100
- nfs客户端:192.178.2.101
服务器和客户端都关闭防火墙,装好nfs服务组件:
配置网络源
# 安装阿里云的yum源:
cd /etc/yum.repos.d/
mkdir bak && mv *.repo bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
yum install epel-release -y
关闭防火墙:
systemctl stop firewalld && systemctl disable firewalld
临时关闭selinux:
setenforce 0
永久关闭selinux:
sed -i 's/=enforcing/=disabled/' /etc/selinux/config
安装nfs服务组件:
yum -y install nfs-utils
配置服务端:
- 编辑/etc/exports文件
[root@node01 ~]# vim /etc/exports
/data/nfs 192.178.2.0/24(rw,sync)
# 格式:
# /data/jfedu 要共享的目录,需要存在
# 192.168.75.0/24 谁能挂载使用,可以是网段,也可以指定具体ip
# (rw,sync) 挂载的一些参数,rw表示挂载为可读可写,sync表示同步
- 创建/data/nfs文件夹
[root@node01 ~]# mkdir -p /data/nfs
- 导出(广播)编辑的文件,并启动rpc和nfs服务
systemctl start rpcbind
systemctl start nfs
exportfs -r
配置客户端:
可用showmount搜索网络中可用的共享文件
[root@nade02 ~]# showmount -e 192.178.2.100
Export list for 192.178.2.100:
/data/nfs 192.178.2.0/24
创建目录,用于挂载
[root@nade02 ~]# mkdir /mnt/nfs
挂载
[root@nade02 ~]# mount -t nfs 192.178.2.100:/data/nfs /mnt/nfs/
[root@nade02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.7M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.9G 16G 11% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
192.178.2.100:/data/nfs 17G 2.0G 16G 12% /mnt/nfs
#推荐使用:
mount -t nfs -o soft,timeo=1 192.178.2.100:/data/nfs /mnt/nfs
soft: 软挂载,遇到报错会终止挂载,并返回信息,默认是硬挂载,一直尝试挂载。
timeo: 超时时间,如果不设置,一直链接,可以设置小点
挂载完成之后,进入目录,可能会发现无法对目录中的文件进行修改。
这主要是因为客户端访问服务器时,身份被压缩成nobody,相对服务器文件系统来说,就是其他用户。
所以要想编辑,需要在服务端对文件授权或者更改exports文件,设置no_root_squash(不压缩客户端root身份)。
- 解读exports文件:
[root@node01 ~]# exportfs -v
/data/nfs 192.178.2.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
其中:
rw:可读可写
ro:仅可读
sync:是指数据同步写入内存和磁盘
root_squash:如果客户端用root身份访问,则被压缩成nobody,权限也将受到限制。
no_root_squash:也就是不压缩,客户端使用root身份登录,全有所有权限,很危险。
all_squash:不管访问者是什么身份,包括root,全部压缩至匿名用户。
no_all_squash:保留访问用户的身份uid以及gid,一般只能查看,不能修改,权限问题,但是可以强制保存。
报错处理:
客户端挂载时报错bad superblock:
[root@node2 ~]# mount 192.178.2.100:/data/nfs /mnt
mount: wrong fs type, bad option, bad superblock on 192.178.2.100:/data/nfs,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
解决办法:
yum install nfs-utils -y
客户端挂载时报错access denied:
[root@node2 ~]# mount 192.178.2.100:/data/vfs /mnt
mount.nfs: access denied by server while mounting 192.178.2.100:/data/nfs
ps: 客户端IP不在/etc/exports文件中,会报此错。
卸载时报错:
umount.nfs4: /data/nfs: device is busy
# 解决办法:
umount -l /data/nfs 强行解除挂载
或者使用
fuser -m /data/nfs 将会显示使用这个模块的pid
fuser -mk /data/nfs 将会直接kill那个pid
nfs自动挂载技术:
autofs服务程序与mount命令不同之处在于它是一种守护进程,只有检测到用户试图访问一个尚未挂载的文件系统时才自动的检测并挂载该文件系统。
autofs非常方便,主要有两点:
1、设置开机不一定要挂载的目录,当用的时候才实现自动挂载。
2、用户不使用自动挂载的目录一段的时间,会自动卸载。(默认时间为5分钟),可以在autofs.conf
安装autofs服务:
# 在客户端执行以下命令:
yum install autofs -y
编辑/etc/auto.master:
# 添加以下行:
/mnt/nfs /etc/nfs.misc
/mnt/nfs是总的访问目录(客户端的目录) /etc/nfs.misc是对总访问目录的描述,用于子目录的编辑,用户权限分离
编辑nfs.misc:
xiaoming -fstype=nfs,rw,sync 192.178.2.100:/data/nfs
xiaowang -fstype=nfs,ro,sync 192.178.2.100:/data/nfs
启动auofs服务:
systemctl start autofs
验证权限:
## 登录不同目录验证权限:
[root@node4 nfs]# ls
[root@node4 nfs]#
[root@node4 nfs]#
[root@node4 nfs]# cd xiaoming
[root@node4 xiaoming]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 19923968 1986528 17937440 10% /
devtmpfs 231980 0 231980 0% /dev
tmpfs 241808 0 241808 0% /dev/shm
tmpfs 241808 4636 237172 2% /run
tmpfs 241808 0 241808 0% /sys/fs/cgroup
/dev/sda1 508580 114484 394096 23% /boot
tmpfs 48364 0 48364 0% /run/user/0
192.178.2.100:/data/nfs 20128768 2021376 18107392 11% /mnt/nfs/xiaoming