使用S3 Glacier备份Amazon LightSail 实例

Amazon LightSail 是 EC2 的廉价和精简版,相比 EC2 拥有更低的价格,更简单的使用流程,但也增加了一些限制,例如无法在 EC2 控制台中操作 LightSail 实例。

LightSail 目前 2019-02-07 对于实例快照的定价是 0.05$/GB,快照似乎是通过直接将虚拟机磁盘镜像压缩保存的方式实现的,这将会导致实际快照计费大小大于文件系统内实际文件大小。
一般普通用户并不需要频繁的创建和恢复快照,只是偶尔创建一份备用,所以 LightSail 自带的快照功能也是一笔不小的开销,甚至超过了低配实例一般的价格,这种情况可以尝试自行备份实例硬盘并传输至 S3 使用 Glacier 存储保存。Glacier 的优点是价格十分低廉,缺点是不能随时读取且最低存储(起步价)90天,并且取出数据操作需要收费。具体价格可以参考 AWS S3 Glacier 定价

AWS 为 Glacier 提供了一定的免费额度,假设 S3 Bucket 与 LightSail 实例在同一区域,经过 gzip 压缩后的镜像小于 10GB,并且每个月最多只尝试一次恢复操作,那么月存储成本 <= 0.5$

使用条件

本文将以 Debian 9 为例,使用 e2image、tar、s3fs 三种工具以及一个额外挂载到实例的硬盘创建并存储备份。

创建系统镜像

在通过 e2image 备份时,将备份文件存储到将要备份的磁盘似乎是可行的,但你无法在这种情况下恢复到同一个磁盘,因为备份文件可能会在恢复过程中被覆盖。
备份正在运行的系统分区是有风险的,请尽可能停止任何不必要的应用程序。

使用以下命令备份系统分区为文件,请将 /dev/xvda1 替换为实际分区位置。

压缩系统镜像

e2image 创建的备份文件默认为稀疏文件,为了减小体积和方便转移,将通过 tar 将镜像文件压缩为 .tar.gz 格式。

挂载 S3 Bucket

以下步骤介绍如何安装并使用 s3fs 将 S3 Bucket 挂载为一个目录。

在 AWS IAM 中创建一个新用户,授予 S3 全部权限或特定 Bucket 的访问权限,并记录 AccessKeyId 和 SecretAccessKey。新建用户并授予限制的权限可提高账号安全性,避免以上信息泄露时危及 AWS 账号和数据安全。

将上面记录的信息通过如下命令保存到配置文件中

挂载 Bucket 到指定目录

上传到 S3

请注意,文件上传后将使用标准存储,计费价格更高,仍需额外步骤将存储等级设置为 Glacier

将文件设置为 Glacier 存储

将文件存储等级设置为 Glacier 存储可以通过为 Bucket 设置 Lifecycle,或手动操作来实现。
设置 Lifecycle 可以参考官方文章: Archiving Amazon S3 Data to Amazon Glacier

以下为手动操作步骤:

  • 登录 S3 Management Console
  • 在用于备份的 Bucket 中找到刚刚上传的文件
  • 右键选择 Change Storage Class
  • 选择 Glacier
  • 保存

等等...怎么恢复呢?

相信聪明的你一定知道把这篇文章的步骤倒过来就可以恢复了🌚。
参考文档:

碎碎念

为什么不是用 DD?
DD 保存的是原始磁盘镜像,包含了已经删除但未擦出的数据,将会增大备份体积。
直接写入到 S3?
可以试试看,不过在压缩文件写入完成之前,s3fs 似乎仍然会在系统驱动器内创建临时文件,不过我还没有找到证据,只是在过程中发现 df -h 反馈的已使用空间在增大,但在根目录通过 du -sh * 得到的已使用空间和 df 反馈额度不一样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注