备份
现在我们准备好备份一些数据。在特定时间点的目录内容在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/foobar
或barfoo
尾部
/
被忽略,领先者/
将该模式锚定在根目录下。这意味着,/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
可用于修改现有快照上的标签。
评论
发表评论