restic开源跨平台备份工具 —— 筑梦之路

本文详细介绍了Restic,一个快速、安全、高效的备份工具,支持多种存储选项,包括本地、云存储以及通过Rclone挂载的存储。文章涵盖了Restic的设计原则、术语、安装方法,以及如何在本地和远程环境中进行备份、检查、恢复和管理存储。
摘要由CSDN通过智能技术生成

github仓库:GitHub - restic/restic: Fast, secure, efficient backup program

文档地址:Restic Documentation — restic 0.16.4 documentation

支持类型

  • 本地存储
  • SFTP
  • REST Server
  • Amazon S3
  • Minio Server
  • OpenStack Swift
  • Backblaze B2
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • 通过 Rclone 挂载的存储 (比如:Google Drive、OneDrive 等)

设计原则

  • 简单:备份应该是一个顺畅的过程,否则您可能会想跳过它。 Restic 应该易于配置和使用,以便在数据丢失的情况下,您可以直接恢复它。同样,恢复数据不应该很复杂。
  • 快速:用restic备份你的数据应该只受你的网络或硬盘带宽的限制,这样你就可以每天备份你的文件。如果需要太多时间,没有人会进行备份。恢复备份应该只传输要恢复的文件所需的数据,这样这个过程也很快。
  • 可验证:比备份更重要的是恢复,因此restic使您可以轻松验证所有数据是否可以恢复。
  • 安全:Restic 使用加密技术来保证您数据的机密性和完整性。假设存储备份数据的位置不是受信任的环境(例如,系统管理员等其他人能够访问您的备份的共享空间)。 Restic 旨在保护您的数据免受此类攻击者的侵害。
  • 高效:随着数据的增长,额外的快照应该只占用实际增量的存储。更重要的是,在将重复数据实际写入存储后端之前,应该对其进行去重,以节省宝贵的备份空间。

相关术语

  • Repository:备份期间产生的所有数据都以结构化形式发送并存储在存储库中,例如在具有多个子目录的文件系统层次结构中。存储库实现必须能够完成许多操作,例如列出内容。v0.12.0中已支持的存储服务包括:aws s3,minio server,Wasabi, Aliyun OSS, OpenStack Swift,Backlbaze B2,Azure Blob Storage,Google Cloud Storage,rclone*

  • Blob:Blob 将多个数据字节与识别信息(如数据的 SHA-256 哈希及其长度),加密的数据块及元数据,其中元数据包括长度,SHA-256 哈希信息。数据块可以存放文件数据(data),也可以存放目录结构数据(tree)。Blob的大小在512KiB到8MiB之间,因此小于512KB的文件不会被拆分。Restic的实现目标是让Blob平均大小为1MiB。

  • Pack:一个包结合了一个或多个 Blob,例如在单个文件中。Restic中的单个数据文件,包括一个或多个Blob,一旦创建不再修改。

    一般只创建不删除,仅prune操作会删除不再被引用的数据。

  • Snapshot:快照代表在某个时间点已备份的文件或目录的状态。这里的状态是指内容和元数据,如文件或目录及其内容的名称和修改时间。

  • Storage ID:Pack文件的SHA256哈希值,通过这个ID可以在仓库中加载需要的数据文件。Restic将这个ID作为Pack的文件名,也就是文件的SHA256哈希值。Pack文件名即哈希值的设计也可以方便的检验数据文件是否被改动过。

安装restic

对于不同操作系统参考文档:Installation — restic 0.16.4 documentation

我这里使用源码安装

# 拉取源码
git clone https://github.com/restic/restic

# 切换目录
cd restic

# 编译源码
go run build.go

# 配置自动补全
./restic generate --bash-completion /etc/bash_completion.d/restic

本地备份

环境说明:192.168.100.100

初始化备份

restic -r /backup/ init

备份 

restic -r /backup backup /wwww
restic -r /backup backup /opt/nginx/conf

# 检查快照

restic -r /backup/ check

restic -r /backup/ snapshots

 挂载备份

restic -r /backup mount /r

清理快照

# 清理快照,只保留最新的2个

restic -r /backup/ forget --keep-last 2 --prune

# 删除指定的快照ID
restic -r /srv/restic-repo forget bdbd3432


# 清理磁盘文件
restic -r /srv/restic-repo prune

 

sftp主机间备份

环境说明:

主机A  192.168.100.100

主机B  192.168.100.101

ssh免密:

