在 Amazon AWS 平台上,有没有办法将 EBS 卷导出到外部磁盘?
即亚马逊基础设施之外的备份?
从我目前所读的内容来看:
亚马逊的“导入/导出(磁盘)”服务支持从 S3 存储桶导出数据
EBS 快照隐式存储在某种形式的不透明 S3 存储桶中,但 AWS 管理员看不到此存储桶
因此,似乎没有办法导出 EBS 快照。有人成功过吗?
谢谢,
编辑:我有大约 2.5TB 的 mongodb 数据,我需要制作一份本地副本(即 2.5 英寸外部)。下载这些数据将花费约 220 美元(0.09 美元/GB),并且需要约 10 天,速度为 3MB/s(更不用说如果存在网络问题)。这就是我尝试使用 Amazon 导入/导出流程的原因。我的 mongo 实例使用 LVM/XFS,因此我可以生成快照。
答案1
EBS 快照存储在 S3 中,但它们由 EBS 管理且存储在您无法访问的存储桶中。
虽然这听起来令人困惑,但有一个很好的解释。
EBS 快照并非单独存储。它们依赖于 EBS 基础架构提供的信息,因此它们仅捕获自上一次快照以来已更改的块。(对同一卷连续拍摄两次快照,因此几乎不可避免地第二次快照会比第一次完成得更快。)然后,快照子系统仅备份那些已更改的块,并创建与先前快照中恢复整个卷所需的块的逻辑链接。稍后,如果删除了这些先前的快照,则只有未链接到任何后续快照的块才会被清除。这提供了更快的快照优势,并且能够清除旧快照,而无需担心依赖于先前备份的后续“增量”备份。EBS 管理这一方面,保留所需的内容并清除不需要的内容(并且在清除不需要的数据时不会向您收费)。
这种设置可以显著提高存储效率并节省成本,因为您只需支付存储差异的费用。比较快照的总大小和您要支付的快照存储 GB 数,总数应该会更少,而且您拥有的相同卷的快照越多,总数就会少得多。
如果快照单独存储在 S3 中,成本会高得多。
但是...有一种方法可以将 EBS 快照导出到异地,但这是一个手动过程。
为此,您需要一个备用的 Linux EC2 实例。该过程的简化版本:
- 启动实例
- 从快照创建 EBS 卷
- 将新卷附加到实例,但不要挂载它
- 使用指定的块设备文件访问卷上的原始数据,例如
/dev/xvdf
。
从这里,您可以使用标准工具(如dd
或 )pv
从设备读取原始数据流,并将其发送到您想要的位置。例如,假设您有一个可以从实例访问的异地 SSH 服务器。
$ sudo pv -pterab /dev/xvzf | \
pbzip2 -9 | \
ssh [email protected] \
'cat > /some/large/disk/my-snapshot.bz2'
第 1 行从块设备读取并显示进度指示器。
第 2 行使用多核 bzip2 以最大压缩率压缩原始数据
第 3 行与异地服务器建立 SSH 连接,将压缩的输出传输出去
第 4 行将压缩的磁盘映像文件写入远程机器上的文件。
将卷放回 AWS 将涉及创建一个空卷并逆转该过程,将文件传输回来,解压缩并将其写入块设备。
但请注意,磁盘快照通常不是备份的最佳方法。它们快速而简单,但依赖快照表明您的恢复策略应该重新考虑。
如果相关卷包含数据库,使用逻辑备份工具进行异地备份可能是一个更简洁的解决方案。如果卷包含资产,则可以使用 tarball 或 rsync。如果卷包含应用程序代码,则您确实需要一个基础架构,该基础架构允许您通过自动化从版本控制的源代码中重复构建工作服务器。这需要改变思维方式,并且需要大量的前期投资,但从长远来看会为您带来更好的服务。
答案2
此时电子商务不支持导出。您可以查看AWS 导入/导出文档关于这个话题。导入支持 EBS,但仅出口从S3均受支持。
您可以先将数据导出到 S3,但这可能并不适合您的特定需求。