当前位置:   article > 正文

数据备份- rclone ,Duplicity, restic,rsync_rsync rclone

rsync rclone

目录

Duplicity

 安装

语法:

案例:

Rclone

简介

安装

设置

命令语法

备份

同步

常用功能选项

常用参数

日志

文件过滤

常用命令

查看远程文件夹的体积占用大小

Restic

Restic 支持的存储类型

安装

备份至本地

创建备份仓库

备份至云

更多用法

免密码操作

常见问题

锁(lock)

有关锁的命令

 Rsync

1、Rsync基本概述

2、Rsync应用场景

3、Rsync传输模式

4、Rsync服务实践

5、Rsync企业级备份案例


Duplicity

    Duplicity 使用 librsync 生产一个非常小的额外备份。它能够生成递增备份,然后使用 GPG 进行加密,能够适用常用的方法发送至另一个服务器上,比如:scp、ftp、sftp、rsync等等。可以从任何目录开始备份,不限于加载点(mountpoint),并且可以指定你想要排除的文件。

 安装

也很简单,使用yum安装和下载duplicity的源码包,编译安装也可以。

       1.安装所需要依赖(安装epel源)

    yum install -y gcc-c++ librsync python-lockfile python-urllib3 python-setuptools python-devel librsync-devel

    2.下载duplicity源码包

    3.解压,并安装

    tar xvf duplicity-0.7.07.tar.gz

    cd duplicity-0.7.07

    python setup.py install

    4.验证是否安装成功,并查看版本

    echo $?

    duplicity -V

    如果使用yum无法安装,请安装epel的扩展源,再yum安装

     www.lishiming.net/data/p_w_upload/forum/epel-release-6-8_64.noarch.rpm

    注意:在设置备份时,请同时备份好设置的密钥,如果密钥丢失,你备份的数据也无法解密,所以把密钥刻录多张cd作为多个备份。

    

语法:

    duplicity [actions] [options] source_directory target_url

    action:

    full           会强制的完整备份,即使可以使用增量备份

    incr           使用增量备份,但是第一次备份时会忽略,而使用完整备份

    verify          比较备份和当前文件的修改时间

    list-current-files    列出当前最新备份的文件

    collection-status    列出备份的状态,有多少个完整备份及增量备份,备份的时间等等.

例如:

    1.列出备份文件的状态

    duplicity collection-status --ssh-options="-oPort=8888 -oIdentityFile=/home/abc/sK/id_rsa" 

    #--ssh-options 指定链接所使用的端口号

    #-oIdentityFile 指定ssh密钥的位置

    2.删除存在的时间超过1年的文件

    duplicity remove-older-than 1Y

    #--force 如果不加上这个这个参数,则是列出要删除的文件,而不会删除他们。

    #remove-older-than 删除比指定时间要旧的文件

    #--no-encryption   不加密,    

案例:

   1.本机备份

       duplicity full --include /data/test/iptables  --exclude '**' /data file:///aaa

2.查看备份的文档

duplicity list-current-files file:///aaa ##/aaa为备份的路径

3.恢复备份

duplicity restore file:///aaa /data/restore  ##file:///aaa是备份的路径 ##/data/restore是还原到的路径

4.如果只想恢复完全备份中的某个文件是可以使用--file-to-restore选项

duplicity restore --file-to-restore=passwd file:///aaa /abc/passwd  ##--file-to-restore使用的是相对路径,file:///aaa是备份文件的路径,/abc/passwd是文件恢复的路径,passwd是指定的文件名

    --restore-time "2002-01-25"  恢复某个特定时间的备份数据

    --log-file /backup/test/$dir.log 指定日志文件

    --tempdir /backup/tmp       指定临时文件路径

    --encrypt-key=102CB07A      指定密钥加密

5.恢复指定时间备份的数据

duplicity restore --restore-time "2017-01-01T19:53:52" file:///aaa /bbb/passwd4

6.使用密钥尽享加密

duplicity full --encrypt-key=2A7669AD --include /etc/passwd --exclude '**' /etc file:///backup

如果想使用duplicity的更多应用,请使用man duplicity的详细。

更方便的是写成脚本,放在计划任务里面,自动备份

#!/bin/bash

export PASSPHRASE="xxxxxx"

#mkdir /mnt/df

#mount.cifs //192.168.0.100/E$ /mnt/df -o username='SHUOBAOTANG/administrator',password='xxxxx'

DIRS='aaa

bbb

ccc

internal_ldap

mail_backup

'

for dir in $DIRS; do

    echo "start backup $dir"

#    mkdir /mnt/100/$dir