# 主机A 上

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.101

初始化备份

# 主机A上操作

restic -r sftp:root@192.168.100.101:/data_backup init

 备份

# 主机A 上操作 备份当前目录

restic -r sftp:root@192.168.100.101:/data_backup backup ./

# 查看备份

restic -r sftp:root@192.168.100.101:/data_backup snapshots

# 查看备份内容

restic -r sftp:root@192.168.100.101:/data_backup ls [snapshotsID]

恢复

# 主机A上操作 恢复到当前目录

restic -r sftp:root@192.168.100.101:/data_backup restore [snapshotsID] -t ./

restic -r sftp:root@192.168.100.101:/data_backup restore [snapshotsID] --target ./

 删除备份

# 主机A 上操作

restic -r sftp:root@192.168.100.101:/data_backup forget [snapshotsID]

指定密码文件

# 主机A上操作

#先将密码保存在/root/resticpasswd文本中
echo 'xxzxxxxxx' > /root/resticpasswd

#然后在备份命令中加--password-file参数来读取文本中的密码,这里以sftp为例

restic -r sftp:root@192.168.100.101:/data_backup --verbose backup ./ --password-file /root/resticpasswd

结合MinIO进行备份

1. cocker-compose搭建minio集群

version: '3.7'
services:
  sidekick:
    image: dalongrong/sidekick:v0.1.8
    tty: true
    ports:
    - "80:80"
    command: --health-path=/minio/health/ready --address :80 http://minio{1...4}:9000
  gateway:
    image: minio/minio:RELEASE.2020-04-04T05-39-31Z
    command: gateway s3 http://sidekick
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
    ports:
    - "9000:9000"
  minio1:
    image: minio/minio:RELEASE.2020-04-04T05-39-31Z
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    ports:
      - "9001:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_BROWSER: "off"
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
  minio2:
    image: minio/minio:RELEASE.2020-04-04T05-39-31Z
    volumes:
      - data2-1:/data1
      - data2-2:/data2
    ports:
      - "9002:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_BROWSER: "off"
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
  minio3:
    image: minio/minio:RELEASE.2020-04-04T05-39-31Z
    volumes:
      - data3-1:/data1
      - data3-2:/data2
    ports:
      - "9003:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_BROWSER: "off"
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
  minio4:
    image: minio/minio:RELEASE.2020-04-04T05-39-31Z
    volumes:
      - data4-1:/data1
      - data4-2:/data2
    ports:
      - "9004:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_BROWSER: "off"
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
volumes:
  data1-1:
  data1-2:
  data2-1:
  data2-2:
  data3-1:
  data3-2:
  data4-1:
  data4-2:
  • minio 集群的部署,参考官方文档,使用了4个节点8块盘的模式,同时使用sidecar sidecar 模式代理4个minio 节点 
  • 默认minio集群没有开启browwer ui 通过gateway 模式提供,对于数据的访问通过sidekick暴露的80 端口

2. 配置环境变量

export AWS_ACCESS_KEY_ID=minio
export AWS_SECRET_ACCESS_KEY=minio123

3. 初始化存储库

restic -r s3:http://localhost/backup init

4. 备份数据

restic -r s3:http://localhost/backup backup ./

5. 查看备份快照

restic -r s3:http://localhost/backup snapshots

# 查看备份内容

restic -r s3:http://localhost/backup ls 875a2a23

 6. 恢复快照

restic -r s3:http://localhost/backup restore 875a2a23 -t ./

以上每一步操作都需要输入密码,为了能自动化备份,优化如下:

# 创建环境变量文件
vim ~/.restic-env

export AWS_ACCESS_KEY_ID=<your-minio-access-key>
export AWS_SECRET_ACCESS_KEY=<your-minio-secret-access-key> 
export RESTIC_REPOSITORY="s3:http://your-minio-ip-address:9000/restic"
export RESTIC_PASSWORD="your-strong-repository-password"

source ~/.restic-env

# 初始化

restic init

# 备份

restic --verbose backup ~/openlake

# 查看快照

restic snapshots

# 比较快照

restic diff 1c334016 d7044fee

# 恢复快照到指定位置

restic restore 1c334016 --target /tmp/restore-openlake

restic restore latest --target /tmp/restore-new-openlake

# 定时任务,自动化备份
30 * * * * ./home/merry/.restic-env; restic backup -q /home/merry/openlake; restic forget -q --keep-last 2 --prune



  • 47
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值