赞
踩
目录
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 是一个的命令行工具,支持在不同对象存储、网盘间同步、上传、下载数据。并且通过一些设置可以实现离线下载、服务器备份等非常实用的功能。与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 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。
Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。
项目地址:https://github.com/restic/restic
Restic 支持的存储种类比较多,大致有如下这些类型:
我是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)。这时执行命令时会提示repository is already locked by PID xxxx
这种的错误。
解决办法:
restic -r repo unlock
也可以在你要执行的命令后加--nolock
,例如查看快照:restic -r repo snapshots --nolock
查看有哪些锁:
restic -r repo list locks
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.1 数据推送(上传)
所有主机推送本地数据至Rsync备份服务器,这样会导致数据同步缓慢(适合少量数据备份)
2.2 数据拉取(下载)
rsync备份服务端拉取所有主机上的数据,这样操作会导致备份服务器压力比较大(适合较少服务器场景)
2.3 大量服务器备份场景
2.4 异地备份实现思路
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::配置文件中的模块名
主机名 | 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
环境准备
主机名 | IP | 角色 |
---|---|---|
server | 192.168.111.30 | rsync服务端 |
client | 192.168.111.40 | rsync客户端 |
客户端需求
服务端需求
注意:所有服务器的备份目录均为/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
...
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。