#    duplicity full --encrypt-key=102CB07A /mnt/21/e/$dir file:///mnt/69/$dir --log-file /bak/test/$dir.log --tempdir /bak/tmp --archive-dir /bak/tmp

    duplicity full --encrypt-key=102CB07A /backup/$dir file:///mnt/50/e/$dir --log-file /home/log2/$dir.log --tempdir /home/tmp --archive-dir /home/tmp

    duplicity verify --encrypt-key=102CB07A file:///mnt/50/e/$dir /backup/$dir --log-file /home/log2/$dir.log --tempdir /home/tmp --archive-dir /home/tmp

#    duplicity full --encrypt-key=102CB07A  scp://root@192.168.0.46//backup/chenmi/$dir /backup2/$dir --log-file /backup1/test/$dir.log --tempdir /backup1/tmp --archive-dir /backup1/tmp

#    duplicity verify --encrypt-key=102CB07A /backup2/$dir scp://root@192.168.0.46//backup/chenmi/$dir   --log-file /backup1/test/$dir.log --tempdir /backup1/tmp --archive-dir /backup1/tmp

done

You have mail in /var/spool/mail/root

  

格式如下:

duplicity [full|incremental] [options] source_directory target_url

duplicity verify [options] [--compare-data] [--file-to-restore <relpath>] [--time time] source_url

target_directory

duplicity collection-status [options] [--file-changed <relpath>]

target_url

duplicity list-current-files [options] [--time time] target_url

duplicity [restore] [options] [--file-to-restore <relpath>] [--time time] source_url

target_directory

duplicity remove-older-than <time> [options] [--force] target_url

duplicity remove-all-but-n-full <count> [options] [--force] target_url

duplicity remove-all-inc-of-but-n-full <count> [options] [--force] target_url

duplicity cleanup [options] [--force] [--extra-clean] target_url

编辑脚本,执行命令备份

vim duplicity.sh

#!/bin/bash
# set up the GPG private key password
#这里设置的PASSPHRASE就是你的GPG密钥的密码
#PASSPHRASE=xxxxxx
#export PASSPHRASE
#set the ssh key password
#FTP_PASSWORD是你的ssh密钥的密码,导入到环境中就不用手动输入了
FTP_PASSWORD=mypassword
export FTP_PASSWORD
#upload server root ,exclude /proc /sys /tmp to sftp server,and no encryption
#下面是备份根目录,--exclude表示将 /proc /sys /tmp 除外 ,这里需要注意的是,duplicity文档中特别注明了如果你要备份根,那么必须要把 /proc除外
#下面的 --dry-run表示并没有实际运行,只是测试,而 --ssh-options后面的是ssh的一些设置,端口号为8888,ssh密钥的位置.
duplicity -v5 --dry-run --progress   --no-encryption --ssh-options="-oPort=8888 -oIdentityFile=/home/xx/private/id_rsa" --exclude /proc --exclude /sys --exclude /tmp / sftp://mysftp@youserver.locastion/upload/#unset varunset FTP_PASSWORD

备份虽然重要,单恢复更为重要。

    在备份前,先列出所有备份的文件,确定好备份的文件在做相应的回复,如果命令不是很熟练的话,请先自己在别的机器上演戏几遍,以免发生不必要的错误。

    1.列出备份的文件

duplicity list-current-files

恢复某个特定日期的文件   添加:--restore-time "2016-09-22"

    

        结论:Duplicity 非常棒,而且速度也很快。这是因为善用 libsync 让备份变得很小,同时也因为他们保持了备份文件的索引,这样为了获得文件列表无需对整个备份进行读取。备份文件很小,划分为多个小文件,这样源机器就不需太多的临时空间。用起来也非常简单:他们能够完成所有递增和完整备份的工作,从而让你能够把关注焦点放在对什么进行备份和恢复上。

Rclone

简介

Rclone 是一个的命令行工具,支持在不同对象存储、网盘间同步、上传、下载数据。并且通过一些设置可以实现离线下载、服务器备份等非常实用的功能。与Restic相比,功能要更简单,没有版本等功能。

安装

下载地址:Rclone downloads
下载后将rclone.exe拷贝至C:/window/system32目录

验证

打开cmd,输入以下命令,显示版本号则说明安装成功。

 
  1. rclone version

设置

https://rclone.org/s3/#alibaba-oss

 
  1. rclone config – 进入交互式配置选项,进行添加、删除、管理网盘等操作。

运行后,将在C:\Users\用户名\AppData\Roaming\rclone目录下,生成一个rclone.conf文件,内容格式如下:

 
  1. [oss]
  2. type = s3
  3. provider = Alibaba
  4. env_auth = false
  5. access_key_id = accesskeyid
  6. secret_access_key = secretaccesskey
  7. endpoint = oss-cn-hangzhou.aliyuncs.com
  8. acl = private
  9. storage_class = Standard

