跳至主要内容

Restic --备份

备份

现在我们准备好备份一些数据。在特定时间点的目录内容在restic中被称为“快照”。运行以下命令并再次输入上面选择的存储库密码:
$ restic -r /srv/restic-repo --verbose backup ~/work
open repository
enter password for repository:
password is correct
lock repository
load index files
start scan
start backup
scan finished in 1.837s
processed 1.720 GiB in 0:12
Files:        5307 new,     0 changed,     0 unmodified
Dirs:         1867 new,     0 changed,     0 unmodified
Added:      1.700 GiB
snapshot 40dc1520 saved
正如你所看到的,restic创建了该目录的备份并且速度非常快!40dc1520在这种情况下,刚刚创建的特定快照由一系列十六进制字符标识
如果你没有通过这个--verbose选项,restic将打印更少的数据(但你仍然会得到一个很好的实时状态显示)。
如果再次运行该命令,restic将会创建另一个数据快照,但这次更快。这是工作中的重复数据删除!
$ restic -r /srv/restic-repo backup --verbose ~/work
open repository
enter password for repository:
password is correct
lock repository
load index files
using parent snapshot d875ae93
start scan
start backup
scan finished in 1.881s
processed 1.720 GiB in 0:03
Files:           0 new,     0 changed,  5307 unmodified
Dirs:            0 new,     0 changed,  1867 unmodified
Added:      0 B
snapshot 79766175 saved
您甚至可以在同一个存储库中备份单个文件(不通过 --verbose意味着减少输出):
$ restic -r /srv/restic-repo backup ~/work.txt
enter password for repository:
password is correct
snapshot 249d0210 saved
如果您对restic的功能感兴趣,请--verbose两次(或 )显示有关每个文件和目录restic遭遇的详细信息:--verbose 2
$ echo 'more data foo bar' >> ~/work.txt

$ restic -r /srv/restic-repo backup --verbose --verbose ~/work.txt
open repository
enter password for repository:
password is correct
lock repository
load index files
using parent snapshot f3f8d56b
start scan
start backup
scan finished in 2.115s
modified  /home/user/work.txt, saved in 0.007s (22 B added)
modified  /home/user/, saved in 0.008s (0 B added, 378 B metadata)
modified  /home/, saved in 0.009s (0 B added, 375 B metadata)
processed 22 B in 0:02
Files:           0 new,     1 changed,     0 unmodified
Dirs:            0 new,     2 changed,     0 unmodified
Data Blobs:      1 new
Tree Blobs:      3 new
Added:      1.116 KiB
snapshot 8dc503fc saved
实际上,多个主机可以使用同一个存储库来备份目录和文件,从而实现更大的重复数据删除。
请注意,当你备份不同的目录时(或者要保存的目录有一个像日期/时间这样的变量名称组件)时,restic总是需要读取所有文件,之后才能计算需要保存哪些文件的部分。当您再次备份相同的目录(可能包含新文件或更改后的文件)时,restic将在回购中找到旧快照,默认情况下只会读取自上次快照以来新增或修改的文件。这是根据文件系统中文件的修改日期决定的。
现在是运行验证所有数据正确存储在存储库中的好时机您应该定期运行此命令以确保存储库的内部结构没有错误。restic check

包括和排除文件

您可以通过指定排除模式排除文件夹和文件,目前排除选项为:
  • --exclude 指定一次或多次以排除一个或多个项目
  • --exclude-caches 指定一次以排除包含特殊文件的文件夹
  • --exclude-file 指定一次或多次以排除给定文件中列出的项目
  • --exclude-if-present 指定一次或多次排除文件夹内容(如果文件夹包含给定文件)(可选择具有给定标题)
