Scaleway近期推出GLACIER类存储“C14冷库类”
他们有一个很棒的 75GB 免费计划,我想使用 restic 备份工具来利用它。
为了使这项工作正常进行,我已成功按照 S3 说明创建和上传存储库,但有一点需要注意。我无法将存储类标头作为 GLACIER 成功传递。
使用 awscliv2,我可以从我的本地机器成功传递一个看起来非常像这样的标头:
aws s3 cp object s3://bucket/ --storage-class GLACIER
但是有了 restic,在研究了一些 github 问题后,我可以看到 一个选项 来传递一个
-o
标志。链接问题的解决对我来说不是那么清楚,所以我尝试了以下 restic 命令,但没有成功地看到 Scaleway 存储桶控制台中文件对象旁边的“GLACIER”类存储标签:
restic -r s3:s3.fr-par.scw.cloud/restic-testing -o GLACIER --verbose backup ~/test.txt
restic -r s3:s3.fr-par.scw.cloud/restic-testing -o storage-class=GLACIER --verbose backup ~/test.txt
有人可以建议另一种选择吗?
我开始使用 C14 的 GLACIER 存储类和 restic,直到现在它似乎工作得很好。
我建议使用
restic -r s3:s3.fr-par.scw.cloud/test-bucket init
以通常的方式创建存储库,这将在 STANDARD 存储类中创建 config
文件和密钥。
对于备份,我使用命令:
$ restic backup -r s3:s3.fr-par.scw.cloud/test-bucket -o s3.storage-class=GLACIER --host host /path
类似于您所做的,除了选项是
s3.storage-class
而不是storage-class
。
这样
data
和snapshots
目录下的文件都是GLACIER存储类,添加备份没有问题。
我还可以在数据位于 GLACIER 类时挂载存储库(我想所有信息都是从缓存中获取的)所以我可以做 restic mount /mnt/c14
并且我可以浏览文件,即使我无法复制它们或查看它们的内容。
如果我需要恢复文件,我使用
s3cmd restore --recursive s3://test-bucket/
恢复标准类中的所有存储桶(参见 s3cmd),我测试标准类中的所有文件是否正确:
$ aws s3 ls s3://test-bucket --recursive | tr -s ' ' | cut -d' ' -f 4 | xargs -n 1 -I {} sh -c "aws s3api head-object --bucket unitedhost --key '{}' | jq -r .StorageClass" | grep --quiet GLACIER
如果至少有一个文件在 GLACIER 类中,则返回 true,因此您必须等待此命令返回 false。
显然恢复需要更多时间,但我使用 C14 冰川作为第二或第三个备份,同时在 Backblaze B2 中使用另一个 restic 存储库,这是一个温暖的存储。
除了vstefanoxx的answer:这是我的工作流程。
我像 vstefanoxx 一样设置 restic 存储库。
现在,如果你想 prune 存储库......你不能,因为文件在
glacier
和 restic
需要对存储桶的读写访问权限才能修剪。
Scaleway 的有趣之处在于glacier
和standard
类之间的文件传输是免费的。因此,让我们将数据移回标准类:
s3cmd restore --recursive s3://test-bucket
然后使用 vstefanoxx 给出的命令等到过程结束。一旦您的数据达到标准级别,您的成本就会增加五倍,因此我们必须高效 :-)
所以我们现在修剪存储库:
restic prune -r s3:s3.fr-par.scw.cloud/test-bucket
完成后,将所有内容(实际上是
data, index
和snapshots
但notkeys
)移回冰川:
s3cmd cp s3://test-bucket/data/ s3://test-bucket/data/ --recursive --storage-class=GLACIER
s3cmd cp s3://test-bucket/index/ s3://test-bucket/index/ --recursive --storage-class=GLACIER
s3cmd cp s3://test-bucket/snapshots/ s3://test-bucket/snapshots/ --recursive --storage-class=GLACIER
所以我们现在已经到了修剪存储库的地步,试图支付最少的钱!
选择的答案在做增量备份时似乎不起作用。我采用了不同的解决方案。
我设置了一个普通的桶,用你通常的
restic init
初始化。然后我设置了以下生命周期规则:
<?xml version="1.0" ?>
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>data-to-glacier</ID>
<Filter>
<Prefix>data/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
Days
设置为 0,这意味着该规则将应用于所有文件。虽然规则不会持续应用,但它们每天午夜 UTC应用一次。
此规则仅适用于
data/
中的文件,即大文件。
此规则描述应该与
s3cmd
一起使用,但如果您更喜欢 GUI,也可以从仪表板执行此操作。
我搜索了一个解决方案,使用带有 restic 的 Scaleway Glacier :
标准桶中日期皮革超过 15 天的所有备份和冰川桶中日期在 16 到 90 天之间的所有备份
Aukfood