如果其他的电脑需要安装配置,只需要把这个文件拷贝至C:\Users\用户名\AppData\Roaming\rclone目录下即可
如果你是要使用系统内置账户(例如SYSTEM)来执行计划任务,那么这个配置文件是在C:\Windows\System32\config\systemprofile\AppData\Roaming\rclone\rclone.conf
如果是linux系统且用户为root,那么配置文件在/root/.config/rclone/rclone.conf

显示配置文件的路径

 
  1. rclone config file

显示配置文件信息

 
  1. rclone config show

命令语法

 
  1. # 本地到网盘
  2. rclone [功能选项] <本地路径> <网盘名称:路径> [参数] [参数] ...
  3. # 网盘到本地
  4. rclone [功能选项] <网盘名称:路径> <本地路径> [参数] [参数] ...
  5. # 网盘到网盘
  6. rclone [功能选项] <网盘名称:路径> <网盘名称:路径> [参数] [参数] ...

备份

 
  1. rclone copy -P E:/wwwroot oss:backup

E:/wwwroot目录上传至oss中的backup文件夹。注:oss的配置信息已在rclone.conf配置文件中指定。

同步

 
  1. rclone sync -P E:/wwwroot oss:backup

将源(E:/wwwroot)同步到目标(oss:backup),仅更改目标。不传输源和目标上相同的文件,按大小和修改时间或 MD5SUM 进行测试。更新目标以匹配源,包括在必要时删除文件。

常用功能选项

 
  1. rclone copy – 复制
  2. rclone move – 移动,如果要在移动后删除空源目录,请加上 --delete-empty-src-dirs 参数
  3. rclone sync – 同步:将源目录同步到目标目录,只更改目标目录。
  4. rclone size – 查看网盘文件占用大小。
  5. rclone delete – 删除路径下的文件内容。
  6. rclone purge – 删除路径及其所有文件内容。
  7. rclone mkdir – 创建目录。
  8. rclone rmdir – 删除目录。
  9. rclone rmdirs – 删除指定灵境下的空目录。如果加上 --leave-root 参数,则不会删除根目录。
  10. rclone check – 检查源和目的地址数据是否匹配。
  11. rclone ls – 列出指定路径下的所有的文件以及文件大小和路径。
  12. rclone lsl – 比上面多一个显示上传时间。
  13. rclone lsd 列出指定路径下的目录
  14. rclone lsf – 列出指定路径下的目录和文件

常用参数

 
  1. -n = --dry-run – 测试运行,用来查看 rclone 在实际运行中会进行哪些操作。
  2. -P = --progress – 显示实时传输进度,500mS 刷新一次,否则默认 1 分钟刷新一次。
  3. --cache-chunk-size SizeSuffi – 块的大小,默认5M,理论上是越大上传速度越快,同时占用内存也越多。如果设置得太大,可能会导致进程中断。
  4. --cache-chunk-total-size SizeSuffix – 块可以在本地磁盘上占用的总大小,默认10G。
  5. --transfers=N – 并行文件数,默认为4。在比较小的内存的VPS上建议调小这个参数,比如128M的小鸡上使用建议设置为1。
  6. --config string – 指定配置文件路径,string为配置文件路径。
  7. --ignore-errors – 跳过错误。比如 OneDrive 在传了某些特殊文件后会提示Failed to copy: failed to open source object: malwareDetected: Malware detected,这会导致后续的传输任务被终止掉,此时就可以加上这个参数跳过错误。但需要注意 RCLONE 的退出状态码不会为0。

日志

rclone 有 4 个级别的日志记录,ERROR,NOTICE,INFO 和 DEBUG。默认情况下,rclone 将生成 ERROR 和 NOTICE 级别消息。

 
  1. -q – rclone将仅生成 ERROR 消息。
  2. -v – rclone将生成 ERROR,NOTICE 和 INFO 消息,推荐此项。
  3. -vv – rclone 将生成 ERROR,NOTICE,INFO和 DEBUG 消息。
  4. --log-level LEVEL – 标志控制日志级别。

输出日志到文件

使用 –log-file=FILE 选项,rclone 会将 Error,Info 和 Debug 消息以及标准错误重定向到 FILE,这里的 FILE 是你指定的日志文件路径。
另一种方法是使用系统的指向命令,比如:

 
  1. rclone sync -v Onedrive:/DRIVEX Gdrive:/DRIVEX > "~/DRIVEX.log" 2>&1

