如何使用AWS进行增量备份?

Ste*_*ith 4 amazon-web-services

我正在阅读有关使用 Amazon Glacier 和 AWS S3 服务的文档,以便将它们用作夜间备份。除非我错过了,增量备份是如何完成的?

我想每晚从我们的 Linux 文件服务器备份 100 GB 数据,即大约 70k 个文件,以便存储以进行异地备份。但是存在删除文件的问题,因此听起来您无法更新它们。

还有另一种更简单的方法吗?是否可以使用 rsync 备份到 AWS EC2,然后将数据从 EC2 传输到 Amazon Glacier 进行存储或传输到 AWS S3?因为每晚发送一个新的 100 GB 压缩 tar 文件的想法是不切实际的。

Tim*_*Tim 6

进行备份的方法有很多,这里有一些想法和选择。

增量备份

理想情况下,您的备份应该是增量的。这意味着您可以根据需要回滚到以前的版本。它还可以显着减少 CPU、带宽使用量,有时还可以减少存储空间。您还可以查看差异备份,它们略有不同,因为它们是上次完整备份的增量。

本地备份到 AWS

AWS Storage Gateway虚拟设备可能对您有用。安装虚拟机,分配一些磁盘。有几种模式,他们不久前更改了名称,但本质上它的工作原理就像备份到 S3 的本地磁盘。它可以将所有数据保留在本地,或使用本地磁盘作为 S3 的缓存。

除此之外,还有很多其他选项可以将数据导入 AWS。

AWS S3 同步

我使用“aws s3同步”命令行实用程序将数据上传到AWS S3,使用IA存储类。这可以确保 AWS S3 上的备份安全。您可以将要备份的文件直接上传到 S3,也可以上传本地存储的备份程序的存储库,或者您的备份软件可能本身使用 S3。您可以使用命令行进行以下操作。

aws s3 sync /path/to/backups s3://bucketname/backups --storage-class STANDARD_IA --delete --exclude ".sync/*"
Run Code Online (Sandbox Code Playgroud)

您可以在 S3 中打开加密和版本控制。它单独保存文件的每个版本,它不是增量的,因此它可以比也进行压缩的增量备份软件使用更多的存储空间。

目的地

S3 是备份的好地方。如果您的备份相当静态,您可以使用 S3不频繁访问类存储,它比标准存储类便宜。如果您的备份是不可变的(从不更改),您可以使用 S3 Glacier 存储类,但请记住,恢复这些备份需要几个小时。

Dropbox 是一个合理的备份位置。我使用了Dropbox Uploader 脚本。但它并不那么灵活 - 它不会删除已本地删除的文件,从而浪费磁盘空间。这就是你如何使用它。

/opt/Dropbox-Uploader/dropbox_uploader.sh -s -q upload /path/to/files /dropbox/path
Run Code Online (Sandbox Code Playgroud)

**Borg 备份(不再使用)**

我使用Borg Backup备份我的 Linux 服务器(恰好位于 AWS 上)。这会在本地磁盘上创建增量、重复数据删除的备份。它有保留策略,告诉它保存数据多长时间 - 例如,一周每天晚上,一个月每周一次,一年每月一次。您可以使用许多增量备份程序。

我不喜欢 Borg Backup 的一件事是它每次运行时都会重命名现有文件。我认为对于非常大的备份,这种行为会发生变化,但我的 500MB 备份肯定每天晚上都会重命名该文件。每天您都会得到数百个小文件和一个新的/重命名的大文件。因此,如果您的备份是远程的,您可能会使用比您预期更多的带宽。因此我不再使用 Borg。

Borg 还原生支持通过 SSH 访问的远程存储库。您可以拥有一个带有 EBS 磁盘的 EC2 实例,同步到它,然后实例关闭 - 但 EBS 比 S3 贵很多,所以它不是一个很好的选择。

**Restic Backup(现在用于 PC/Web 服务器备份)**

我已经使用Restic Backup好几年了。它的目标是简单、快速、可验证、安全、高效和免费。它适用于大多数平台(*nix、Windows 等),并且被编译为单个二进制文件,因此安装很容易。

它是基于块的并且对于磁盘/网络来说是高效的。我已经做了多次恢复测试,它总是完美地恢复一切。我对休息很满意。它正在缓慢但稳定的发展中,未来将添加诸如压缩之类的功能 - 截至 2020 年 8 月,它会进行重复数据删除,但不会进行压缩。

初始化存储库

set RESTIC_PASSWORD=abcdefg
restic_0.9.1_windows_amd64.exe init --repo x:\repository

set RESTIC_PASSWORD=abcdefg
restic_0.9.1_windows_amd64.exe --exclude c:\data\exclude --repo c:\data backup x:\repository
Run Code Online (Sandbox Code Playgroud)

您可以让 Restic 保留备份一段可配置的时间 - 例如保留每日备份,然后每周备份 8 周,每月备份 24 个月。

restic_0.9.1_windows_amd64.exe  --repo x:\repository forget --keep-daily 7 --keep-weekly 8 --keep-monthly 24
restic_0.9.1_windows_amd64.exe  --repo x:\repository prune
Run Code Online (Sandbox Code Playgroud)

如果您希望 Restic 备份到 S3,您只需定义密钥并执行这样的备份。这里需要考虑的一件事是 Restic 可能会从 S3 读取数据,即使它有本地缓存​​,因此在某些情况下 IA 类最终可能比标准更昂贵 - 尽管我怀疑这些情况很少见。

这是 Restic 的基本设置:

REM setup S3 (once)
set AWS_ACCESS_KEY_ID=ABCDEFGHIJK
set AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX/AAA
set RESTIC_PASSWORD=abcdefg
restic_0.9.1_windows_amd64.exe --repo s3:s3.amazonaws.com/s3-bucket-name init
Run Code Online (Sandbox Code Playgroud)

这就是您进行备份的方式

REM backup
restic_0.9.1_windows_amd64.exe --repo s3:s3.amazonaws.com/s3-bucket-name backup c:\data
Run Code Online (Sandbox Code Playgroud)