共享资源库系统
一、案例分析
1、规划节点
IP | 主机名 | 节点 |
192.168.235.128 | FTP | FTP 服务器、NFS 客户端 |
192.168.235.129 | NFS | NFS 服务器 |
2、基础准备
- 使用 CentOS 7 镜像
3、案例需求
- 创建 FTP 虚拟用户六个
- 权限设置为只有下载权限,没有上传权限,最大带宽为 60KB
- 新建磁盘挂载在 NFS 的共享目录上,每晚增量备份共享数据,放到
/backup/weekbackup
目录下
二、FTP 服务
1、什么是 FTP
FTP(File Transfer Protocol) 文件传输协议,进行可靠的网络文件共享。
2、FTP 原理
- FTP 是 C/S 架构的服务,拥有一个服务器端和客户端
- 底层使用 TCP 协议来作为传输协议,所以是可靠的文件传输协议
- FTP 提供 20 和 21 两个端口:
20 号端口为 数据端口,提供数据之间的传输
21号端口为 命令端口,提供命令之间的传输 - FTP 服务端与客户端连接的主动模式:
① FTP 客户端随机开放一个大于1024的端口 N 向服务端的21号端口发送密码和用户名并开放 N+1 端口监听服务端指示,服务端确认用户名密码是否正确;
② 若正确,客户端则使用 N+1 端口向服务端的 21 端口发送 PORT N+1 命令,告诉服务器客户端使用了主动模式并开放了端口。
③ 服务器接收 PORT 命令后,开启 20 端口向客户端 N+1 端口发送数据,进行数据传输。 - FTP 服务端与客户端相连的被动模式:
① FTP 客户端随机开放一个大于1024的端口 N 向服务端的21号端口发送密码和用户名并再次开放 N+1 端口监听服务端指示,服务端确认用户名密码是否正确;
② 若正确,客户端则使用 N+1 端口向服务端的 21 端口发送 PASV 命令,告诉服务器客户端使用了被动模式。
③ 服务器收到命令后,会开放一个大于 1024 的端口 P 进行监听,然后使用 PORT P 命令通知客户端,自己的数据端口是 P。
④ 客户端收到命令后,会通过 N+1 端口连接端口 P,然后实现数据传输。
3、FTP 状态码
1)1xx – 肯定的初步答复。
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
- 110 重新启动标记答复。
- 120 服务已就绪,在 nnn 分钟后开始。
- 125 数据连接已打开,正在开始传输。
- 150 文件状态正常,准备打开数据连接。
2)2xx – 肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。
- 200 命令确定。
- 202 未执行命令,站点上的命令过多。
- 211 系统状态,或系统帮助答复。
- 212 目录状态。
- 213 文件状态。
- 214 帮助消息。
- 215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。
- 220 服务就绪,可以执行新用户的请求。
- 221 服务关闭控制连接。如果适当,请注销。
- 225 数据连接打开,没有进行中的传输。
- 226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
- 227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
- 230 用户已登录,继续进行。
- 250 请求的文件操作正确,已完成。
- 257 已创建“PATHNAME”。
3)3xx – 肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。
- 331 用户名正确,需要密码。
- 332 需要登录帐户。
- 350 请求的文件操作正在等待进一步的信息。
4)4xx – 瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。
- 421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
- 425 无法打开数据连接。
- 426 Connection closed; transfer aborted.
- 450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。
- 451 请求的操作异常终止:正在处理本地错误。
- 452 未执行请求的操作。系统存储空间不够。
5)5xx – 永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。
- 500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
- 501 在参数中有语法错误。
- 502 未执行命令。
- 503 错误的命令序列。
- 504 未执行该参数的命令。
- 530 未登录。
- 532 存储文件需要帐户。
- 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
- 551 请求的操作异常终止:未知的页面类型。
- 552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
- 553 未执行请求的操作。不允许的文件名。
6)常见的 FTP 状态代码及其原因
- 150 – FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
- 226 – 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
- 230 – 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
- 331 – 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
- 426 – 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
- 530 – 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
- 550 – 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。
4、FTP 客户端
1)vsftpd 的部署与安装
- 通过 yum 源安装 vsftp:
# yum install vsftpd tenet
# systemctl start vsftpd //启动服务
# netstat -lntp | grep 21 //查看端口是否监听
# systemctl stop firewalld
# setenforce 0
2)配置全局配置文件
# cd /etc/vstpd
# cp vstpd.conf vstpd.conf_bak
# egrep -v '^#|^$' vsftpd.conf_bak //忽略井号和$符并且输出
# egrep -v '^#|^$' vstpd.conf_bak > vsftpd.conf //将大约号前的内容完全重定向到 conf
3)全局配置项说明:
`listen=YES`:是否以独立的运行方式监听服务
listen_address=IP
:设置监听的地址
listen_port=21
:设置监听 FTP 服务的端口号
write_enable=YES
: 是否启用写入权限
download_enable=YES
: 是否允许下载文件
userlist_enable=YES
: 是否启用 user_list 列表文件,user_list 中的用户名不可用
userlist_deny=YES
:是否禁用 user_list 中的用户
max_clients=0
: 限制并发客户连接数
max_per_ip=0
:限制同一ip地址的并发连接数
guest_enable=YES
启用虚拟用户
use_config_dir=/etc/vsftpd/vsftpd_user_conf
:虚拟用户使用的配置文件目录
allow_writeable_chroot=YES
:允许写入用户主目录
anonymous_enable=YES
:启用匿名访问
anon_umask=022
:匿名用户所上传文件的权限掩码,即777-022=755
anon_root=/var/ftp
:匿名用户的FTP根目录
anon_upload_enable=YES
:允许上传文件
anon_mkdir_write_enable=YES
:允许创建目录
anon_other_write_enable=YES
:开放其他写入权限
anon_max_rate=0
:限制最大传输速率(字节/每秒)
4)常用的本地用户 FTP 配置项:
ocal_enable=YES
:是否启用本地系统用户
local_umask=022
:本地用户所上传文件的权限掩码
local_root=/var/ftp
:设置本地用户的 FTP根目录
chroot_local_user=YES
:是否将用户禁锢在主目录
5)虚拟用户配置
- 创建账号数据
vsftpd 服务使用 Berkeley DB 格式的数据库文件来存放虚拟用户账号。建立这种数据库文件需要 db_load,基本格式如下:-f
用于指定数据源文件-T
允许非 Berkeley DB 的文件可以转换为 DB 数据文件-t hash
用于指定读取数据文件的基本方法
# vim /etc/vsftpd/users.conf //创建文本格式的用户名秘密列表,奇数行为用户名,偶数行是密码
[写入如下]
zhangsan
1
[精致的结尾]
# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db
# chmod 600 users.db //保证账号文件的安全性
- 创建 FTP 根目录以及虚拟用户映射的系统用户
------ 该账号不需要设置密码和登录 shell
# useradd vsftpd -s /sbin/nologin -d /home/vsftpd
# mkdir -p /home/vsftpd/xmcsxy
# chmod -R 755 /home/vsftpd
- 建立支持虚拟用户的 PAM 认证文件
创建好虚拟用户的账号数据文件后,还需要对vsftpd服务的配置做相应的调整,以便识别并读取新的用户信息。
在vsftpd服务器中,用户认证是通过PAM(Pluggable Authentication Module,可插拔认证模块)机制来实现的,该机制包含灵活的选择认证方式。Vsftpd服务默认的PAM认证文件位于/etc/pam.d/vsftpd,该文件适用于以Linux主机的系统用户账号进行认证。若要读取虚拟用户的账号数据文件,则需要创建新的PAM认证配置。
# vi /etc/pam.d/vsftpd
[在第三行添加如下]
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
[精致的结尾]
- 添加虚拟用户支持
# vim /etc/vsftpd/vsftpd.conf //在主配置文件配置虚拟用户支持
[配置内容如下]
anonymous_enable=NO //禁止匿名用户登录,增加下面的参数
chroot_local_user=YES //禁止用户访问除主目录以外的目录
guest_enable=YES //启用虚拟用户
allow_writeable_chroot=YES //允许写入用户主目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf //虚拟用户使用的配置文件目录
[精致的结尾]
# mkdir -p /etc/vsftpd/vsftpd_user_conf
# cd !$
# vim zhangsan //各个用户的配置文件
[配置内容如下]
local_root=/home/vsftpd/xmcsxy //当本地用户登录时,将被更改到定义的目录下,默认是 /var/ftp/
anon_upload_enable=YES //是否允许登陆用户有上传权限
write_enable=YES //是否允许登陆用户有写权限
- 重启服务并测试
# systemctl restart vsftpd
# systemctl enable vsftpd //出现以下内容为成功
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
# 关闭防火墙和selinux
# cd /home/vsftpd/xmcsxy/
# touch a.txt
nfs# yum -y install lftp
nfs# lftp zhangsan@192.168.235.128
Password:
lftp zhang2@192.168.235.128:~> ls
ls: Login failed: 530 Login incorrect. //不行就重装,还可以查看 /var/log/secure 的错误日志
LFTP 内部命令:
- ls 显示远端文件列表
- cd 切换目录
- get 下载远端文件
- mget 下载远端文件
- pget 使用多线程下载远端文件
- mirror 下载/上传(mirror -R)/同步 整个目录
- put 上传文件
- mput 上传多个文件,支持通配符
- mv 移动远端文件
- rm 删除远端文件
- mrm 删除多个远端文件,支持通配符
- mkdir 建立远端目录
- rmdir 删除远端目录
- pwd 显示目前远端所在目录(lpwd 显示本地目录)
- du 计算远程目录的大小
- ! 执行本地 shell 的命令(由于 lftp 没有 lls ,故用 !ls 来代替)
- lcd 切换本地目录
- lpwd 显示本地目录
- alias 定义别名
- bookmark 设定书签
- exit 退出 ftp
三、NFS 服务
1、什么是 NFS
- 通过网络将不同操作系统共享彼此的文件。
- NFS 服务器可以将共享目录挂载到本地的文件系统中,在本地端的系统来看就像自己的本地的一样
- NFS 通过网络传输,NFS 服务器的端口开在 2049 以上,但由于文件系统较为复杂,NFS 其他程序需要开额外的随机端口,客户端同过**远程过程调用(Remote Procedure Call)**来知道是那些额外端口。
2、RPC 与 NFS 如何通讯
- RPC 用来统一管理 NFS 端口的服务,并且统一对外的端口是 111,RPC 会记录 NFS 端口的信息。
- 通讯步骤:
- 首先服务器端启动RPC服务,并开启111端口;
- 服务器端启动NFS服务,并向RPC注册端口信息;
- 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口;
- 服务端的RPC(portmap)服务反馈NFS端口信息给客户端;
- 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
3、NFS 部署
检查环境和配置 NFS 所需的环境
# uname -a // 查看是不是 centos 7
# hostnamectl set-hostname nfs
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# yum -y install nfs-utils rpcbind // 安装所需要的依赖包,两台都要
# id nfsnobody //查看 nsfnobody 用户是否存在,有内容输出即为存在,两台都要
# systemctl start rpcbind //启动服务,两台都要
# systemctl enable rpcbind //启动服务,两台都要
# netstat -tnulp|grep rpc //查看端口
# rpcinfo -p localhost(注:这里nfs服务没启动,看不到nfs端口的映射情况)
# systemctl start nfs 启动 nfs 服务 ,两台都要
# systemctl enable nfs
# netstat -ntplu |grep rpc
# rpcinfo -p localhost
NFS 配置
1)创建共享目录
# mkdir /data
# mkdir /data/public
# mkdir /data/test
# mkdir /data/linux
2)共享目录权限
# chown -R nfsnobody.nfsnobody /data
# chmod 755 -R /data
3)编辑配置文件
# vi /etc/exports
[配置内容如下]
/tmp *(rw,no_root_squash)
/data/public 192.168.100.0/24(rw)
/data/test 192.168.100.11(rw)
/data/linux *.xmcsxy.com(rw,all_squash,anonuid=40,anongid=40)
[精致的结尾]
4)nfs 配置文件 /etc/exports
的格式:
NFS 共享目录 NFS 客户端地址(参1,参2,....)
NFS 共享目录2 NFS 客户端地址2(参1,参2,....)
.......
- NFS 共享的常用参数:
ro
只读访问rw
读写访问sync
所有数据在请求时写入共享l async NFS在写入数据前可以相应请求secure
NFS通过1024以下的安全TCP/IP端口发送insecure
NFS通过1024以上的端口发送subtree_check
如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)no_subtree_check
和上面相对,不检查父目录权限all_squash
共享文件的UID和GID映射匿名用户anonymous,适合公用目录。no_all_squash
保留共享文件的UID和GID(默认)root_squash
root用户的所有请求映射成如anonymous用户一样的权限(默认)no_root_squash
root用户具有根目录的完全管理访问权限anonuid=xxx
指定NFS服务器/etc/passwd文件中匿名用户的UID
5)生效配置与检验测试
------- 重新加载 nfs 服务生效配置的方法------
# systemctl restart nfs //方法 1
# exportfs -rv //方法 2
# showmount -e localhsot //检查权限挂载服务器能否挂载,输出内容如下:
/tmp *
/data/linux *.xmcsxy.com
/data/public 192.168.100.0/24
/data/test 192.168.100.11
- exportfs 命令可以在不直接修改 /etc/exports 文件的情况下操作该文件具体参输数如下:
-a
全部挂载/etc/exports
文件内的设定-r
重新挂载exports
中的设定,此外同步更新exports
和/var/lib/nfs/xtab
中的内容-u
卸载某一目录-v
在export
是将共享的目录显示在屏幕上 - showmount 命令的参数如下:
-a或–all 以 host:dir 这样的格式来显示客户主机名和挂载点目录
-d或–directories 仅显示被客户挂载的目录名
-e或–exports 显示NFS服务器的输出清单。
四、定时计划与备份
1、 crond 服务介绍
- crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似。
- Linux下的任务调度分为两类:
① 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc/crontab文件,这个就是系统任务调度的配置文件。
② 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:minute hour day month week command
各个字段的含义:
- minute:表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
- 在以上各个字段中,还可以使用以下特殊字符:
- 星号(*):代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“3-6”表示“3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如在hour字段中“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
2、使用 contab
- 安装 contab
# yum install -y crontabs
# systemctl status crond
# systemctl start crond
- crontab 命令常用选项和功能:
-u
用来设定某个用户的 crontab 服务,如 “ -u demo" 表示设备 demo 用户的 contab 服务,此选项一般由 root 用户执行-e
编辑某个用户的 crontab 文件内容。如果不指定用户,则为 root-l
显示某用户的 crontab 文件内容,默认当前-r
从 /var/spool/cron 删除某用户的 crontab 文件,默认当前用户-i
在删除用户的 crontab 文件时,给确认提示
-------例如--------
# crontab -e //进入编辑页面
[配置如下内容]
*/5 * * * echo "11" >> /opt/test //每隔 5 分钟向 test 文件里面写入一行 11
# crontab -l //列出 crontab 文件
- 书写 crontab 定时任务的注事项
- 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
- 日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
- 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。
3、备份脚本
- 备份软件用 rsync ,可以实现增量备份和远传输的工具。基本选项如下:
-v
显示备份过程-P
显示文件传输的进度信息-n
测试传输-a
归档传输,递归传输保持文件属性-r
递归到目录中-t
保持 mtime 属性,任何时候都要加-o
保持属主属性-g
保持属组属性-p
保持权限,但不包括特殊权限-D
拷贝设备文件和特殊文件-l
拷贝软连接本身-z
传输时压缩提高效率
# vi /usr/local/sbin/backup.sh
[配置如下内容]
a=`date '+%Y%m%d'`
b=/backup/weekbackup
c=/var/log/backup.log
pname=$(rpm -qa | grep rsync)
#判断rsync是否存在
if [ $? -eq 0 ]
then
echo "软件包rsync已经安装。"
else
echo "软件包rsync没有安装"
yum -y install rsync >> /dev/null
if [ $? -eq 0 ];then
echo "安装rsync完成。"
else
echo "安装rsync失败。"
fi
fi
#判断备份目录是否存在,并增量备份。
if [ ! -d "$b" ];then
mkdir -p $b
echo "$a Backup File missing!" >> /var/log/backup.log
rsync -rvz /data/* $b/$a
else
rsync -rvz /data/* $b/$a
if [ -d $b/$a ];then
echo "$a Backup success." >> /var/log/backup.log
find $b -mtime +14 | xargs rm -rf
else
echo "$a Backup failed." >> /var/log/backup.log
fi
fi
[精致的结尾]
# chmod 755 /usr/local/sbin/backup.sh //脚本添加可执行权限:
# crontab -e //添加定时任务:(每7天凌晨1点执行一次脚本)
[配置内容如下]
* 1 */7 * * sh /usr/local/sbin/backup.sh
[精致的结尾]
五、案例实施
- 给 NFS 节点挂载一个磁盘
- 基础搭建
# hostnamectl set-hostname ftp
# hostnamectl set-hostname nfs
-----关闭防火墙及安全规则----------
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
1、FTP 部署
1)环境搭建
# yum -y install vsftpd
------启动ftp并设置开机自启----------
# systemctl start vsftpd
# systemctl enable vsftpd
2)创建虚拟用户账号(zhang1-3)
# vi /etc/vsftpd/users.conf
[配置内容如下]
zhang1
1
zhang2
1
zhang3
1
[精致的结尾]
# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db //创建 DB 库文件
# chmod 600 /etc/vsftpd/users.db
3)配置虚拟用户的独立文件
# cd /etc/vsftpd/vsftpd_user_conf/
# vi zhang1
[配置内容如下]
local_root=/home/vsftpd/xmcsxy/yumwei #本地家目录路径
write_enable=YES
anon_upload_enable=NO
anon_max_rate=60000
[精致的结尾]
。。。。。zhang2 zhang3 亦是如此
4)重启生效配置文件
# systemctl restart vsftpd
# systemctl status vsftpd
# netstat -lntp | grep 21
tcp6 0 0 :::21 :::* LISTEN 18750/vsftpd
2、NFS 部署
1)环境搭建
# uname -a //检查环境(两台都需要)
# yum -y install nfs-utils rpcbind //安装nfs依赖包(两台都需要)
# id nfsnobody //查看nfsnobody用户在不在(两台都需要)
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
2)启动nfs相关服务(两台都需要)
# systemctl start rpcbind //启动rpc服务
# systemctl enable rpcbind
# systemctl start nfs //启动nfs服务
# systemctl enable nfs
[root@ftp ~]# netstat -lntp | grep rpc //查看rpc端口
tcp 0 0 0.0.0.0:34875 0.0.0.0:* LISTEN 19141/rpc.statd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 19162/rpc.mountd
tcp6 0 0 :::48860 :::* LISTEN 19141/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 19162/rpc.mountd
查看端口映射情况: rpcinfo -p localhost(注:这里nfs服务没启动,看不到nfs端口的映射情况)
3)磁盘挂载
-------在VMware中添加一个新的磁盘并重启虚拟机---------
# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
# mkfs.ext4 /dev/sdb1 //格式化磁盘
# rm -rf /data //删掉原有的/data路径
# mkdir /data //创建共享目录
[root@nfs ~]# vi /etc/fstab //在/etc/fstab增加挂载
[增加内容如下]
/dev/sdb1 /data ext4 defaults 0 0
[精致的结尾]
[root@nfs ~]# mount -a
[root@nfs ~]# df -h //查看是否挂载成功
4)配置共享目录
vi /etc/exports
[配置内容如下]
/data 192.168.235.0/24(rw,no_root_squash,async) #分配no_root_squash权限
[精致的结尾]
5)生效配置与检验
# exportfs -rv
exporting 192.168.235.0/24:/data
# showmount -e localhost
Export list for localhost: /data 192.168.235.0/24
# showmount -e 192.168.235.129 #检测nfs共享目录创建成果
Export list for 192.168.100.12: /data 192.168.100.0/24
6)【报错】
1. clnt_create: RPC: Program not registered
以此关闭nfs和rpcbind命令:
# /etc/init.d/nfs stop
# /etc/init.d/rpcbind stop
再依次启动服务,命令:(注意先启动rpc)
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
2. clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
原因:nfs 服务的防火墙没关
7)调试检验成果
ftp# vim /etc/fstab
[配置内容如下]
192.168.100.12:/data /home/vsftpd/xmcsxy nfs defaults 0 0
[精致的结尾]
ftp# mount -a
ftp# df -h
8)创建对应 FTP 虚拟用户的家目录
ftp# mkdir yumwei
ftp# mkdir zhang2
ftp# mkdir zhang3
------------- NFS 节点查看-------------
# ls data
lost+found yumwei zhang2 zhang3
9)测试虚拟用户登录
# yum -y install lftp
# lftp zhang1@192.168.235.128
password:
lftp zhang1@192.168.235.128:~>ls
lftp zhang1@192.168.235.128:/>
3、shell 备用数据及定时计划
[root@nfs ~]# vi /usr/local/sbin/backup.sh
a=`date '+%Y%m%d'` #定义时间
b=/backup/weekbackup #定义备份目录路径
c=/var/log/backup.log #定义输出日志路径
pname=$(rpm -qa | grep rsync) #定义rsync安装包检查
#判断rsync是否存在
if [ $? -eq 0 ]
then
echo "软件包rsync已经安装。"
else
echo "软件包rsync没有安装"
yum -y install rsync >> /dev/null
if [ $? -eq 0 ];then
echo "安装rsync完成。"
else
echo "安装rsync失败。"
fi
fi
#判断备份目录是否存在,并增量备份。
if [ ! -d "$b" ];then
mkdir -p $b
echo "$a Backup File missing!" >> /var/log/backup.log
rsync -rvz /data $b/$a
else
rsync -rvz /data $b/$a
if [ -d $b/$a ];then
echo "$a Backup success." >> /var/log/backup.log
find $b -mtime +14 | xargs rm -rf
else
echo "$a Backup failed." >> /var/log/backup.log
fi
fi
---------------测试脚本执行过程结果---------
[root@nfs ~]# sh -x /usr/local/sbin/backup.sh
定时计划:
[root@nfs ~]# crontab -e
* 21 */7 * * sh /usr/local/sbin/backup.sh #每7天晚上21点执行一次