Restic文件备份工具

news2024/9/21 2:41:48

一、Restic介绍

 

Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。

官方文档:Restic Documentation — restic 0.15.2 documentation

Restic优势

  • Restic 每次备份都会生成一个快照,记录当前时间点的文件结构,可以找回特定时间点的文件。通常可以实现在不清理快照时同一个文件的版本记录。
  • Restic 配置信息直接写在仓库,只要有仓库密码,在任何安装了Restic的计算机上都可以操作仓库。
  • Restic 面向的是文件备份和加密,文件先加密再传输备份,而且是增量备份,即每次只备份变化的部分。
  • Restic 可以备份数据到不同的类型的数据仓库如本地存储、SFTP、Minio等。
  • Restic 支持多种操作系统。
  • Restic 备份与恢复操作相对简单。
  • Restic 可实现备份验证,因此restic使您可以轻松验证所有数据是否可以恢复。
  • Restic 可实现备份数据加密,假设存储备份数据的位置不是受信任的环境(例如,系统管理员等其他人能够访问您的备份的共享空间)。
  • Restic 备份时可实现重复文件的去重以达到节省备份空间的目的

二、Restic的安装

Restic的安装非常简单官方提供了一个二进制文件包进行下载,下载后解压添加执行权限即可正常使用。

下载地址:https://github.com/restic/restic/releases

#下载安装包后解压
$ bzip2 -d restic_0.13.1_linux_amd64.bz2
#添加执行权限
$ chmod +x restic_0.13.1_linux_amd64
#拷贝到PATH路径
$ mv restic_0.13.1_linux_amd64 /usr/bin/restic
#验证命令
$ restic version
restic 0.13.1 compiled with go1.18 on linux/amd64

三、Restic的使用

3.1 存储库

保存备份的位置称为存储库,存储库也可以表示存储数据的数据仓库,如果没有存储库需首先创建,存储库的类型很多,根据不同类型的存储后端创建不同类型的存储库。以下只介绍一些常见的存储库。

存储库创建命令restic init

创建存储库时需要设置存储库的密码,注意如果密码丢失或者忘记将无法访问存储库中存储的数据。对于自动备份或者脚本备份的存储库可通过以下方式避免交互式。

  • 设置环境变量 RESTIC_PASSWORD
$ export RESTIC_PASSWORD=123456
$ restic -r s3:http://192.168.10.254:9000/restic snapshots
  • 通过选项或环境变量使用密码指定文件的路径--password-fileRESTIC_PASSWORD_FILE
#创建密码文件
$ cat pass 
123456
#使用参数
$ restic -r s3:http://192.168.10.254:9000/restic snapshots --password-file pass
#使用变量
$ export RESTIC_PASSWORD_FILE=/root/pass
$ restic -r s3:http://192.168.10.254:9000/restic snapshots
  • 配置在需要密码时通过选项或环境变量调用的程序--password-commandRESTIC_PASSWORD_COMMAND
#使用参数
$ restic -r s3:http://192.168.10.254:9000/restic snapshots --password-command 'echo 123456'
#使用变量
$ export RESTIC_PASSWORD_COMMAND='echo 123456'
$ restic -r s3:http://192.168.10.254:9000/restic snapshots

1.本地存储库创建

本地存储库就是在本地通过命令在文件系统初始化存储库,如果不进行特殊设置即只有本机可使用,可以通过其他文件共享的方式让多个主机使用。

#创建
$ restic init --repo /opt/backup
#验证
$ ll /opt/backup/
total 16
-r--------   1 root root  155 Jul 17 18:40 config
drwx------ 258 root root 8192 Jul 17 18:40 data
drwx------   2 root root    6 Jul 17 18:40 index
drwx------   2 root root   78 Jul 17 18:40 keys
drwx------   2 root root    6 Jul 17 18:40 locks
drwx------   2 root root    6 Jul 17 18:40 snapshots
  • --repo: 指定本地文件系统目录

2.REST存储库创建

为了通过HTTP或HTTPS协议将数据备份到远程服务器,必须首先设置远程REST服务器实例。

部署rest服务器:https://github.com/restic/rest-server

#下载安装包解压
$ tar xf rest-server_0.11.0_linux_amd64.tar.gz
#拷贝执行文件
$ mv rest-server_0.11.0_linux_amd64 /usr/local/rest-server
#生成认证文件
$ htpasswd -B -c .htpasswd zhangzhuo
$ mv htpasswd /data1/rest-server/.htpasswd
#创建数据目录
$ mkdir /data1/rest-server -p
#创建服务启动文件
$ cat /etc/systemd/system/rest-server.service 
[Unit]                                                                                                                                         
Description=rest-server
Wants=network-noline.target
After=network-noline.target

