服务器增量备份至 AWS Glacier

服务器增量备份至 AWS Glacier

我希望将 Linux 服务器中的各种目录和文件备份到 AWS Glacier。我正在尝试弄清楚如何管理这一点。

增量备份

我想逐步上传文件。因此,本质上,如果文件没有更改,我不想再次将其上传到 Glacier(如果它已经存在于那里)。我想我已经弄清楚了这部分。由于您无法立即获得 Glacier 保管库中的档案列表,因此我将保留已上传文件的本地数据库,以便能够分辨保管库中存在哪些文件以及不存在哪些文件。这将允许我进行增量备份(仅上传丢失或更改的文件)。

无法覆盖文件?

根据 (http://aws.amazon.com/glacier/faqs/):

存储在 Amazon Glacier 中的档案是不可变的,即可以上传和删除档案,但不能编辑或覆盖。

那么,如果我上传一个文件/档案,然后稍后该文件在本地发生变化,下次我进行备份时,Glacier 会如何处理这个问题,因为它无法用新版本覆盖该文件?

删除旧数据

AWS 收取每 GB 0.03 美元的费用来删除 3 个月以内的存档。由于我正在备份本地服务器,我想删除本地不再存在的存档。组织此操作的最佳方法是什么。使用本地存储的存档清单来确定哪些数据不再存在,如果数据超过 3 个月,则从 Glacier 中删除它?这似乎很简单,但有没有更好的方法呢?

单个文件与 TAR/ZIP 文件

您可以将单个文件作为档案上传,也可以通过在上传之前将文件分组为 TAR 或 ZIP 文件来提高效率。TAR/ZIP 文件的想法很有吸引力,因为它使事情变得更简单,并且您需要支付更少的存储费用,但我想知道我该如何处理增量上传。如果上传了一个包含 10,000 个文件的 20 MB zip 文件,并且其中一个文件在本地发生了更改,我是否需要上传另一个 20 MB 的 zip 文件?现在我需要承担存储这些 zip 文件中几乎所有内容的 2 份副本的费用……此外,我该如何处理删除 ZIP 文件中本地不再存在的内容?由于我不想删除整个 zip 文件,现在我需要支付存储不再存在的文件的费用。

我可能想太多了。解决这些问题最直接的方法是什么?

我不知道这是否重要,但我正在为这个备份脚本使用 PHP SDK。另外,我不想先上传到 S3 存储桶,然后再将存储桶备份到 Glacier,因为我现在还必须支付 S3 存储和传输费用。

答案1

那么,如果我上传一个文件/档案,然后稍后该文件在本地发生变化,下次我进行备份时,Glacier 会如何处理这个问题,因为它无法用新版本覆盖该文件?

根据Glacier 常见问题解答

您将数据作为档案存储在 Amazon Glacier 中。每个档案都分配有一个唯一的档案 ID,以后可用于检索数据。档案可以代表单个文件,或者您可以选择将多个文件合并为单个档案上传。您将档案上传到保管库中。保管库是您用来组织数据的档案集合。

这意味着您上传的每个文件都会被分配一个唯一的 ID。上传同一个文件两次,每个文件副本都会获得自己的 ID。这样您就可以根据需要恢复到文件的先前版本。

使用本地存储的存档清单来确定哪些数据不再存在,如果数据超过 3 个月,则将其从 Glacier 中删除?这看起来很简单,但有没有更好的方法呢?

为了避免因删除不到 3 个月的数据而产生附加费,这可能是最好的方法。但您需要跟踪和删除的不仅仅是不再存在的数据。如上所述,每当文件发生变化并且您将其重新上传到 Glacier 时,您都会获得该文件的新 ID。您最终也会想要删除该文件的旧版本,假设您不想要恢复到那些旧版本的能力。

如果上传了一个包含 10,000 个文件的 20 MB zip 文件,并且其中一个文件在本地发生了更改,我是否需要上传另一个 20 MB 的 zip 文件?现在我需要承担存储这些 zip 文件中几乎所有内容的 2 份副本的费用……此外,我该如何处理删除 ZIP 文件中本地不再存在的内容?由于我不想删除整个 zip 文件,现在我需要支付存储不再存在的文件的费用。

这是您必须自己决定的权衡。您是否将所有内容打包/压缩,然后被迫跟踪这些文件及其中的所有内容,或者您​​是否值得单独上传文件,以便在不再需要它们时单独清除它们。

您还可以考虑其他几种方法:

  • 有两个或多个 tar/zip 档案,一个包含不太可能改变的文件(如系统文件),另一个包含配置文件和其他可能随着时间而改变的内容。
  • 无需费心跟踪单个文件,只需将所有内容备份到单个 tar/zip 存档中,然后上传到 Glacier。当每个存档达到 3 个月时(甚至可能更晚),只需将其删除即可。这为您提供了一种从给定时间点跟踪和恢复的非常简单的方法。

尽管如此,Glacier 可能并不是满足您需求的最佳方法。Glacier 实际上是用于数据存档的,与备份服务器不同。如果您只想对服务器进行增量备份,那么使用 S3 而不是 Glacier 可能是更好的方法。使用类似表里不一或者rdiff-备份(与类似的东西一起s3fs) 可让您将增量备份到 S3 存储桶并轻松管理它们。多年来,我曾在一些 Linux 系统上使用过 rdiff-backup,发现它运行良好。

答案2

这是 *nix 的命令行工具,支持上传仅修改的文件、替换本地修改的文件以及从 Glacier 中删除本地删除的文件 https://github.com/vsespb/mt-aws-glacier

答案3

另外,你也可以使用类似表里不一,然后上传它生成的档案。

这有几个好处:

  • Duplicity 进行增量备份,因此只有更改的文件才会被捕获到备份集中
  • Duplicity 可以处理文件更改,因此,如果只修改了文件的一小部分,理论上,只有更改的部分才会上传
  • 如果你是个偏执狂,你的备份是加密的

将 Duplicity 与 Glacier 结合使用的最简单方法是:

  • 备份到某个本地目录(并保留此备份)。每次运行备份时,Duplicity 都需要访问其“清单”文件,以便它能够知道哪些文件已更改。
  • 将 Duplicity 创建的任何新档案从本地备份上传到 Glacier。使用类似冰川命令为了这。

相关内容