本文共 8682 字,大约阅读时间需要 28 分钟。
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 ~]# getenforcePermissive'永久关闭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 -wrpcuser 17271 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.statdroot 17272 2 0 15:13 ? 00:00:00 [rpciod]root 17282 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.mountdroot 17283 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.idmapdroot 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/passwdnfsnobody: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.20Export 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 -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos_yaoxiaorong-root 17G 1.7G 16G 10% /devtmpfs 478M 0 478M 0% /devtmpfs 489M 0 489M 0% /dev/shmtmpfs 489M 13M 476M 3% /runtmpfs 489M 0 489M 0% /sys/fs/cgroup/dev/sda1 1014M 125M 890M 13% /boottmpfs 98M 0 98M 0% /run/user/0192.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 -ysystemctl enable autofssystemctl 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]# lsabc
4.1shell脚本来搭建nfs服务器
'在服务端运用ssh,使服务端远程访问客户端免密码'[root@yaoxiaorong ~]# ssh-keygen -t rsa[root@yaoxiaorong ~]# ls .sshid_rsa id_rsa.pub[root@yaoxiaorong ~]# ls .sshid_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/bashsetenforce 0sed -ri 's/(SELINUX=).*/\1disabled/g' /etc/selinux/configsystemctl stop firewalldyum install nfs-utils -yyum install rpcbind -ysystemctl start rpcbindsystemctl start nfs-serverecho "/data 192.168.228.21(rw,async)" >/etc/exports && mkdir -p /datachmod 777 /datachown -R nfsnobody.nfsnobody /data/systemctl restart nfs-serverssh 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:/data /mnt && mkdir mnt/123'[root@yaoxiaorong ~]# chmod +x nfs.sh[root@yaoxiaorong ~]# ./nfs.sh
转载于:https://blog.51cto.com/13835001/2155367