目录
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,输入以下命令,显示版本号则说明安装成功。
rclone version
设置
https://rclone.org/s3/#alibaba-oss
rclone config – 进入交互式配置选项,进行添加、删除、管理网盘等操作。
运行后,将在C:\Users\用户名\AppData\Roaming\rclone
目录下,生成一个rclone.conf
文件,内容格式如下:
[oss]
type = s3
provider = Alibaba
env_auth = false
access_key_id = accesskeyid
secret_access_key = secretaccesskey
endpoint = oss-cn-hangzhou.aliyuncs.com
acl = private
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
显示配置文件的路径
rclone config file
显示配置文件信息
rclone config show
命令语法
# 本地到网盘
rclone [功能选项] <本地路径> <网盘名称:路径> [参数] [参数] ...
# 网盘到本地
rclone [功能选项] <网盘名称:路径> <本地路径> [参数] [参数] ...
# 网盘到网盘
rclone [功能选项] <网盘名称:路径> <网盘名称:路径> [参数] [参数] ...
备份
rclone copy -P E:/wwwroot oss:backup
将E:/wwwroot
目录上传至oss中的backup文件夹。注:oss的配置信息已在rclone.conf
配置文件中指定。
同步
rclone sync -P E:/wwwroot oss:backup
将源(E:/wwwroot)同步到目标(oss:backup),仅更改目标。不传输源和目标上相同的文件,按大小和修改时间或 MD5SUM 进行测试。更新目标以匹配源,包括在必要时删除文件。
常用功能选项
rclone copy – 复制
rclone move – 移动,如果要在移动后删除空源目录,请加上 --delete-empty-src-dirs 参数
rclone sync – 同步:将源目录同步到目标目录,只更改目标目录。
rclone size – 查看网盘文件占用大小。
rclone delete – 删除路径下的文件内容。
rclone purge – 删除路径及其所有文件内容。
rclone mkdir – 创建目录。
rclone rmdir – 删除目录。
rclone rmdirs – 删除指定灵境下的空目录。如果加上 --leave-root 参数,则不会删除根目录。
rclone check – 检查源和目的地址数据是否匹配。
rclone ls – 列出指定路径下的所有的文件以及文件大小和路径。
rclone lsl – 比上面多一个显示上传时间。
rclone lsd 列出指定路径下的目录
rclone lsf – 列出指定路径下的目录和文件
常用参数
-n = --dry-run – 测试运行,用来查看 rclone 在实际运行中会进行哪些操作。
-P = --progress – 显示实时传输进度,500mS 刷新一次,否则默认 1 分钟刷新一次。
--cache-chunk-size SizeSuffi – 块的大小,默认5M,理论上是越大上传速度越快,同时占用内存也越多。如果设置得太大,可能会导致进程中断。
--cache-chunk-total-size SizeSuffix – 块可以在本地磁盘上占用的总大小,默认10G。
--transfers=N – 并行文件数,默认为4。在比较小的内存的VPS上建议调小这个参数,比如128M的小鸡上使用建议设置为1。
--config string – 指定配置文件路径,string为配置文件路径。
--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 级别消息。
-q – rclone将仅生成 ERROR 消息。
-v – rclone将生成 ERROR,NOTICE 和 INFO 消息,推荐此项。
-vv – rclone 将生成 ERROR,NOTICE,INFO和 DEBUG 消息。
--log-level LEVEL – 标志控制日志级别。
输出日志到文件
使用 –log-file=FILE 选项,rclone 会将 Error,Info 和 Debug 消息以及标准错误重定向到 FILE,这里的 FILE 是你指定的日志文件路径。
另一种方法是使用系统的指向命令,比如:
rclone sync -v Onedrive:/DRIVEX Gdrive:/DRIVEX > "~/DRIVEX.log" 2>&1
文件过滤
--exclude-from excludes.txt #从excludes.txt中读取要排除的文件或目录
--include-from includes.txt #从includes.txt中读取要备份的文件或目录
常用命令
查看远程文件夹的体积占用大小
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
就可以了。当然你也可以拷贝至其他目录,只不过需要更改环境变量。
验证:
restic version
显示版本号则说明安装成功。
备份至本地
创建备份仓库
概念跟git相似,需要先创建一个库:
restic init --repo D:/backup
执行以上命令将D:/backup
文件夹作为备份仓库。
执行命令过程中,会让你输入备份仓库密码,记住此密码不要丢失,后面的备份还原都需要用到该密码。
备份指定文件夹到备份仓库
添加一个本地文件夹到备份仓库:
restic --repo D:/backup backup D:/mywork
执行以上命令,会将D:/mywork
文件夹中的内容备份至备份仓库。
执行命令过程中,需要输入之前你录入的密码,然后就是备份的过程,备份完成后会有如下提示:
最后的一行,snapshot 4bfac36b saved
中的4bfac36b
就是本次的备份版本号,后面可以通过该版本号来删除备份或还原备份。
查看备份快照
restic -r D:/backup snapshots
在恢复备份之前,一般会先查看一下快照,防止恢复了错误的版本,可以使用上面的命令。
还原备份
指定版本号还原
指定 restore
哪一个版本号,以及 target
指向一个恢复路径,就会完成备份的还原。
restic -r D:/backup restore 4bfac36b --target D:/mywork_restore
执行以上命令后,将会把4bfac36b
版本恢复到D:/mywork_restore
文件夹
还原最近一次备份
restic -r D:/backup restore latest --target D:/mywork_restore
还原后的问题
还原后,在指定的还原文件夹中会出现以路径形式的文件夹,例如上面的例子还原后的文件夹长这样:
D:/mywork_restore/D/mywork/...
如果你想去掉路径中的D/mywork
,可以先cd进入到备份文件夹后,再使用如下命令备份:
cd D:/mywork;
restic --repo D:/backup backup .
可以看到,backup
命令后是一个.
,表示备份当前目录。这样还原出来的就不会有路径文件夹了。
备份至云
我这里备份至阿里云的OSS,理论上也支持备份至腾讯云等类似Amazon S3的对象存储。
设置密钥信息
Linux:
export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>
Windows:
SET AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
SET AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>
创建备份仓库
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名称
例如:
restic -o s3.bucket-lookup=dns -o s3.region=oss-cn-shanghai -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest init
备份
restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest backup D:/mywork
查看快照
restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest snapshots
还原备份
按版本号还原
restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore 9dc0a53a --target D:/mywork_restore
还原最近一次备份
restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore latest --target D:/mywork_restore
更多用法
免密码操作
上面备份还原等操作,都需要输入密码,不适合脚本自动备份,可以使用--password-file
参数自动从指定位置读取密码。
例如把密码保存在D:/resticpasswd
文件中,执行备份或还原时,加上--password-file D:/resticpasswd
参数即可。
例如备份操作:
restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest --password-file D:/resticpasswd backup D:/mywork
设置排除文件
按文件路径及格式排除
备份过程中,有的目录不需要备份,例如缓存文件夹,日志文件夹,.svn,.git等。
将需要排除的目录写到一个文件中,例如我写到D:/excludes.txt
,内容如下:
# 排除以下格式文件
*.pdf
*.zip
*.rar
*.psd
*.nb3
*.exe
*.mp3
*.mp4
# 排除以下文件夹
.idea
.svn
.git
uploads/*
cache/*
log/*
更多排除规则可以查看官网文档
在备份时加上--exclude-file
参数,例如:
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
参数进行排除,例如:
--exclude-larger-than 2M
即:大于2M的文件不备份
备份多个路径
当你想要从许多不同位置备份文件时,或者当你使用其他软件生成要备份的文件列表时。可以使用--files-from
参数读取一个需要备份的文件夹列表,例如我把需要备份的多个目录写到D:/includes.txt
文件,内容如下:
# 备份以下文件夹
D:\mywork
D:\mywork2
...
然后使用备份命令:
restic -r repo backup --files-from D:/includes.txt
当然也可以把前面的参数加进来,例如你需要从指定文件中读取需要备份的文件夹,同时这些文件夹中有的文件需要排除,那么可以这样使用:
restic -r repo backup --files-from D:/includes.txt --exclude-file=D:/excludes.txt
从快照中还原指定文件或文件夹
快照中包含了多个文件夹,也许你只需还原其中某一个文件或文件夹,那么可以使用--include
参数,例如通过上面备份多个路径一节备份了多个目录,在还原时我只想还原D:\mywork2
目录,可以这样使用:
restic -r repo restore latest --target D:/mywork_restore --include /D/mywork2
注意:如果你写成--include D:\mywork2
将无法还原,原因是该路径在快照中并不存在。可以通过下面的命令来查看快照中有哪些文件。
相应的,如果你想排除某个目录不还原,则可以使用--exclude
参数。
列出快照中的文件
restic -r repo ls <snapshotID>
备份标签
快照可以有一个或多个标签,即添加识别信息的短字符串。只需使用以下命令--tag
:
restic -r repo backup --tag project D:/work
然后执行查看快照命令,可以查看快照的标签。
删除快照
备份空间都是有限的,restic
提供了命令删除旧快照。
对于删除操作,需要依次调用两个命令:forget
删除快照,以及prune
删除快照引用的数据。
删除单个快照
restic -r repo forget <snapshotID>
快照删除后,其文件引用的数据仍存储在存储库中。要清理未引用的数据,需要执行prune
命令:
restic -r repo prune
根据策略删除快照
手动删除快照既乏味又容易出错,因此restic
允许指定--keep-*
参数来设置要保留的快照。例如,您可以定义要保留多少小时、天、周、月和年的快照,并且将删除任何其他快照。
例如保留最近一次快照,其余快照删除:
restic -r repo forget --keep-last 1 --prune
保留最近一个月的快照,其余的删除:
restic -r repo forget --keep-monthly 1 --prune
查看快照大小
查看指定快照大小
restic -r repo forget stats <snapshotID>
查看最近一次快照的大小
restic -r repo forget stats latest
查找文件
在所有快照中查找文件
restic -r repo find "*<keyword>*"
在指定快照中查找文件
restic -r repo find -s <snapshotID> "*<keyword>*"
常见问题
锁(lock)
有时候由于程序卡住了,或者服务器意外关机或重启,会导致备份中断,从而导致出现锁(lock)。这时执行命令时会提示repository is already locked by PID xxxx
这种的错误。
解决办法:
restic -r repo unlock
也可以在你要执行的命令后加--nolock
,例如查看快照:restic -r repo snapshots --nolock
有关锁的命令
查看有哪些锁:
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命令选项
-a //归档模式传输,等于-tropglD
-v //详细模式输出,显示速率,文件数量等
-z //传输时进行压缩,提高效率
-r //递归传输,传输目录,传输目录时目录名称后加"/"表示传输目录下的所有文件
-t //保持文件时间信息
-o //保持文件属主信息
-g //保持文件属组信息
-p //保持文件权限
-l //保留软链接
-D //保持设备文件信息
-P //显示同步的过程及传输时的进度等信息
-L //保留软连接指向的目标文件
--delete //让目标目录和源目录数据保持一致
--bwlimit //限速传输
--exclude=PATTERN //指定排除不需要传输的文件模式
--exclude-from=FILE //排除FILE中指定模式的文件
3.2 本地模式
适用单个主机之间的数据传输(类似于cp命令)
具体用法如下:
Local: rsync [OPTION...] SRC... [DEST]
rsync [选项] 源文件.. 目标路径
3.3 远程模式
基于ssh通道传输(类似scp命令)
注意:rsync借助ssh协议同步数据存在一些缺陷问题
- 使用系统用户(不安全)
- 使用普通用户(会导致权限不足的情况)
具体用法如下:
Access via remote shell:
Pull: 拉 rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: 推 rsync [OPTION...] SRC... [USER@]HOST:DEST
拉:rsync [选项] [用户@]主机IP:文件路径 本机目录
推:rsync [选项] 本机文件 [用户@]主机IP:目录
3.4 守护进程模式
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
拉:rsync [选项..] [用户名@]主机IP::配置文件中的模块名 本机目录
推:rsync [选项..] 本机文件 [用户名@]主机IP::配置文件中的模块名
4、Rsync服务实践
主机名 | IP | 角色 |
---|---|---|
server | 192.168.111.30 | rsync服务端 |
client | 192.168.111.40 | rsync客户端 |
4.1 服务端配置
# 1.安装rsync
[root@server ~]# yum install -y rsync
# 2.修改服务配置文件/etc/rsyncd.conf
[root@server ~]# vim /etc/rsyncd.conf
uid = rsync #运行服务的用户
gid = rsync #运行服务的组
port = 873 #服务监听端口
fake super = yes #服务无需使用root用户身份,即可接收文件的完整属性
use chroot = no #禁锢目录,不允许获取root权限
max connections = 4 #最大连接数,最多能有多少个客户端跟服务端的873端口建立连接
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@server ~]# useradd -r -M -s /sbin/nologin rsync
[root@server ~]# mkdir /backup
[root@server ~]# chown -R rsync.rsync /backup
# 4.创建虚拟用户密码文件并设置权限
[root@server ~]# vim /etc/rsync.passwd
rsync_backup:passwd123
[root@server ~]# chmod 600 /etc/rsync.passwd
# 5.关闭防火墙、selinux
[root@server ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# 6.重启服务并设置服务开机自启
[root@server ~]# systemctl restart rsyncd
[root@server ~]# systemctl enable rsyncd
# 7.检查服务端口是否开启
[root@server ~]# ss -anltup | grep "rsync"
tcp LISTEN 0 5 0.0.0.0:873 0.0.0.0:* users:(("rsync",pid=2320,fd=3))
tcp LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=2320,fd=5))
4.2 客户端配置
# 1.安装rsync
[root@client ~]# yum -y install rsync
# 2.配置传输密码
---方法1:将密码写入文件
[root@client ~]# echo 'passwd123' > /etc/rsync.pass
[root@client ~]# cat /etc/rsync.pass
passwd123
[root@client ~]# chmod 600 /etc/rsync.pass
--测试收发数据:
[root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_backup@192.168.111.30::backup
sending incremental file list
file1
sent 87 bytes received 43 bytes 260.00 bytes/sec
total size is 0 speedup is 0.00
[root@server ~]# ls /backup/
file1
---方法2:使用密码环境变量RSYNC_PASSWORD
[root@client ~]# export RSYNC_PASSWORD='passwd123'
--测试收发数据:
[root@client ~]# touch file2
[root@client ~]#rsync -avz /root/file2 rsync_backup@192.168.111.30::backup
sending incremental file list
file2
sent 88 bytes received 43 bytes 87.33 bytes/sec
total size is 0 speedup is 0.00
[root@server ~]# ls /backup/
file1 file2
4.3 设置systemctl 管理 rsync 服务
# 1.创建/etc/sysconfig/rsyncd 文件
[root@server ~]#vim /etc/sysconfig/rsyncd
OPTIONS=""
# 2. 创建rsyncd.service 文件
[root@server ~]#vim /lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=multi-user.target
4.4 报错信息
# 用户密码认证失败
[root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_hzz@192.168.111.30::backup
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1661) [sender=3.1.3]
## 原因:
1.用户输入错误
2.密码输入错误
3.密码文件的权限不是600
4.传输的文件不存在
[root@client ~]# rsync -avz /etc/passwd rsync_backup@192.168.111.30::backup
rsync: failed to connect to 192.168.111.30 (192.168.111.30): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.3]
无法和192.168.111.30rsync服务建立连接
## 原因:
1.防火墙
2.selinux
3.服务没启动
4.服务的端口改了
4.5 排错思路
## 服务端
# 1.检查配置文件
[root@server ~]# cat /etc/rsyncd.conf
# 2.检查密码文件的权限
[root@server ~]#ll /etc/rsync.passwd
-rw-------. 1 root root 23 9月 2 16:30 /etc/rsync.passwd
# 3.检查密码文件中的内容
检查用户名是否和配置文件中的用户名一致
# 4.检查模块目录的权限
模块目录的权限,必须是rsync配置文件中指定的uid和gid的权限
## 客户端
# 1.检查命令用户名
命令中的用户名要跟服务端配置文件和密码文件中的用户名一致 rsync_backup
# 2.检查命令模块名
命令中的模块名要跟服务端配置文件中的模块名一致 backup
# 3.如果有密码文件,检查权限
600 root root
# 4.检查密码文件内容
只需要写密码
# 5.检查环境变量中的密码
[root@server ~]# echo $RSYNC_PASSWORD
passwd123
5、Rsync企业级备份案例
环境准备
主机名 | IP | 角色 |
---|---|---|
server | 192.168.111.30 | rsync服务端 |
client | 192.168.111.40 | rsync客户端 |
客户端需求
- 客户端每天凌晨3点备份/etc目录至/backup下以"主机名_IP地址_当前时间命名"的目录中
- 客户端推送/backup目录下数据备份目录至Rsync备份服务器
- 客户端只保留最近七天的备份数据,避免浪费磁盘空间
服务端需求
- 服务端部署rsync服务,用于接收用户的备份数据
- 服务端每天校验客户端推送过来的数据是否完整,并将结果以邮件的方式发送给管理员
- 服务端仅保留6个月的备份数据
注意:所有服务器的备份目录均为/backup,所有脚本存放目录均为/scripts。
服务端部署rsync服务
[root@server ~]# mkdir /scripts
[root@server ~]# vim /scripts/rsync_server.sh
#!/bin/bash
#安装rsync服务
yum -y install rsync
#修改服务配置文件
cat > /etc/rsyncd.conf << EOF
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 4
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
EOF
#创建服务用户,创建数据备份目录并设置权限
useradd -r -M -s /sbin/nologin rsync
mkdir /backup
chown -R rsync.rsync /backup
#生成数据传输用户密码文件并设置权限
echo "rsync_backup:passwd123" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
#设置服务开机自启,并重启服务
systemctl enable rsyncd
systemctl restart rsyncd
[root@server ~]# chmod +x /scripts/rsync_server.sh
[root@server ~]# /scripts/rsync_server.sh
客户端备份数据并推送至rsync服务器
[root@client ~]# mkdir /scripts
[root@client ~]# vim /scripts/etc_backup.sh
#!/bin/bash
#客户端安装rsync
yum -y install rsync
#配置rsync客户端虚拟用户密码
export RSYNC_PASSWORD='passwd123'
#创建备份目录
mkdir -p /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")
#打包备份/etc目录下的数据至备份目录中
tar -zcf /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/etc_backup.tar.gz /etc/
#计算备份文件的校验值
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
#将打包备份好的数据推送到rsync备份服务器
rsync -az /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F") rsync_backup@192.168.111.30::backup
#删除七天前的备份文件
find /backup/ -mtime +7 | xargs rm -rf
[root@client ~]# chmod +x /scripts/etc_backup.sh
[root@client ~]# crontab -e
0 3 * * * /scripts/etc_backup.sh
服务端校验数据并将结果以邮件发送给管理员:
#配置邮件服务
[root@server ~]# yum -y install mailx
[root@server ~]# cat > /etc/mail.rc << EOF
# 发送的邮件地址
set from=483607723@qq.com
# 发送邮件服务器
set smtp=smtps://smtp.qq.com:465
# 发件人账号,一般情况下为邮件地址
set smtp-auth-user=483607723@qq.com
# 发件邮箱的授权码
set smtp-auth-password=xxxxxxxxxx
# 认证方式
set smtp-auth=login
# 忽略证书警告
set ssl-verify=ignore
# 证书所在目录
set nss-config-dir=/etc/pki/nssdb/
EOF
#配置脚本校验数据并将结果发送给管理员
[root@server ~]# vim /scripts/checksum.sh
#!/bin/bash
#校验备份数据并将结果发送给管理员
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
#删除6个月以前的备份数据
find /backup/ -mtime +180 | xargs rm -rf
[root@server ~]# chmod +x /scripts/checksum.sh
[root@server ~]# crontab -e
0 5 * * * /scripts/checksum.sh