假设我们有一个excludes.txt使用以下内容调用的文件
# exclude go-files
*.go
# exclude foo/x/y/z/bar foo/x/bar foo/bar
foo/**/bar
它可以像这样使用:
$ restic -r /srv/restic-repo backup ~/work --exclude="*.c" --exclude-file=excludes.txt
这指示restic排除符合以下条件的文件:
  • 所有匹配的文件*.go(第二行excludes.txt
  • 所有bar位于名为foo(第四行excludes.txt目录下的文件和子目录
  • 所有匹配的文件*.c(参数--exclude
请参阅有关每个排除选项的更多特定信息。restic help backup
模式在内部使用filepath.Glob有关语法的信息,请参阅filepath.Match即使Restic传递了一个相对路径来保存,模式也会根据要保存的文件/目录的完整路径进行测试。使用os.ExpandEnv扩展exclude-files中的环境变量
模式需要匹配完整路径组件。例如,模式foo
  • 匹配/dir1/foo/dir2/file/dir/foo
  • 不匹配/dir/foobarbarfoo
尾部/被忽略,领先者/将该模式锚定在根目录下。这意味着,/bin匹配/bin/bash但不匹配/usr/bin/restic
常规通配符不能用于匹配目录分隔符/例如:b*ash匹配/bin/bash但不匹配 /bin/ash
为此,**可以使用特殊的通配符来匹配任意的子目录:模式foo/**/bar匹配:
  • /dir1/foo/dir2/bar/file
  • /foo/bar/file
  • /tmp/foo/bar
通过指定选项,--one-file-system您可以指示restic仅备份最初指定的文件或目录所在的文件系统中的文件。例如,像这样调用restic将不会备份/sys/dev在Linux系统上:
$ restic -r /srv/restic-repo backup --one-file-system /
通过使用该--files-from选项,您可以从文件中读取要备份的文件。如果需要备份大量文件,这些文件不在同一个文件夹中,或者可能由其他软件预先过滤,这一点尤其有用。
例如,也许你想备份名称与特定模式匹配的文件:
$ find /tmp/somefiles | grep 'PATTERN' > /tmp/files_to_backup
然后,您可以使用restic来备份过滤的文件:
$ restic -r /srv/restic-repo backup --files-from /tmp/files_to_backup
顺便说一句,你也可以结合--files-from普通文件参数:
$ restic -r /srv/restic-repo backup --files-from /tmp/files_to_backup /tmp/some_additional_file
列表文件中的路径可以是绝对路径或相对路径。

比较快照

Restic有一个diff命令,它显示两个快照之间的差异并显示一个小统计量,只需传递命令两个快照ID即可:
$ restic -r /srv/restic-repo diff 5845b002 2ab627a6
password is correct
comparing snapshot ea657ce5 to 2ab627a6:

 C   /restic/cmd_diff.go
+    /restic/foo
 C   /restic/restic

Files:           0 new,     0 removed,     2 changed
Dirs:            1 new,     0 removed
Others:          0 new,     0 removed
Data Blobs:     14 new,    15 removed
Tree Blobs:      2 new,     1 removed
  Added:   16.403 MiB
  Removed: 16.402 MiB

备份特殊项目和元数据

符号链接存档作为符号链接,restic不跟着他们。当你恢复时,你会再次获得相同的符号链接,具有相同的链接目标和相同的时间戳。
如果在要保存的目录下面存在绑定挂载,则restic会下降到该目录中。
设备文件被保存并恢复为设备文件。这意味着例如/dev/sda将其归档为块设备文件并进行恢复。这也意味着相应磁盘的内容不会被读取,至少不会从设备文件中读取。
默认情况下,restic不会保存任何文件或其他项目的访问时间(atime),因为无法可靠地禁用restic本身更新访问时间。这意味着对于每个新备份都会写入很多元数据,并且下一次备份需要再次写入新的元数据。如果您确实想要保存文件和目录的访问时间,则可以将该--with-atime选项传递 给该backup命令。

从stdin读取数据

有时,直接保存程序的输出可能会更好,例如, mysqldump以便以后可以恢复SQL。Restic支持这种操作模式,只需像下面这样--stdin给 backup命令提供选项
$ mysqldump [...] | restic -r /srv/restic-repo backup --stdin
这将创建一个新的输出快照mysqldump然后,您可以使用例如保险丝安装选项(见下文)来安装存储库并读取文件。
默认情况下,使用文件名stdin,可以指定不同的名称--stdin-filename,例如:
$ mysqldump [...] | restic -r /srv/restic-repo backup --stdin --stdin-filename production.sql

备份标签

快照可以有一个或多个标签,短字符串可以添加标识信息。只需使用以下命令逐个指定快照的标签--tag
$ restic -r /srv/restic-repo backup --tag projectX --tag foo --tag bar ~/work
[...]
这些标签稍后可以用来保存(或忘记)该forget 命令的快照该命令tag可用于修改现有快照上的标签。

评论

此博客中的热门博文

Restic --使用aws备份案例

例子 用Amazon S3设置restic 前言 本教程将向您展示如何在AWS S3中使用restic。 它将向您展示如何浏览AWS Web界面,创建S3存储桶,创建只能访问此存储桶的用户以及如何将restic连接到此存储桶。 先决条件 您的系统上应该已经有一个 restic 可以运行 的 二进制文件。 此外,您还应该拥有 AWS 账户  。 即使您使用 免费 套餐,您也可能需要提供信用卡详细信息才能进行结算  。 登录到AWS 将浏览器指向  https://console.aws.amazon.com  并使用您的AWS账户登录。 您将看到AWS主页: 通过使用左上角的“服务”按钮,可打开AWS提供的所有服务菜单: 对于本教程,简单存储服务(S3)以及身份和访问管理(IAM)是相关的。 创建桶 首先,必须创建用于存储备份的存储桶。 使用“服务”菜单,导航到S3。 如果您已经有一些S3存储桶,您会在这里看到它们的列表: 点击“创建存储桶”按钮,然后为新存储桶选择一个名称和区域。 为了本教程的目的,该存储桶将被命名  restic-demo 并驻留在法兰克福。 由于存储桶名称空间在所有AWS用户之间共享,因此名称 restic-demo 可能无法提供给您。 要有创意并选择一个独特的存储桶名称。 没有必要配置存储桶的任何特殊属性或权限。 因此,只需完成向导而不做任何进一步的更改: 新创建的 restic-demo 存储桶现在将显示在S3存储桶的列表中: 创建一个用户 使用AWS Web界面的“服务”菜单导航到IAM。 这会将您带到IAM主页。 要创建新用户,请点击左侧的“用户”菜单条目: 如果您之前已经拥有使用IAM的设置用户,您会在这里看到它们的列表。 使用顶部的“添加用户”按钮创建一个新用户: 对于本教程,新用户将被命名 restic-demo-user 。 随意选择最适合您需求的名称。 该用户只能通过该 restic 程序 访问AWS  ,而不能通过Web界面访问。 因此,“访问类型”选择了“编程访问”: 在下一步中,可以将权限分配给新用户。 要使用这个用户,只需要访问 restic-demo 存储桶。 选择“直接附加现有政策”,这将在下面列出

Restic --删除备份快照

删除备份快照 所有的备份空间都是有限的,所以restic可以删除旧的快照。 这可以通过手动(通过指定要删除的快照ID)或者使用描述要忘记哪些快照的策略来完成。 对于所有删除操作,需要依次调用两个命令: forget 删除快照并 prune 实际删除快照从存储库中引用的数据。 这可以通过 forget 命令 --prune 选项 来自动 执行, 如果快照已被删除 ,该 prune 命令 会自动 运行 。 建议 在修剪后 运行 restic   check ,以确保提醒您可能的损坏存储库的内部数据结构。 删除一个快照 该命令 snapshots 可用于列出存储库中的所有快照,如下所示: $ restic -r /srv/restic-repo snapshots enter password for repository: ID Date Host Tags Directory ---------------------------------------------------------------------- 40dc1520 2015-05-08 21:38:30 kasimir /home/user/work 79766175 2015-05-08 21:40:19 kasimir /home/user/work bdbd3439 2015-05-08 21:45:17 luigi /home/art 590c8fc8 2015-05-08 21:47:38 kazik /srv 9f0bc19e 2015-05-08 21:46:11 luigi /srv 要删除快照 /home/art ,请使用该 forget  命令并在命令行上指定快照ID: $ restic -r /srv/restic-repo forget bdbd3439 enter password for repository: removed snapshot d3f01f63 之后,此快照被删除: $ restic -r /srv/res