共享资源库系统

一、案例分析

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 端口的信息。
  • 通讯步骤:
  1. 首先服务器端启动RPC服务,并开启111端口;
  2. 服务器端启动NFS服务,并向RPC注册端口信息;
  3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口;
  4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端;
  5. 客户端通过获取的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 卸载某一目录
    -vexport是将共享的目录显示在屏幕上
  • 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 定时任务的注事项
  1. 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
  2. 日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
  3. 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径

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点执行一次