[Service]
WorkingDirectory=/data1/rest-server
ExecStart=/usr/local/rest-server/rest-server --path /data1/rest-server
Restart=always

[Install]
WantedBy=multi-user.target
#启动设置开机自启
$ systemctl enable --now rest-server.service
#访问测试,端口默认8000
$ curl 127.0.0.1:8000
Unauthorized

配置服务器后,可以通过更改URL方案来实现访问它,如下所示。

$ restic -r rest:http://zhangzhuo:123456@192.168.10.11:8000/ init

3.Minio存储库创建

Minio 是一个开源对象存储,用 Go 编写,与 Amazon S3 API 兼容

#配置minio的认证信息
export AWS_ACCESS_KEY_ID=minio
export AWS_SECRET_ACCESS_KEY=minio123
#创建存储库
restic -r s3:http://192.168.10.254:9000/restic init

#其他有用参数
--insecure-tls  #如果是自签名证书可以选择强制跳过

4.管理存储库密钥

#查看所有密钥
restic -r s3:http://192.168.10.254:9000/restic key list
#添加密钥
restic -r s3:http://192.168.10.254:9000/restic key add
#删除密钥
restic -r s3:http://192.168.10.254:9000/restic key remove 77ac7b7e
#修改密钥密码,当前使用的那个账户即修改那个账户的密码
restic -r s3:http://192.168.10.254:9000/restic key passwd

3.2 快照使用

Restic中备份被称为快照。以下示例使用minio存储库进行示例。

1.创建快照

使用restic -r [存储库] --verbose backup [备份目录]即可实现备份。

注意:restic多次备份依据主机名称与备份目标目录名称区别是否备份的是之前备份过的。

  • --verbose:数据信息级别,可以使用更高级别的信息显示如--verbose=2
$ restic -r s3:http://192.168.10.254:9000/restic --verbose backup /etc
open repository
repository 945d24e5 opened successfully, password is correct
lock repository
load index files
no parent snapshot found, will read all files
start scan on [/etc]
start backup on [/etc]
scan finished in 0.256s: 1702 files, 26.968 MiB  #总共处理了多少数据

Files:        1702 new,     0 changed,     0 unmodified
Dirs:          604 new,     0 changed,     0 unmodified
Data Blobs:   1283 new
Tree Blobs:    539 new
Added to the repo: 23.832 MiB  #总共处理

processed 1702 files, 26.968 MiB in 0:00  #存储库中实际添加了多少数据,比实际处理小这意味着一些数据是重复的。
snapshot 6555e87a saved  #快照的标识符,也就是名称

2.文件检测更改

当 restic 遇到已备份的文件时,无论在当前备份还是之前备份,它都会确保文件的内容仅在存储库中存储一次。因此默认它通常必须扫描每个文件的全部内容,会进行下载比较如果文件较大会产生的代价非常昂贵,因此restic还使用基于文件元数据的更改检测规则来确定文件是否可能自上次备份以来未发生更改。如果是,则不会再次扫描该文件。

仅对常规文件(而不是特殊文件、符号链接或目录)执行更改检测,这些文件的路径与同一位置的先前备份中的路径完全相同。如果文件或其包含目录之一被重命名,则会将其视为其他文件,并且将再次扫描其全部内容。

Unix(包括 Linux 和 Mac)上,假设文件与先前备份中的文件位于同一位置,则以下文件元数据属性必须匹配才能推定其内容不变。

  • 修改时间戳(mtime)。
  • 元数据更改时间戳 (ctime)。
  • 文件大小。
  • Inode 编号(用于在文件系统中引用文件的内部编号)。

要求mtime和ctime匹配的原因是Unix程序可以自由更改mtime(有些程序可以)。在这种情况下,ctime 更改可能是文件已更改的唯一提示。

以下命令行标志修改更改检测规则

  • --force:关闭更改检测并重新扫描所有文件。
  • --ignore-ctime:需要 mtime 才能匹配,但允许 ctime 不同。
  • --ignore-inode:需要 mtime 才能匹配,但允许 inode 编号和 ctime 不同。
restic -r s3:http://192.168.10.254:9000/restic --verbose backup /etc --force

3.试运行

可以在试运行模式下执行备份,以查看在不修改存储库的情况下会发生什么情况

