NFS
1.1NFS定义:
NFS(Network File System) 网络文件系统,它的工作机制是基于rpc来实现网络文件系统共享的。
1.2NFS作用
'1.通过局域网让不同的主机系统之间可以共享文件或目录
2.节省本地存储空间,本地终端将可以减少自身存储空间的使用
3.用户不需要在网络中的每个机器都建有Home目录,home目录可以放在NFS服务器,可以在网络上被访问
4.减少整个网络上可移动介质设备的数量(存储设备:软驱、COROM、zip(一种高储存密度的磁盘驱动器与磁盘)等可以在网络上被别的机器使用。'
1.3nfs的体系组成
一台nfs服务器
若干台客户机
如图:
2.1RPC
RPC(Remote Procedure Call Protocol),远程过程调用协议,通过网络从远程计算机程序上请求服务,在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC采用客户机/服务器模式。请求程序就是客户机,而服务提供程序就是一个服务器。
2.2NFS系统原理
'Rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器'
'Rpc.mount: 主要功能是管理NFS的文件系统。当客户端顺利通过nfs登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。
它会读取NFS的配置文件/etc/exports来对比客户端权限
Portmap:主要功能是进行端口映射工作’
3.1搭建nfs服务器环境准备
服务器系统 | NFS服务端(nfs-serverA) | NFS客服端(nfs-clientB) |
---|---|---|
Centos | 192.168.228.20 | 192.168.228.21 |
3.2基础环境配置 开启nfs服务之前,必须关闭防火墙
'开机不启动防火墙'
[root@yaoxiaorong ~]# systemctl disable firewalld
'查看firewalld防火墙是否开启'
[root@yaoxiaorong ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-30 08:39:34 HKT; 1 weeks 0 days ago
Docs: man:firewalld(1)
Main PID: 693 (firewalld)
CGroup: /system.slice/firewalld.service
└─693 /usr/bin/python -Es /usr/sbin/firewal...
Jul 30 08:39:28 yaoxiaorong systemd[1]: Starting firew...
Jul 30 08:39:34 yaoxiaorong systemd[1]: Started firewa...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: I...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: b...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: I...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: f...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: I...
Jul 30 08:39:36 yaoxiaorong firewalld[693]: WARNING: r...
Hint: Some lines were ellipsized, use -l to show in full.
'关闭firewalld防火墙'
[root@yaoxiaorong ~]# systemctl stop firewalld.service
关闭selinux防火墙
'Selinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,是linux历史上最杰出的新安全子系统。Selinux默认安装在Fedora和Red Hat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到。强制访问控制(MAC)安全系统,Selinux支持三种模式:'
'#Enforcing:强制模式,代表SElinux运作中,已经正确的开始限制domain/type'
'#Permissive:宽容模式,代表SElinux运作中,不过仅会有警告讯息并不会实际限制domain/type的存取。这种模式可以运来作为selinux的debug只用'
'#Disabled:关闭'
'查看selinux防火墙的状态'
[root@yaoxiaorong ~]# getenforce
Enforcing
'临时关闭selinux防火墙'
[root@yaoxiaorong ~]# setenforce 0
[root@yaoxiaorong ~]# getenforce
Permissive
'永久关闭selinux防火墙,但是必须设置完毕之后重启系统'
[root@yaoxiaorong ~]# vim /etc/selinux/config
*将SELINUX=enforcing修改成---->SELINUX=disabled*
3.3安装NFS-server
'安装nfs服务主程序'
[root@yaoxiaorong ~]# yum install nfs-utils rpcbind -y
3.4启动NFS-Server
'启动rpcbind服务'
[root@yaoxiaorong ~]# systemctl start rpcbind
'加入开机自启动'
[root@yaoxiaorong ~]# systemctl enable rpcbind
'启动nfs服务'
[root@yaoxiaorong ~]# systemctl start nfs-server
'加入开机自启动'
[root@yaoxiaorong ~]# systemctl enable nfs-server
'查看rpc注册信息'
[root@yaoxiaorong ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
查看系统中运行的NFS相关进程
[root@yaoxiaorong ~]# ps -ef |egrep "rpc|nfs"
rpc 17208 1 0 15:09 ? 00:00:00 /sbin/rpcbind -w
rpcuser 17271 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.statd
root 17272 2 0 15:13 ? 00:00:00 [rpciod]
root 17282 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.mountd
root 17283 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.idmapd
root 17293 2 0 15:13 ? 00:00:00 [nfsd4_callbacks]
root 17299 2 0 15:13 ? 00:00:00 [nfsd]
root 17300 2 0 15:13 ? 00:00:00 [nfsd]
root 17301 2 0 15:13 ? 00:00:00 [nfsd]
root 17302 2 0 15:13 ? 00:00:00 [nfsd]
root 17303 2 0 15:13 ? 00:00:00 [nfsd]
root 17304 2 0 15:13 ? 00:00:00 [nfsd]
root 17305 2 0 15:13 ? 00:00:00 [nfsd]
root 17306 2 0 15:13 ? 00:00:00 [nfsd]
root 17332 16143 0 15:16 pts/0 00:00:00 grep -E --color=auto rpc|nfs
3.4配置/etc/exports文件
'/etc/exports' 主配置文件,文件中的项格式相当简单,要共享一个文件系统
nfs主配置文件中的常用选项:
'secure' 缺省项,它使用了1024以下的TCP/IP端口实现NFS的连接,指定insecure可以禁用这个选项
'rw' 允许客户机进行读/写访问
'async' 此选项可以改进性能,但如果没有完全关闭NFS守护进程就重启了NFS服务器,但可能会造成数据丢失
'no_wdelay' 选项关闭延时,如果设置了async,那么NFS就会忽略此选项
'nohide' 若将一个目录挂载到另一个目录之上,则原来的目录通常就被隐藏起来,或看起来像空的一样,要禁用这种行为,需启动hide选项
'no_subtree_check' 此选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查
'no_auth_nlm' 此选项可作为insecure_locks指定,它告诉NFS守护进程不要对锁请求进行认证。若关心安全性问题,就要避免使用此选项,缺省选项是auth_nlm或secure_locks
'mp(mountpoint=path' 通过显式的声明此选项,NFS要求挂载所导出的目录
'fsid=num' 此选项通常在NFS故障恢复时使用
'编辑nfs主配置文件,共享/gongxiang目录至192.168.228.21,可读写'
[root@yaoxiaorong ~]# vim /etc/exports
[root@yaoxiaorong ~]# cat /etc/exports
/gongxiang 192.168.228.21(rw,async)
'创建需要共享的目录'
[root@yaoxiaorong ~]# mkdir -p /gongxiang
'重启nfs服务'
[root@yaoxiaorong ~]# systemctl restart nfs-server
'查看NFS分享出来的目录的完整权限设置值的配置文件'
[root@yaoxiaorong ~]# cat /var/lib/nfs/etab
/gongxiang 192.168.228.21(rw,async,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
'查看65534属于哪个用户'
[root@yaoxiaorong ~]# grep "65534" /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
'递归赋予/gongxiang目录属主nfsnobody'
[root@yaoxiaorong ~]# chown -R nfsnobody.nfsnobody /gongxiang/
'给共享/gongxiang目录权限777'
[root@yaoxiaorong ~]# chmod 777 /gongxiang/
'重启nfs-server服务生效'
[root@yaoxiaorong ~]# systemctl restart nfs-server.service
3.5客户端查看NFS服务器端共享的文件系统
'先安装showmount'
[root@yaoxiaorong ~]# yum install showmount -y
[root@yaoxiaorong ~]# showmount -e 192.168.228.20
Export list for 192.168.228.20:
/gongxiang 192.168.228.21
3.6挂载NFS文件系统
[root@yaoxiaorong ~]# mount -t nfs 192.168.228.20:/gongxiang /mnt
[root@yaoxiaorong ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_yaoxiaorong-root 17G 1.7G 16G 10% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 13M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.228.20:/gongxiang 5.0G 1.6G 3.5G 31% /mnt
永久挂载
'开机自动挂载nfs:编辑/etc/fatab文件,添加如下格式的内容:'
192.168.228.20:/gongxiang /mnt nfs defautls 0 0
客户端卸载
[root@yaoxiaorong ~]# umount /mnt
'注意:卸载的时候如果提示“umount.nfs: /mnt: device is busy'
1.退出挂载目录在卸载
2.NFS Server 宕机,强制卸载umount -lt /mnt mount -a
自动挂载
自动挂载服务autofs,挂载方式如下两种:
直接:direct /-子配置文件必须写本地绝对路径
间接:indirect /path子配置文件写相对于/path的子目录
客户端安装autofs自动挂载
yum install autofs -y
systemctl enable autofs
systemctl start autofs
直接挂载方式:本地的挂载点要写绝对路径
名称后缀必须是autofs,/-代表这是一个直接挂载定义,根据/etc/auto.nfs_direct进行挂载全写
[root@yaoxiaorong ~]# vim /etc/auto.master.d/nfs.autofs
/- /etc/auto.nfs_direct
填写挂载配置
[root@yaoxiaorong ~]# vim /etc/auto.nfs_direct
/mnt -rw,sync,soft 192.168.228.20:/data
重启autofs服务
[root@yaoxiaorong ~]# systemctl restart autofs
[root@yaoxiaorong ~]# mount
/etc/auto.nfs_direct on /mnt type autofs (rw,relatime,fd=18,pgrp=16781,timeout=300,minproto=5,maxproto=5,direct,pipe_ino=43596)
192.168.228.20:/data on /mnt type nfs4 (rw,relatime,sync,vers=4.1,rsize=131072,wsize=131072,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.228.21,local_lock=none,addr=192.168.228.20)
3.8客户端在共享的目录中创建文件,服务端查看是否能创建目录
'客户端:'
[root@yaoxiaorong ~]# cd /mnt
[root@yaoxiaorong mnt]# touch abc
'服务端:'
[root@yaoxiaorong ~]# cd /gongxiang/
[root@yaoxiaorong gongxiang]# ls
abc
4.1shell脚本来搭建nfs服务器
'在服务端运用ssh,使服务端远程访问客户端免密码'
[root@yaoxiaorong ~]# ssh-keygen -t rsa
[root@yaoxiaorong ~]# ls .ssh
id_rsa id_rsa.pub
[root@yaoxiaorong ~]# ls .ssh
id_rsa id_rsa.pub
[root@yaoxiaorong ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.228.21
[root@yaoxiaorong ~]# vim nfs.sh
#!/bin/bash
setenforce 0
sed -ri 's/(SELINUX=).*/\1disabled/g' /etc/selinux/config
systemctl stop firewalld
yum install nfs-utils -y
yum install rpcbind -y
systemctl start rpcbind
systemctl start nfs-server
echo "/data 192.168.228.21(rw,async)" >/etc/exports && mkdir -p /data
chmod 777 /data
chown -R nfsnobody.nfsnobody /data/
systemctl restart nfs-server
ssh root@192.168.228.21 'yum install showmount -y'
ssh root@192.168.228.21 'showmount -e 192.168.228.20'
ssh root@192.168.228.21 'mount -t nfs 192.168.228.20:/dat
a /mnt && mkdir mnt/123'
[root@yaoxiaorong ~]# chmod +x nfs.sh
[root@yaoxiaorong ~]# ./nfs.sh