文件过滤

 
  1. --exclude-from excludes.txt #从excludes.txt中读取要排除的文件或目录
  2. --include-from includes.txt #从includes.txt中读取要备份的文件或目录

常用命令

查看远程文件夹的体积占用大小

 
  1. rclone size remote:path

Restic

自从服务器中了病毒后,更加意识到了数据备份的重要性。

Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。
Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。

项目地址:https://github.com/restic/restic

Restic 支持的存储类型

Restic 支持的存储种类比较多,大致有如下这些类型:

  • 本地存储
  • SFTP
  • REST Server
  • Amazon S3
  • 阿里云 oss
  • Minio Server
  • OpenStack Swift
  • Backblaze B2
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • 通过 Rclone 挂载的存储 (比如:Google Drive、OneDrive 等)

安装

我是windows操作系统,下载的是:restic_0.13.0_windows_386.zip这个压缩包,解压后将restic.exe文件拷贝至C:\Windows\System32就可以了。当然你也可以拷贝至其他目录,只不过需要更改环境变量。

验证:

 
  1. restic version

显示版本号则说明安装成功。

备份至本地

创建备份仓库

概念跟git相似,需要先创建一个库:

 
  1. restic init --repo D:/backup

执行以上命令将D:/backup文件夹作为备份仓库。
执行命令过程中,会让你输入备份仓库密码,记住此密码不要丢失,后面的备份还原都需要用到该密码。

备份指定文件夹到备份仓库

添加一个本地文件夹到备份仓库:

 
  1. restic --repo D:/backup backup D:/mywork

执行以上命令,会将D:/mywork文件夹中的内容备份至备份仓库。
执行命令过程中,需要输入之前你录入的密码,然后就是备份的过程,备份完成后会有如下提示:

最后的一行,snapshot 4bfac36b saved中的4bfac36b就是本次的备份版本号,后面可以通过该版本号来删除备份或还原备份。

查看备份快照

 
  1. restic -r D:/backup snapshots

在恢复备份之前,一般会先查看一下快照,防止恢复了错误的版本,可以使用上面的命令。

还原备份

指定版本号还原

指定 restore 哪一个版本号,以及 target 指向一个恢复路径,就会完成备份的还原。

 
  1. restic -r D:/backup restore 4bfac36b --target D:/mywork_restore

执行以上命令后,将会把4bfac36b版本恢复到D:/mywork_restore文件夹

还原最近一次备份

 
  1. restic -r D:/backup restore latest --target D:/mywork_restore

还原后的问题

还原后,在指定的还原文件夹中会出现以路径形式的文件夹,例如上面的例子还原后的文件夹长这样:

 
  1. D:/mywork_restore/D/mywork/...

如果你想去掉路径中的D/mywork,可以先cd进入到备份文件夹后,再使用如下命令备份:

 
  1. cd D:/mywork;
  2. restic --repo D:/backup backup .

可以看到,backup命令后是一个.,表示备份当前目录。这样还原出来的就不会有路径文件夹了。

备份至云

我这里备份至阿里云的OSS,理论上也支持备份至腾讯云等类似Amazon S3的对象存储。

设置密钥信息

Linux:

 
  1. export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
  2. export AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>

Windows:

 
  1. SET AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
  2. SET AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>

创建备份仓库

 
  1. restic -o s3.bucket-lookup=dns -o s3.region=<OSS-REGION> -r s3:https://<OSS-ENDPOINT>/<OSS-BUCKET-NAME> init

OSS-REGION:地域名称
OSS-ENDPOINT:地域节点
OSS-BUCKET-NAME:Bucket名称

例如:

 
  1. restic -o s3.bucket-lookup=dns -o s3.region=oss-cn-shanghai -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest init

备份

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest backup D:/mywork

查看快照

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest snapshots

还原备份

按版本号还原

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore 9dc0a53a --target D:/mywork_restore

还原最近一次备份

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore latest --target D:/mywork_restore

更多用法

免密码操作

上面备份还原等操作,都需要输入密码,不适合脚本自动备份,可以使用--password-file参数自动从指定位置读取密码。
例如把密码保存在D:/resticpasswd文件中,执行备份或还原时,加上--password-file D:/resticpasswd参数即可。
例如备份操作:

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest --password-file D:/resticpasswd backup D:/mywork

设置排除文件

按文件路径及格式排除

