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

news2024/11/15 13:36:03

目录

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命令选项

-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角色
server192.168.111.30rsync服务端
client192.168.111.40rsync客户端

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角色
server192.168.111.30rsync服务端
client192.168.111.40rsync客户端

客户端需求

  • 客户端每天凌晨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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1gV4y117UD/ 《安富莱嵌入式周报》第315期&#xff1a;开源USB…

618期间该如何入手数码好物,列举几款618值得入手的数码好物

跟不少数码爱好者一样&#xff0c;在618、双十一这种大型电商促销节日中&#xff0c;都会选择入手几款心仪且实用的数码好物毕竟产品的热度可以说是相当的在线&#xff0c;而明天就是618的最后一天了&#xff0c;为了赶紧抓住最后的脚步&#xff0c;下面我将给大家分享一些618值…

CefSharp89-winform浏览器(支持H264,MP3,MP4等音视频)x86体验

cef89.*-cefsharp89.*版本应用体验-浏览器 欢迎体验cefsharp-winform-浏览器版本更新方法**测试视频播放**正常![播放视频测试正常](https://img-blog.csdnimg.cn/263f7199ef3c4f1fba59302355e5372d.png)兼容性测试(html5test.com)下载地址其他版本参阅:欢迎体验cefsharp-wi…

华为OD机试之整数对最小和

整数对最小和 题目描述 给定两个整数数组array1、array2&#xff0c;数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构成一对元素&#xff0c;现在需要取出k对元素&#xff0c; 并对取出的所有元素求和&#xff0c;计算和的最小值。 注意&#xff1a; 两…

网安等保 | 主机安全之CentOS8服务器配置优化与安全加固基线文档脚本分享

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

C语言解决“三天打鱼两天晒网”的问题?

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打 鱼两天晒网”&#xff0c;问这个人在以后的某一天是“打鱼”还是“晒网”&#xff1f; 根据题意可以将解题过程分为三步&#xff1a; &#xff08;1&#xff09;计算从1990年1月1日开始至指定日…

Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?

目录 一、前言 二、那个午后 三、跟webpack构建产物到底哪里不一样&#xff1f; 1. 准备工作 2. 构建工具版本说明 3. 构建工具配置项说明 4. 构建产物 5. Vite 的原生模块化能力 6. “魔鬼藏在细节中” 四、总结 一、前言 对前端开发者来说&#xff0c;Vite 应该不算…

Gurobi解决优化问题

Gurobi1介绍 Gurobi是一种优化软件&#xff0c;用于解决各种数学规划和整数规划问题。它提供了高性能的数学规划求解器&#xff0c;可用于最大化或最小化目标函数的线性规划、混合整数规划、二次规划、约束规划等问题。 Gurobi具有强大的求解能力和高效的算法&#xff0c;可以…

SpringBoot+Durid+dynamic-datasource实现多数据源分布式事务

SpringBootDuriddynamic实现多数据源分布式事务 引言&#xff1a; 在现代的应用程序中&#xff0c;使用多个数据源来处理不同的业务需求已成为常态。然而&#xff0c;处理多数据源之间的分布式事务是一个复杂的问题。本文将介绍如何使用Spring Boot、Druid和dynamic-datasourc…

java娱乐新闻系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目wap

一、源码特点 java 娱乐新闻系统是一套完善的java web wap信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

python---------bs4爬取数据的一种神器

作者前言 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda 目录 Beautiful Soup的简介 解析⼯具对⽐ BeautifulSoup的基本使⽤ 解析器 搜索⽂档树 CSS常⽤选择器介绍 select和css选择器提取元素 _______________________________________________ 前面我已经…

MongoDB快速实战与基本原理-01

一、MongoDB介绍 1、什么是MongoDB MongoDB是 一个文档数据库&#xff08;以 JSON 为数据模型&#xff09; &#xff0c;由C语言编写&#xff0c;旨在 为 WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于“ JSON Document”&#xff0c;并非我们一般理解的 PDF&am…

Nik Color Efex 滤镜详解(2/5)

交叉冲印 Cross Processing 提供多种选项来处理 C41 - E6&#xff08;用幻灯片显影液处理彩色底片&#xff09;和 E6 - C41&#xff08;用彩色底片显影液处理幻灯片&#xff09;。 方法 Method 选择预设。 强度 Strength 控制滤镜效果程度。 黑暗对比度 Dark Contrasts 使用新…

这本书解开了我心中多年的疑惑,也推荐给你

我对地理一直比较感兴趣&#xff0c;中学时知识掌握的比较扎实&#xff0c;分得清洋流走向、季风信风、世界渔场等等&#xff0c;长期闲置不用已经遗忘的差不多。当时看地理真的是地理&#xff0c;现在看地理&#xff0c;不单单只是地理&#xff0c;还有政治、军事、经济、文化…

港科夜闻|香港科大工学院陈浩教授获选2023年亚洲青年科学家

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大工学院陈浩教授获选2023年亚洲青年科学家。亚洲青年科学家基金项目于2022年推出&#xff0c;是一项私人资助的研究奖学金计划&#xff0c;旨在鼓励和支持亚洲区内的青年科学家进行推动变革的创新研究&#xff0c…

springCloudAlibaba组件-Nacos-服务注册与心跳机制(二)

文章目录 nacos服务注册流程图专业术语服务注册执行流程 nacos服务注册流程图 专业术语 1.服务注册&#xff1a;为了将所有的微服务都方便管理&#xff0c;需要将自身的信息&#xff08;ip地址、端口号、服务名称&#xff09;以http请求方式调用nacos注册中心接口都放到nacos服…

有趣的数学 求和符号Σ (sigma)简述

一、简单相加 符号∑&#xff08;sigma&#xff09;通常用于表示多个项的总和。这个符号通常伴随着一个索引&#xff0c;该索引变化以包含总和中必须考虑的所有术语。 例如&#xff0c;݊第一个整数的和可以用以下方式表示&#xff1a; 或者&#xff0c;这两种表示意思都是一样…

【JS】中 ?.、??、??= 的用法和含义

今天分享几个处理空值简单的方法&#xff0c;避免使用三目运算、与或、if else时增加冗余的代&#xff0c;希望对大家有帮助。 可选链(?.) let a; let b a.?age; 含义&#xff1a; 可选链&#xff0c;只有当a存在,同时 a 具有 age 属性的时候,才会把值赋给b,否则就会将 u…

【FPGA入门】第二篇、ISE软件的使用

目录 第一部分、新建工程 第二部分、添加顶层文件 第三部分、添加管脚约束文件 第四部分、生成bit文件 第五部分、连接开发板&#xff0c;下载bit文件 第六部分、总结 第一部分、新建工程 第一步、如果提前建立了工程文件夹&#xff0c;那么这里就需要去掉生成子文件夹的…

字符串--const类型限定符、字符处理函数(修改首字母的大小写)、数值字符串向数值得转换

目录 一、const类型限定符 二、字符处理函数 三、数值字符串向函数值转换 一、const类型限定符 通过采用指针或数组作函数参数&#xff0c;可使调用者获得修改后的数据&#xff0c;但有时我们只希望将数据传到被调函数的内部&#xff0c;而并不希望它们在函数内被修改&…