restic -r s3:http://192.168.10.254:9000/restic backup /etc --dry-run -vv

4.筛选文件

排除文件

  • --exclude指定一次或多次以排除一个或多个项目
  • --iexclude与路径相同但忽略路径的情况--exclude
  • --exclude-caches指定一次以排除包含特殊文件的文件夹
  • --exclude-file指定一次或多次以排除给定文件中列出的项目
  • --iexclude-file与 相同,但忽略像exclude-file``--iexclude
  • --exclude-if-present foo指定一次或多次以排除文件夹的内容(如果该文件夹包含名为 的文件(可选具有给定标头,不支持文件名的通配符)foo
  • --exclude-larger-than size指定一次以排除大于给定大小的文件
restic -r s3:http://192.168.10.254:9000/restic backup /etc --exclude="*.c" --exclude-file=excludes.txt

包含文件

并允许您为 restic 提供一个包含要备份的文件模式或路径列表的文件。这很有用,例如,当您想要从许多不同的位置备份文件时,或者当您使用其他一些软件来生成要备份的文件列表时

$ cat 1 
/etc
/opt
/tmp
$ restic -r s3:http://192.168.10.254:9000/restic backup --files-from 1

5.比较快照

Restic 有一个 diff 命令,它显示两个快照之间的差异并显示一个小的统计信息,只需传递两个快照 ID 的命令

$ restic -r s3:http://192.168.10.254:9000/restic diff 7629554a 29328031

6.备份退出状态码

运行备份命令后,Restic 返回以下退出状态代码之一,一般在备份结束后验证备份状态时使用。

  • 备份成功时为 0(创建所有源文件的快照)
  • 1 出现致命错误时(未创建快照)
  • 3 当某些源文件无法读取时(不完整的快照,其余文件已创建)
$ restic -r s3:http://192.168.10.254:9000/restic backup /etc/
#验证
echo $?

7.列出所有快照

$ restic -r s3:http://192.168.10.254:9000/restic snapshots

8.检查完整性和一致性

最好定期使用该命令来测试您的存储库是否正常且一致,以及您宝贵的备份数据是否不受损害。可以执行两种类型的检查

  • 结构一致性和完整性,例如快照、树和包文件(默认)restic -r [存储库] check
  • 备份的实际数据的完整性restic -r [存储库] check --read-data
$ restic -r s3:http://192.168.10.254:9000/restic check

#备份实际数据完整性检查,由于必须下载存储库中的所有包文件,因此请注意,它可能会产生比平时更高的带宽成本,并且比默认文件花费更多的时间
$ restic -r s3:http://192.168.10.254:9000/restic check --read-data

9.删除快照

所有备份空间都是有限的,因此 restic 允许删除旧快照。这可以手动完成(通过指定要删除的快照 ID)或使用描述要忘记哪些快照的策略来完成。对于所有删除操作,需要依次调用两个命令:forget删除快照,以及 prune删除仅由已删除快照引用的剩余数据。后者可以通过选项自动运行,如果实际删除了任何快照,该--prune选项会自动运行

单独运行删除命令

#查看快照
$ restic -r s3:http://192.168.10.72:9000/restic snapshots
repository 9a79b94a opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------
95a8af65  2022-07-19 17:04:25  centos7                 /etc
639a13e2  2022-07-19 17:04:40  centos7                 /etc
------------------------------------------------------------
2 snapshots
#删除快照
$ restic -r  s3:http://192.168.10.72:9000/restic forget 95a8af65
#快照删除后此快照中的文件引用的数据仍存储在存储库中。要清理未引用的数据,prune 必须运行命令
$ restic -r s3:http://192.168.10.72:9000/restic prune

一起运行删除并且清理

$ restic -r s3:http://192.168.10.72:9000/restic forget 639a13e2 --prune

根据策略删除快照

手动删除快照既乏味又容易出错,因此 restic 允许指定--keep-*要保留快照的策略(一个或多个选项)。例如,您可以定义要保留多少每小时、每天、每周、每月和每年的快照,并且将删除任何其他快照。

  • --keep-last n保留n最后(最近的)快照。
  • --keep-hourly n对于有一个或多个快照的最后n几个小时,每个小时只保留最近的一个。
  • --keep-daily n对于有一个或多个快照的最后n几天,每天只保留最近的一个。
  • --keep-weekly n对于有一个或多个快照的最后n几周,每周只保留最近的一个。
  • --keep-monthly n对于有一个或多个快照的最后n几个月,每个月只保留最近的一个。
  • --keep-yearly n对于有一个或多个快照的最后n几年,每年只保留最近的一个。
  • --keep-tag保留具有此选项指定的所有标签的所有快照(可以指定多次)。
  • --keep-within duration将所有具有时间戳的快照保留在最新快照的指定持续时间内,其中duration是年数、月数、天数和小时数。例如2y5m7d3h,将保留在最近(最近)快照之前两年、五个月、7 天和三个小时内制作的所有快照。
  • --keep-within-hourly duration保留在最新快照的指定持续时间内制作的所有每小时快照。的duration指定方式与 for 相同--keep-within,确定每小时快照的方法与 for 相同--keep-hourly
  • --keep-within-daily duration保留在最新快照的指定持续时间内制作的所有每日快照。
  • --keep-within-weekly duration保留在最新快照的指定持续时间内制作的所有每周快照。
  • --keep-within-monthly duration保留在最新快照的指定持续时间内制作的所有月度快照。
  • --keep-within-yearly duration保留在最新快照的指定持续时间内制作的所有年度快照
#保留同一个主机同一个备份目标的3个快照其余全部删除
$ restic -r s3:http://192.168.10.72:9000/restic forget --keep-last 3 --prune

10.快照恢复

快照恢复使用restic -r [存储库] restore [快照id] --target [恢复到哪里]

  • 恢复时可以使用dump将整个文件夹结构的内容输出到标准输出。Restic 将以 tar(默认)或 zip 格式输出内容

    • restic -r [存储库] dump -a zip [快照id] [快照备份路径] > [压缩包名称].zip
  • 恢复过滤--exclude--include,可以只恢复单个文件

    • restic -r [存储库] restore [快照id] --target [恢复目的路径] --include [选择恢复的文件或目录路径]
#以下为全部恢复
$ restic -r s3:http://192.168.10.72:9000/restic restore ff00e6a6 --target /tmp/1
#恢复单个文件
restic -r s3:http://192.168.10.72:9000/restic restore ff00e6a6 --target /tmp/1 --include /opt/etc/fstab
#恢复文件到压缩包
restic -r s3:http://192.168.10.72:9000/restic dump -a zip ff00e6a6 /opt/etc  > restore.zip

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

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

相关文章

一个自动下载网页图片的python小程序

文章目录 1.一些杂七杂八的引入2.实现2.1 安装所需python包2.1.1 requests包2.1.1 BeautifulSoup包 3.源码分享4.效果展示 1.一些杂七杂八的引入 最近是端午节,本人碰巧又刚考完试(数学砸了,估分115,别的还行) 于是……

Oracle 查询优化改写(第六章)

第六章 使用数字 1 常用聚集函数(空值处理) 2 生成累计和 --公司为了查看用人成本,需要对员工的工资进行累加, --以便查看员工人数与工资支出之间的对应关系。 SELECT Empno,Ename,Sal,SUM(Sal) Over(ORDER BY Empno) AS 成本累…

绿色能源外交:国际间合作促进可再生能源全球普及

随着全球气候变化的威胁日益凸显,减少碳排放和转向可持续能源已经成为国际社会的共同目标。在这个背景下,绿色能源外交应运而生。绿色能源外交是指国际间合作,通过技术转让、政策协调和资金支持等手段,推动可再生能源在全球范围内…

文字PDF转换为图片格式的PDF

在我们的日常工作和生活中,有时候我们需要对PDF文件进行一些特殊处理。有时候,我们希望将PDF的每一页提取出来作为图片,方便在其他场景中使用;而有时候,我们则需要将PDF内的内容转换为图片格式,以防止他人对…

docker 操作手册

名词解释 images:封装了应用程序的镜像 tag:镜像的标记,一个镜像可以创建多个标记 container:装载镜像并运行 常用命令 查看容器 docker ps -a //查看全部镜像 启动容器 docker start mysql //启动mysql容器 停止容器 doc…

Python篇——数据结构与算法(第七部分:树)

目录 1.树与二叉树 2.树的实例:模拟文件系统 3.二叉树 4.二叉树的遍历 5.二叉搜索树 5.1插入 5.2查询 5.3删除 1.树与二叉树 2.树的实例:模拟文件系统 # 树的实例 class Node:def __init__(self, name, typedir):self.name nameself.type typ…

springboot集成mybatisPlus

1、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-jav…

Mysql快速生成Java实体类

需求缘由 在使用MybatisPlus过程中&#xff0c;就肯定会创建实体类&#xff0c;虽然 MybatisPlus 也为我们提供了代码生成器&#xff0c;但是我感觉功能有点多了&#xff0c;我只需要创建实体的方法即可&#xff0c;假如我想快速将上述表转为如下的Bean对象&#xff0c;该怎么搞…

arcgis api for JavaScript4.2x 在vue中白膜图层的加载、(分类、分段)渲染

这篇文章是对有webgis前端开发经验的人 1、假设之前的三维视图均已成功加载&#xff0c;获取到了三维视图&#xff0c;这里的三维视图变量定义的名字是mapView。&#xff08;PS&#xff1a;三维视图mapview在项目初始化已经设置了&#xff0c;本示例中会直接使用调用结果&…

CentOS 8安装Oracle 19c rpm包

一、环境 centos 8 oracle 19c rpm安装 二、安装前准备 1、创建用户组 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle2、安装依赖包 如果yum找不到安装包&#xff0c;可以去下载 https://centos.pkgs.org/ 点击跳转 缺少的依赖包可…

Salesforce流程自动化Flow_Pause功能揭秘!

通过自动化&#xff0c;帮助团队提升效率&#xff0c;将员工从那些重复、枯燥、耗时的工作中解放出来&#xff0c;转而从事更具创造性、更有价值的工作&#xff0c;是很多企业数字化转型朴素而又迫切的需求&#xff0c;也是世界No.1 CRM——Salesforce的一大领先优势。 Flow B…

Java集合框架:优先级队列、PriorityQueue详解

目录 一、优先级队列介绍 1. 什么是大根堆&#xff08;大堆&#xff09;和小根堆&#xff08;小堆&#xff09; 2. 堆的性质 二、堆的创建 1. 向下调整建堆 向下调整算法代码实现&#xff1a; 2. 创建大根堆 三、堆的插入和删除&#xff08;向上调整算法&#xff09; …

Linux性能瓶颈分析之TOP指标分析

Linux性能瓶颈分析之TOP指标分析 文章目录 Linux性能瓶颈分析之TOP指标分析一、查看CPU二、监控CPU总结 一、查看CPU 1.查看cpu基础信息 lscpu2.查看cpu详细信息 cat /proc/cpuinfo3.统计cpu信息 cat /proc/cpuinfo |grep "physical id" |sort |uniq |wc -l 查看…

骨传导耳机可以长期佩戴吗,分享几款舒适度极高的骨传导耳机

近几年有一种新型传播方式的耳机&#xff0c;将声音转化为振动&#xff0c;从而让我们的听觉神经感知到。这种声音传播方式叫做"骨传导"&#xff0c;所以叫做骨传导耳机。因为它不需要通过耳膜进行传播声音&#xff0c;所以可以让耳朵在不接触外界的情况下听到声音。…

B051-cms06-退出 回车登录 登录拦截 记住我 SVN

目录 注销功能实现1.找到退出按钮修改请求路径2.后端删除Session并跳转到登录页面 回车登录功能登陆拦截1.编写登录拦截器2.配置拦截器 记住我后端实现页面实现 取消记住我后端实现页面实现 注销功能实现 1.找到退出按钮修改请求路径 header.jsp <% page language"j…

翻过那座山——Jenkins编译发布web程序(.net framework web application)

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不是…

无法登录github解决方法

140.82.113.4 github.com 199.232.69.194 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.110.153 assets-cdn.github.com 185.199.111.153 assets-cdn.github.com 注意以管理员方式运行notepad才能保存 …

Github上标星40K的Java面试笔记,解决95%以上的Java面试

该文档在Github上收获40Kstar的Java面试神技&#xff08;这赞数&#xff0c;质量多高就不用我多说了吧&#xff09;非常全面&#xff0c;包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、计算机网络、分布式…

集成学习(ensemble learning)应如何入门?

集成学习算法之间的主要区别在于以下3个方面: 提供给个体学习器的训练数据不同; 产生个体学习器的过程不同; 学习结果的组合方式不同&#xff0c;从这三个方面去学。 多样性 数据样本多样性&#xff1a;产生数据多样性的方法主要有3种: 输入样本扰动; 输入属性扰动; 输出表示…

掌握Python的常用模块pandas

Pandas 简介 Pandas 是 Python 的核心数据分析支持库&#xff0c;提供了快速、灵活、明确的数据结构&#xff0c;旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具&#xff0c;其长远目标是成为最强大、最灵活、可以支持…