目录
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
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf