目录
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://[email protected]//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://[email protected]//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://[email protected]/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 [email protected]::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 [email protected]::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 [email protected]::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 [email protected]::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") [email protected]::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 [email protected]
# 发送邮件服务器
set smtp=smtps://smtp.qq.com:465
# 发件人账号,一般情况下为邮件地址
set [email protected]
# 发件邮箱的授权码
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")" [email protected]
#删除6个月以前的备份数据
find /backup/ -mtime +180 | xargs rm -rf
[root@server ~]# chmod +x /scripts/checksum.sh
[root@server ~]# crontab -e
0 5 * * * /scripts/checksum.sh
文章浏览阅读3.8k次,点赞2次,收藏6次。Dataframe中多条件column筛选:df[(df.c1==1) & (df.c2==1)]注意小括号的使用,df.c1 = df[‘列名’]_dataframe筛选多条件
文章浏览阅读442次,点赞10次,收藏5次。谱减法+小波变换+改进的EMD算法语音去噪完整的代码,方可运行;可提供运行操作视频!适合小白!_小波变换和emd
文章浏览阅读7.1k次,点赞7次,收藏37次。1、原理图库可以随便画,只要相应的相应的管脚有就可以2、原理图库的管脚标数和pcb图库的管脚是一一对应的3、画pcb图库的时候,元件的长宽要适当,可以设置格子的大小来便于设置画出pcb图库的大小。管脚的标数是和原理图库是一一对应的。4、画原理图库的时候,元件必须摆放在画板中心,再保存。否则话pcb原理图的时候,器件总是拖不进去。5、画pcb图库的时候要设置参考点,否则在生成的印制电..._pcb怎么画斜线
文章浏览阅读630次。出现问题:ValueError: Dimension 1 in both shapes must be equal, but are 28 and 324. Shapes are [1024,28] and [1024,324]. for ‘Assign_682’ (op: ‘Assign’) with input shapes: [1024,28], [1024,324].这是由于维度的原因不同所造成。修改了train.py 的第60行成功!如果还未成功,看几个地方是否一样:1 train._valueerror: dimension 1 in both shapes must be equal, but are 324 and 12. sh
文章浏览阅读1.1w次。var json = eval("("+data+")");//将json类型字符串转换为json对象注:https://www.cnblogs.com/yuxiaona/p/5853732.html
文章浏览阅读793次,点赞7次,收藏9次。线性空间(也叫向量空间)、线性运算_线性空间定义
文章浏览阅读936次。之前发了很多有关C/C++项目的文章。但是对于C语言的学习,需要自己亲自敲一些代码才能够学好C语言。在这里讲解一下简单的C语言程序(代码),希望自己能够在自己的电脑上敲几遍。a与b的算术运算描述:输出a和b的初始化值的简单算术运算。代码:输出结果:分析:printf函数是将双引号中的内容输出到弹出框中,其中因为a和b的数据类型都是int型,所以运算结果都要用%d的形式输..._简单的c语言代码解析
文章浏览阅读3.8k次。1.k-means算法的思想k-means算法是一种非监督学习方式,没有目标值,是一种聚类算法,因此要把数据划分成k个类别,那么一般k是知道的。那么假设k=3,聚类过程如下:随机在数据当中抽取三个样本,当做三个类别的中心点(k1,k2,k3);计算其余点(除3个中心点之外的点)到这三个中心点的距离,每一个样本应该有三个距离(a,b,c),然后选出与自己距离最近的中心点作为自己的标记,形成三个簇群;..._kmeans 计算类内平均距离
文章浏览阅读1.7k次。前端使用<link href="https://fonts.googleapis.com/css2?family=Material+Icons" rel="stylesheet">由于访问fonts.googleapis.com不稳定,所以经常出现图标访问不到_material icons 无法访问
文章浏览阅读647次。项目开发中,在做mybatis动态查询时,遇到了一个问题:mysql在进行like模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空。由于是使用get方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码。try {realname = new string(realname.getbytes("gbk"), "utf-8");} catch (un..._通过java查询mysql 模糊查询中文失效
文章浏览阅读1.8k次。第0步:声明一个线程、一个事件CWinThread* m_hThread; //接收线程的句柄HANDLE hStartEven; //第一步:定义自己的消息#define MY_MESSAGE WM_USER+100第二步:在发送消息的线程中//得到需要传输的数据 CString str; GetDlgItemText..._mfc中主进程和子线程共享数据
文章浏览阅读7.7k次,点赞3次,收藏12次。2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup2020年网鼎杯白虎组赛题.zip下载https://download.csdn.net/download/jameswhite2417/124212670x00 签到操作内容:完成游戏,通过第7关,让提交队伍token值提交后获得flag通过qq截图,文字识别FLAG值:flag{f6e5************************3112}0x01 hidden操作内容:.._网鼎杯网络安全大赛比赛题目