备份过程中,有的目录不需要备份,例如缓存文件夹,日志文件夹,.svn,.git等。
将需要排除的目录写到一个文件中,例如我写到D:/excludes.txt,内容如下:

 
  1. # 排除以下格式文件
  2. *.pdf
  3. *.zip
  4. *.rar
  5. *.psd
  6. *.nb3
  7. *.exe
  8. *.mp3
  9. *.mp4
  10. # 排除以下文件夹
  11. .idea
  12. .svn
  13. .git
  14. uploads/*
  15. cache/*
  16. log/*

更多排除规则可以查看官网文档

在备份时加上--exclude-file参数,例如:

 
  1. restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest --password-file D:/resticpasswd backup D:/mywork --exclude-file=D:/excludes.txt

这样再备份中,就会排除指定的文件,提高备份效率。

按文件体积排除

有的附件体积比较大,不想备份时,可以设置--exclude-larger-than参数进行排除,例如:

 
  1. --exclude-larger-than 2M

即:大于2M的文件不备份

备份多个路径

当你想要从许多不同位置备份文件时,或者当你使用其他软件生成要备份的文件列表时。可以使用--files-from参数读取一个需要备份的文件夹列表,例如我把需要备份的多个目录写到D:/includes.txt文件,内容如下:

 
  1. # 备份以下文件夹
  2. D:\mywork
  3. D:\mywork2
  4. ...

然后使用备份命令:

 
  1. restic -r repo backup --files-from D:/includes.txt

当然也可以把前面的参数加进来,例如你需要从指定文件中读取需要备份的文件夹,同时这些文件夹中有的文件需要排除,那么可以这样使用:

 
  1. restic -r repo backup --files-from D:/includes.txt --exclude-file=D:/excludes.txt

从快照中还原指定文件或文件夹

快照中包含了多个文件夹,也许你只需还原其中某一个文件或文件夹,那么可以使用--include参数,例如通过上面备份多个路径一节备份了多个目录,在还原时我只想还原D:\mywork2目录,可以这样使用:

 
  1. restic -r repo restore latest --target D:/mywork_restore --include /D/mywork2

注意:如果你写成--include D:\mywork2将无法还原,原因是该路径在快照中并不存在。可以通过下面的命令来查看快照中有哪些文件。

相应的,如果你想排除某个目录不还原,则可以使用--exclude参数。

列出快照中的文件

 
  1. restic -r repo ls <snapshotID>

备份标签

快照可以有一个或多个标签,即添加识别信息的短字符串。只需使用以下命令--tag

 
  1. restic -r repo backup --tag project D:/work

然后执行查看快照命令,可以查看快照的标签。

删除快照

备份空间都是有限的,restic提供了命令删除旧快照。
对于删除操作,需要依次调用两个命令:forget删除快照,以及prune删除快照引用的数据。

删除单个快照

 
  1. restic -r repo forget <snapshotID>

快照删除后,其文件引用的数据仍存储在存储库中。要清理未引用的数据,需要执行prune命令:

 
  1. restic -r repo prune

根据策略删除快照

手动删除快照既乏味又容易出错,因此restic允许指定--keep-*参数来设置要保留的快照。例如,您可以定义要保留多少小时、天、周、月和年的快照,并且将删除任何其他快照。

例如保留最近一次快照,其余快照删除:

 
  1. restic -r repo forget --keep-last 1 --prune

保留最近一个月的快照,其余的删除:

 
  1. restic -r repo forget --keep-monthly 1 --prune

查看快照大小

查看指定快照大小

 
  1. restic -r repo forget stats <snapshotID>

查看最近一次快照的大小

 
  1. restic -r repo forget stats latest

查找文件

在所有快照中查找文件

 
  1. restic -r repo find "*<keyword>*"

在指定快照中查找文件

 
  1. restic -r repo find -s <snapshotID> "*<keyword>*"

常见问题

锁(lock)

有时候由于程序卡住了,或者服务器意外关机或重启,会导致备份中断,从而导致出现锁(lock)。这时执行命令时会提示repository is already locked by PID xxxx这种的错误。
解决办法:

 
  1. restic -r repo unlock

也可以在你要执行的命令后加--nolock,例如查看快照:restic -r repo snapshots --nolock

有关锁的命令

查看有哪些锁:

 
  1. restic -r repo list locks

 Rsync

1、Rsync基本概述

rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Linux),可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地等应用。

rsync官方地址rsync

rsync监听端口:873

rsync运行架构:
C/S Client/Server
B/S Browser/Server

rsync常见的两种备份方式

  • 完全备份
    • 将数据全部备份
  • 增量备份
    • 基于上一次备份,新增部分的数据备份

示例:

假设客户端上有file1 file2 file3文件,服务端上有file1文件,现要将客户端上的数据备份至服务端

完全备份,将客户端所有的数据内容file1、file2、file3全部备份至服务端 (效率低下, 占用空间)

增量备份,将客户端的file2、file3增量备份至服务端 (提高备份效率,节省空间, 适合异地备份 )

2、Rsync应用场景

2.1 数据推送(上传)

所有主机推送本地数据至Rsync备份服务器,这样会导致数据同步缓慢(适合少量数据备份)

2.2 数据拉取(下载)

rsync备份服务端拉取所有主机上的数据,这样操作会导致备份服务器压力比较大(适合较少服务器场景)

2.3 大量服务器备份场景

2.4 异地备份实现思路

3、Rsync传输模式

Rsync大致使用三种主要的数据传输方式

本地方式
远程方式
守护进程

3.1 rsync命令选项

  1. -a //归档模式传输,等于-tropglD
  2. -v //详细模式输出,显示速率,文件数量等
  3. -z //传输时进行压缩,提高效率
  4. -r //递归传输,传输目录,传输目录时目录名称后加"/"表示传输目录下的所有文件
  5. -t //保持文件时间信息
  6. -o //保持文件属主信息
  7. -g //保持文件属组信息
  8. -p //保持文件权限
  9. -l //保留软链接
  10. -D //保持设备文件信息
  11. -P //显示同步的过程及传输时的进度等信息
  12. -L //保留软连接指向的目标文件
  13. --delete //让目标目录和源目录数据保持一致
  14. --bwlimit //限速传输
  15. --exclude=PATTERN //指定排除不需要传输的文件模式
  16. --exclude-from=FILE //排除FILE中指定模式的文件

3.2 本地模式

适用单个主机之间的数据传输(类似于cp命令)

具体用法如下:

  1. Local: rsync [OPTION...] SRC... [DEST]
  2. rsync [选项] 源文件.. 目标路径

3.3 远程模式

基于ssh通道传输(类似scp命令)

注意:rsync借助ssh协议同步数据存在一些缺陷问题

  • 使用系统用户(不安全)
  • 使用普通用户(会导致权限不足的情况)

具体用法如下:

  1. Access via remote shell:
  2. Pull: 拉 rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  3. Push: 推 rsync [OPTION...] SRC... [USER@]HOST:DEST
  4. 拉:rsync [选项] [用户@]主机IP:文件路径 本机目录
  5. 推:rsync [选项] 本机文件 [用户@]主机IP:目录

3.4 守护进程模式

  1. Access via rsync daemon:
  2. Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  3. Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
  4. 拉:rsync [选项..] [用户名@]主机IP::配置文件中的模块名 本机目录
  5. 推:rsync [选项..] 本机文件 [用户名@]主机IP::配置文件中的模块名

4、Rsync服务实践

主机名IP角色
server192.168.111.30rsync服务端
client192.168.111.40rsync客户端

4.1 服务端配置

  1. # 1.安装rsync
  2. [root@server ~]# yum install -y rsync
  3. # 2.修改服务配置文件/etc/rsyncd.conf
  4. [root@server ~]# vim /etc/rsyncd.conf
  5. uid = rsync #运行服务的用户
  6. gid = rsync #运行服务的组
  7. port = 873 #服务监听端口
  8. fake super = yes #服务无需使用root用户身份,即可接收文件的完整属性
  9. use chroot = no #禁锢目录,不允许获取root权限
  10. max connections = 4 #最大连接数,最多能有多少个客户端跟服务端的873端口建立连接
  11. timeout = 600 #超时时间
  12. ignore errors #忽略错误
  13. read only = false #客户是否只读
  14. list = false #不允许查看模块信息
  15. auth users = rsync_backup #定义虚拟用户,用户数据传输
  16. secrets file = /etc/rsync.passwd #定义虚拟用户密码认证文件
  17. log file = /var/log/rsyncd.log #日志文件存放的位置
  18. #################################
  19. [backup] # 模块名
  20. comment = welcome to oldboyedu backup! # 模块的描述信息
  21. path = /backup # 数据存放目录
  22. # 3.创建用户以及数据存放目录
  23. [root@server ~]# useradd -r -M -s /sbin/nologin rsync
  24. [root@server ~]# mkdir /backup
  25. [root@server ~]# chown -R rsync.rsync /backup
  26. # 4.创建虚拟用户密码文件并设置权限
  27. [root@server ~]# vim /etc/rsync.passwd
  28. rsync_backup:passwd123
  29. [root@server ~]# chmod 600 /etc/rsync.passwd
  30. # 5.关闭防火墙、selinux
  31. [root@server ~]#systemctl status firewalld.service
  32. ● firewalld.service - firewalld - dynamic firewall daemon
  33. Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  34. Active: inactive (dead)
  35. Docs: man:firewalld(1)
  36. # 6.重启服务并设置服务开机自启
  37. [root@server ~]# systemctl restart rsyncd
  38. [root@server ~]# systemctl enable rsyncd
  39. # 7.检查服务端口是否开启
  40. [root@server ~]# ss -anltup | grep "rsync"
  41. tcp LISTEN 0 5 0.0.0.0:873 0.0.0.0:* users:(("rsync",pid=2320,fd=3))
  42. tcp LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=2320,fd=5))

4.2 客户端配置

  1. # 1.安装rsync
  2. [root@client ~]# yum -y install rsync
  3. # 2.配置传输密码
  4. ---方法1:将密码写入文件
  5. [root@client ~]# echo 'passwd123' > /etc/rsync.pass
  6. [root@client ~]# cat /etc/rsync.pass
  7. passwd123
  8. [root@client ~]# chmod 600 /etc/rsync.pass
  9. --测试收发数据:
  10. [root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_backup@192.168.111.30::backup
  11. sending incremental file list
  12. file1
  13. sent 87 bytes received 43 bytes 260.00 bytes/sec
  14. total size is 0 speedup is 0.00
  15. [root@server ~]# ls /backup/
  16. file1
  17. ---方法2:使用密码环境变量RSYNC_PASSWORD
  18. [root@client ~]# export RSYNC_PASSWORD='passwd123'
  19. --测试收发数据:
  20. [root@client ~]# touch file2
  21. [root@client ~]#rsync -avz /root/file2 rsync_backup@192.168.111.30::backup
  22. sending incremental file list
  23. file2
  24. sent 88 bytes received 43 bytes 87.33 bytes/sec
  25. total size is 0 speedup is 0.00
  26. [root@server ~]# ls /backup/
  27. file1 file2

4.3 设置systemctl 管理 rsync 服务

  1. # 1.创建/etc/sysconfig/rsyncd 文件
  2. [root@server ~]#vim /etc/sysconfig/rsyncd
  3. OPTIONS=""
  4. # 2. 创建rsyncd.service 文件
  5. [root@server ~]#vim /lib/systemd/system/rsyncd.service
  6. [Unit]
  7. Description=fast remote file copy program daemon
  8. [Service]
  9. EnvironmentFile=/etc/sysconfig/rsyncd
  10. ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
  11. ExecReload=/bin/kill -HUP $MAINPID
  12. KillMode=process
  13. Restart=on-failure
  14. RestartSec=30s
  15. [Install]
  16. WantedBy=multi-user.target

4.4 报错信息

  1. # 用户密码认证失败
  2. [root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_hzz@192.168.111.30::backup
  3. @ERROR: auth failed on module backup
  4. rsync error: error starting client-server protocol (code 5) at main.c(1661) [sender=3.1.3]
  5. ## 原因:
  6. 1.用户输入错误
  7. 2.密码输入错误
  8. 3.密码文件的权限不是600
  9. 4.传输的文件不存在
  10. [root@client ~]# rsync -avz /etc/passwd rsync_backup@192.168.111.30::backup
  11. rsync: failed to connect to 192.168.111.30 (192.168.111.30): No route to host (113)
  12. rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.3]
  13. 无法和192.168.111.30rsync服务建立连接
  14. ## 原因:
  15. 1.防火墙
  16. 2.selinux
  17. 3.服务没启动
  18. 4.服务的端口改了

4.5 排错思路

  1. ## 服务端
  2. # 1.检查配置文件
  3. [root@server ~]# cat /etc/rsyncd.conf
  4. # 2.检查密码文件的权限
  5. [root@server ~]#ll /etc/rsync.passwd
  6. -rw-------. 1 root root 23 92 16:30 /etc/rsync.passwd
  7. # 3.检查密码文件中的内容
  8. 检查用户名是否和配置文件中的用户名一致
  9. # 4.检查模块目录的权限
  10. 模块目录的权限,必须是rsync配置文件中指定的uid和gid的权限
  11. ## 客户端
  12. # 1.检查命令用户名
  13. 命令中的用户名要跟服务端配置文件和密码文件中的用户名一致 rsync_backup
  14. # 2.检查命令模块名
  15. 命令中的模块名要跟服务端配置文件中的模块名一致 backup
  16. # 3.如果有密码文件,检查权限
  17. 600 root root
  18. # 4.检查密码文件内容
  19. 只需要写密码
  20. # 5.检查环境变量中的密码
  21. [root@server ~]# echo $RSYNC_PASSWORD
  22. passwd123

5、Rsync企业级备份案例

环境准备

主机名IP角色
server192.168.111.30rsync服务端
client192.168.111.40rsync客户端

客户端需求

  • 客户端每天凌晨3点备份/etc目录至/backup下以"主机名_IP地址_当前时间命名"的目录中
  • 客户端推送/backup目录下数据备份目录至Rsync备份服务器
  • 客户端只保留最近七天的备份数据,避免浪费磁盘空间

服务端需求

  • 服务端部署rsync服务,用于接收用户的备份数据
  • 服务端每天校验客户端推送过来的数据是否完整,并将结果以邮件的方式发送给管理员
  • 服务端仅保留6个月的备份数据

注意:所有服务器的备份目录均为/backup,所有脚本存放目录均为/scripts。

服务端部署rsync服务

  1. [root@server ~]# mkdir /scripts
  2. [root@server ~]# vim /scripts/rsync_server.sh
  3. #!/bin/bash
  4. #安装rsync服务
  5. yum -y install rsync
  6. #修改服务配置文件
  7. cat > /etc/rsyncd.conf << EOF
  8. uid = rsync
  9. gid = rsync
  10. port = 873
  11. fake super = yes
  12. use chroot = no
  13. max connections = 4
  14. timeout = 600
  15. ignore errors
  16. read only = false
  17. list = false
  18. auth users = rsync_backup
  19. secrets file = /etc/rsync.passwd
  20. log file = /var/log/rsyncd.log
  21. [backup]
  22. comment = welcome to oldboyedu backup!
  23. path = /backup
  24. EOF
  25. #创建服务用户,创建数据备份目录并设置权限
  26. useradd -r -M -s /sbin/nologin rsync
  27. mkdir /backup
  28. chown -R rsync.rsync /backup
  29. #生成数据传输用户密码文件并设置权限
  30. echo "rsync_backup:passwd123" > /etc/rsync.passwd
  31. chmod 600 /etc/rsync.passwd
  32. #关闭防火墙和selinux
  33. systemctl stop firewalld
  34. setenforce 0
  35. #设置服务开机自启,并重启服务
  36. systemctl enable rsyncd
  37. systemctl restart rsyncd
  38. [root@server ~]# chmod +x /scripts/rsync_server.sh
  39. [root@server ~]# /scripts/rsync_server.sh

客户端备份数据并推送至rsync服务器

  1. [root@client ~]# mkdir /scripts
  2. [root@client ~]# vim /scripts/etc_backup.sh
  3. #!/bin/bash
  4. #客户端安装rsync
  5. yum -y install rsync
  6. #配置rsync客户端虚拟用户密码
  7. export RSYNC_PASSWORD='passwd123'
  8. #创建备份目录
  9. mkdir -p /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")
  10. #打包备份/etc目录下的数据至备份目录中
  11. tar -zcf /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/etc_backup.tar.gz /etc/
  12. #计算备份文件的校验值
  13. md5sum /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/etc_backup.tar.gz > /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/checksum.txt
  14. #将打包备份好的数据推送到rsync备份服务器
  15. rsync -az /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F") rsync_backup@192.168.111.30::backup
  16. #删除七天前的备份文件
  17. find /backup/ -mtime +7 | xargs rm -rf
  18. [root@client ~]# chmod +x /scripts/etc_backup.sh
  19. [root@client ~]# crontab -e
  20. 0 3 * * * /scripts/etc_backup.sh

服务端校验数据并将结果以邮件发送给管理员:

  1. #配置邮件服务
  2. [root@server ~]# yum -y install mailx
  3. [root@server ~]# cat > /etc/mail.rc << EOF
  4. # 发送的邮件地址
  5. set from=483607723@qq.com
  6. # 发送邮件服务器
  7. set smtp=smtps://smtp.qq.com:465
  8. # 发件人账号,一般情况下为邮件地址
  9. set smtp-auth-user=483607723@qq.com
  10. # 发件邮箱的授权码
  11. set smtp-auth-password=xxxxxxxxxx
  12. # 认证方式
  13. set smtp-auth=login
  14. # 忽略证书警告
  15. set ssl-verify=ignore
  16. # 证书所在目录
  17. set nss-config-dir=/etc/pki/nssdb/
  18. EOF
  19. #配置脚本校验数据并将结果发送给管理员
  20. [root@server ~]# vim /scripts/checksum.sh
  21. #!/bin/bash
  22. #校验备份数据并将结果发送给管理员
  23. md5sum -c /backup/client_192.168.111.30_$(date "+%F")/checksum.txt | mail -s "/backup/client_192.168.111.30_$(date "+%F")" 483607723@qq.com
  24. #删除6个月以前的备份数据
  25. find /backup/ -mtime +180 | xargs rm -rf
  26. [root@server ~]# chmod +x /scripts/checksum.sh
  27. [root@server ~]# crontab -e
  28. 0 5 * * * /scripts/checksum.sh
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/625929
推荐阅读
相关标签
  

闽ICP备14008679号