zoukankan      html  css  js  c++  java
  • 第三章 rsync 命令详解和实战用法

    一、rsync传输模式

    1.本地模式
    2.远程模式
    3.守护进程模式

     

    二、守护进程模式

    1.安装rsync
    [root@backup ~]# yum -y install rsync

    2.配置rsync
    [root@backup /backup]# vim /etc/rsyncd.conf
    uid = rsync
    gid = rsync
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = welcome to oldboyedu backup!
    path = /backup

    3.创建用户
    [root@backup ~]#useradd rsync -s /sbin/nologin -M

    4.创建虚拟用户的密码文件
    [root@backup ~]#echo "rsync_backup:123456" > /etc/rsync.passwd

    [root@backup ~]#chmod 600 /etc/rsync.passwd

    5.创建文件目录
    [root@backup ~]#mkdir /bachup

    [root@backup ~]#chown -R rsync:rsync /backup

    6.启动服务
    [root@backup ~]# systemctl start rsyncd

    7.客户端验证
    [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
    [root@web01 ~]# rsync -avz file1 rsync_backup@172.16.1.41::backup

     

    三、守护进程语法

    1.pull拉取数据命令
    #语法
    rsync [OPTION...] [USER@]HOST::SRC... [DEST]

    #示例:
    拉取rsync备份服务的"backup模块"数据至本地/mnt目录
    [root@nfs01 ~]# rsync -avz rsync_backup@192.172.16.1.41::backup /mnt/
    rsync #命令
    -avz #选项
    rsync_backup #远程主机用户(虚拟用户)
    192.172.16.1.41 #远程主机地址
    ::backup #远程主机模块(不是目录)
    /mnt/ #将远程主机数据备份至本地什么位置

    #注意:
    如果是拉取数据,远端服务器源数据目录权限可以为任意权限


    2.push推送数据命令
    #语法
    rsync [OPTION...] SRC... [USER@]HOST::DEST

    #示例
    将本地/mnt目录推送至rsync备份服务器的backup模块
    [root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup
    rsync #命令
    -avz #选项
    /mnt/ #本地文件
    rsync_backup #远程主机用户(虚拟用户)
    192.172.16.1.41 #远程主机地址
    ::backup #远程主机模块(不是目录)

    #注意:
    如果是推送数据,远端接收文件的目录权限必须是rsync权限

     

    四、rsync常见报错

    1.#报错一:
    [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backu ./
    @ERROR: Unknown module 'backu'

    #原因:
    模块名字与服务端配置没有对应

    2.#报错二:
    [root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
    sending incremental file list
    rsync: failed to write xattr user.rsync.%stat for "." (in backup): Permission denied (13)
    rsync: failed to set times on "." (in backup): Operation not permitted (1)
    ./

    sent 176 bytes received 205 bytes 762.00 bytes/sec
    total size is 0 speedup is 0.00
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

    #原因:
    1)权限不足,服务端目录权限过高
    2)selinux

    3.#报错三:
    [root@web01 ~]# rsync -avz /tmp/ rsync_back@172.16.1.41::backup
    @ERROR: auth failed on module backup

    #原因:
    1)拟用户错误
    2)码错误
    3)码文件权限不是600
    4)务端密码文件不存在

    4.#报错四
    [root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::/backup
    ERROR: The remote path must start with a module name not a /

    #原因:
    守护进程模式::后面跟的是模块名字,而不是目录名字

    5.#报错五
    [root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
    rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)
    rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

    #原因:
    服务端服务没有启动

    6.#报错六
    [root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
    rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

    #原因:
    防火墙开启

    7.#报错七
    [root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
    @ERROR: chdir failed

    #原因:
    服务端文件目录不存在

     

    五、rsync命令选项

    1.常用选项
    -a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
    -v #详细模式输出, 打印速率, 文件数量等
    -z #传输时进行压缩以提高效率
    -r #递归传输目录及子目录,即目录下得所有目录都同样传输。
    -t #保持文件时间信息
    -o #保持文件属主信息
    -p #保持文件权限
    -g #保持文件属组信息
    -l #保留软连接
    -P #显示同步的过程及传输时的进度等信息

    -D #保持设备文件信息
    -L #保留软连接指向的目标文件
    -e #使用的信道协议,指定替代rsh的shell程序
    --exclude=PATTERN #指定排除不需要传输的文件模式
    --exclude-from=file #文件名所在的目录文件
    --partial #断点续传
    --password-file=xxx #使用密码文件

    2.限速演示
    --bwlimit=100 #限速传输

    [root@web01 /tmp]# rsync -avP --bwlimit 100 /tmp/ rsync_backup@172.16.1.41::backup
    sending incremental file list
    ./
    data.txt
    5,537,792 1% 100.04kB/s

    3.数据一致
    --delete #让目标目录和源目录数据保持一致

    #推:数据与推送数据的源数据一致
    [root@web01 /tmp]# rsync -avP --delete /tmp/ rsync_backup@172.16.1.41::backup
    sending incremental file list
    deleting file2
    deleting file1

    sent 223 bytes received 43 bytes 532.00 bytes/sec
    total size is 0 speedup is 0.00

    #推:数据与拉取数据的源数据一致
    [root@web01 /tmp]# rsync -a -v -P rsync_backup@172.16.1.41::backup /tmp --delete
    receiving incremental file list
    deleting file4
    deleting file3
    ./

    sent 32 bytes received 203 bytes 470.00 bytes/sec
    total size is 0 speedup is 0.00

     

    六、rsync备份案例

    1.需求

    客户端需求
    1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
    2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
    3.客户端最后将备份的数据进行推送至备份服务器
    4.客户端每天凌晨1点定时执行该脚本
    5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

    服务端需求
    1.服务端部署rsync,用于接收客户端推送过来的备份数据
    2.服务端需要每天校验客户端推送过来的数据是否完整
    3.服务端需要每天校验的结果通知给管理员
    4.服务端仅保留6个月的备份数据,其余的全部删除

    2.准备服务器

    主机内网IP
    web01 172.16.1.7
    backup 172.16.1.41

     

     

     

     

    3.客户端

    1.创建备份目录
    #备份目录格式
    /backup/web01_172.16.1.31_2018-09-02

    #取主机名
    [root@web01 ~]# hostname
    web01

    #取IP
    [root@web01 ~]# ifconfig eth1 | awk 'NR==2 {print $2}'
    172.16.1.7
    [root@web01 ~]# hostname -I | awk '{print $2}'
    172.16.1.7

    #取时间
    [root@web01 ~]# date +%F
    2020-08-12

    #创建目录
    [root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`

    2.打包
    [root@web01 ~]# cd /backup/web01_172.16.1.7_2020-08-12/

    [root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

    3.推送数据
    [root@web01 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-12 rsync_backup@172.16.1.41::backup
    sending incremental file list
    web01_172.16.1.7_2020-08-12/
    web01_172.16.1.7_2020-08-12/conf.tar.gz

    sent 62,567 bytes received 47 bytes 125,228.00 bytes/sec
    total size is 68,669 speedup is 1.10

    4.以上内容写成脚本
    [root@web01 ~]# mkdir /scripts
    [root@web01 ~]# vim /scripts/backup.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}

    #1.创建目录
    mkdir -p $DIR

    #2.进到目录下并打包文件
    cd $DIR
    tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

    #3.推送
    export RSYNC_PASSWORD=123456
    rsync -avz $DIR rsync_backup@172.16.1.41::backup

    5.写入定时任务
    [root@web01 ~]# crontab -e
    #每天凌晨1点进行文件备份
    00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null

    6.清理数据
    #模拟生成一个月数据
    [root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done

    #只保留七天的文件
    [root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf
    [root@web01 ~]# ll /backup/
    total 0
    drwxr-xr-x 2 root root 25 Aug 23 00:00 web01_172.16.1.7_2020-08-23
    drwxr-xr-x 2 root root 25 Aug 24 00:00 web01_172.16.1.7_2020-08-24
    drwxr-xr-x 2 root root 25 Aug 25 00:00 web01_172.16.1.7_2020-08-25
    drwxr-xr-x 2 root root 25 Aug 26 00:00 web01_172.16.1.7_2020-08-26
    drwxr-xr-x 2 root root 25 Aug 27 00:00 web01_172.16.1.7_2020-08-27
    drwxr-xr-x 2 root root 25 Aug 28 00:00 web01_172.16.1.7_2020-08-28
    drwxr-xr-x 2 root root 25 Aug 29 00:00 web01_172.16.1.7_2020-08-29
    drwxr-xr-x 2 root root 25 Aug 30 00:00 web01_172.16.1.7_2020-08-30

    7.完善脚本
    [root@web01 ~]# vim /scripts/backup.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}

    #1.创建目录
    mkdir -p $DIR

    #2.进到目录下并打包文件
    cd $DIR
    tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

    #3.对文件生成验证文件
    md5sum $DIR/conf.tar.gz > $DIR/auth.txt

    #4.推送
    export RSYNC_PASSWORD=123456
    rsync -avz $DIR rsync_backup@172.16.1.41::backup

    #5.清理数据
    find $SRC -type d -mtime +7 | xargs rm -rf

    4.服务端

    1.安装邮件系统
    [root@backup ~]# yum install -y mailx

    #编辑邮件系统
    [root@backup ~]# vim /etc/mail.rc
    set from=qq号@qq.com
    set smtp=smtps://smtp.qq.com:465
    set smtp-auth-user=qq号@qq.com
    set smtp-auth-password=smtp验证码
    set smtp-auth=login
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb/

    2.编写脚本

    [root@backup ~]# vim /scripts/auth.sh
    #!/bin/bash
    #0.定义变量
    SRC=/backup
    HOST=`hostname`
    IP=`hostname -I | awk '{print $2}'`
    DATE=`date +%F`
    DIR=${SRC}/${HOST}_${IP}_${DATE}

    #1.验证文件的完整性
    md5sum -c $SRC/web01_172.16.1.7_$DATE/auth.txt > $SRC/result.txt

    #2.把验证结果发送到QQ
    mail -s "备份数据完整性"   qq号码@qq.com < $SRC/result.txt

    #3.清理数据
    find $SRC -type d -mtime +180 | xargs rm -rf

     

    七、rsync结合inotify实现实时备份

    1.安装inotify
    [root@web01 ~]# yum -y install inotify-tools

    2.命令测试
    [root@web01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup

    3,参数详解
    -m 持续监控
    -r 递归
    -q 静默,仅打印时间信息
    --timefmt 指定输出时间格式
    --format 指定事件输出格式
    %Xe 事件
    %w 目录
    %f 文件
    -e 指定监控的事件
    access 访问
    modify 内容修改
    attrib 属性修改
    close_write 修改真实文件内容
    open 打开
    create 创建
    delete 删除
    umount 卸载

    4.实时监控脚本
    1)粗糙版
    [root@web01 /backup]# vim /scripts/rsync_inotify.sh
    #!/bin/bash
    dir=/backup
    /usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
    cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.41::backup --password-file=/etc/rsyncd.password >/dev/null 2>&1
    done &

    2)精华版
    [root@web01 /backup]# vim /scripts/rsync_inotify.sh
    #!/bin/bash
    src=/data
    des=backup
    rsync_passwd_file=/etc/rsync.passwd
    ip1=172.16.1.41
    user=rsync_backup
    cd ${src}
    /usr/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
    do
    INO_EVENT=$(echo $file | awk '{print $1}')
    INO_FILE=$(echo $file | awk '{print $2}')
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
    then
    rsync -azcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des}
    fi
    if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
    rsync -azR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
    fi
    if [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
    if [ ! -d "$INO_FILE" ]
    then
    rsync -azcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
    fi
    fi
    done &

  • 相关阅读:
    Bootstrap 网页1
    Bootstrap 网页实例
    Bootstrap 警告框
    Bootstrap 表格
    Bootstrap 小功能
    【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法
    【BZOJ3669】[Noi2014]魔法森林 LCT
    【BZOJ2049,2631,3282,1180】LCT模板四连A
    【BZOJ4071】[Apio2015]巴邻旁之桥 Treap
    【BZOJ1009】[HNOI2008]GT考试 next数组+矩阵乘法
  • 原文地址:https://www.cnblogs.com/jhno1/p/13492562.html
Copyright © 2011-2022 走看看