Amazon AWS - 将 EBS 快照导出到外部存储

mil*_*ils 1 export amazon-ec2 amazon-ebs amazon-web-services

在亚马逊AWS平台上,有没有办法将EBS卷导出到外部磁盘?

即亚马逊基础设施之外的备份?

从我目前阅读的内容来看:

  1. 亚马逊的“导入/导出(磁盘)”服务支持从 S3 存储桶导出数据

  2. EBS 快照隐式存储在某种形式的不透明 S3 存储桶中,但此存储桶对 AWS 管理员不可见

所以似乎没有办法导出 E​​BS 快照。有没有人有这方面的运气?

谢谢,

编辑:我有 ~2.5TB 的 mongodb 数据,我需要制作本地副本(即 2.5" 外部)。下载该数据将花费 ~ 220 美元(0.09 美元/GB),并且需要 ~ 10 天 @ 3MB/ s(更不用说是否存在网络问题)。这就是为什么我要尝试进行 Amazon 导入/导出过程。我的 mongo 实例使用 LVM/XFS,因此我能够生成快照。

Mic*_*bot 5

EBS 快照存储在 S3 中,但它们由 EBS 管理,并且存储在您无法访问的存储桶中。

虽然这听起来令人困惑,但有一个很好的解释。

EBS 快照不会单独存储。它们依赖于 EBS 基础设施提供的信息,因此它们只捕获自上一个快照以来已更改的块。(因为这个原因,连续拍摄同一个卷的两个快照,几乎不可避免地,第二个会比第一个更快完成。)然后快照子系统只备份那些更改的块,并创建到前一个快照中的块的逻辑链接,这些块是需要恢复整个卷。稍后,如果删除了那些先前的快照,则只会清除未链接到任何后续快照的块。这提供了更快的快照以及清除旧快照的能力,而无需担心依赖于先前备份的后续“增量”备份。EBS 管理这方面,

这种设置可显着提高存储效率并节省成本,因为您只需为存储差异付费。比较快照的总大小和您支付的快照存储 GB 数,总数应该更少,并且您拥有的相同卷的快照越多,总数可能会大大减少。

如果快照单独存储在 S3 中,成本会高得多。

但是......有一种方法可以将 EBS 快照导出到异地,但它是一个手动过程。

为此,您需要一个备用的 linux EC2 实例。流程简化版:

  • 启动实例
  • 从快照创建 EBS 卷
  • 将新卷附加到实例,但不要挂载它
  • 使用分配的块设备文件访问卷上的原始数据,例如/dev/xvdf.

从这里,您可以使用标准工具,例如ddpv从设备读取原始数据流,并将其发送到您想要的地方。例如,假设您有一个可从实例访问的场外 SSH 服务器。

$ sudo pv -pterab /dev/xvzf | \
  pbzip2 -9 | \
  ssh user@offsite.example.com \
  'cat > /some/large/disk/my-snapshot.bz2'
Run Code Online (Sandbox Code Playgroud)

第 1 行读取块设备并显示进度指示器。

第 2 行使用多核 bzip2 以最大压缩率压缩原始数据

第 3 行建立到异地服务器的 SSH 连接,通过管道传输压缩输出

第 4 行将压缩的磁盘映像文件写入远程机器上的文件。

将卷带回 AWS 将涉及创建一个空卷并反转该过程、将文件重新导入、解压缩并将其写入块设备。

但是请注意,磁盘快照通常不是备份的最佳方法。它们既快速又简单,但依赖快照表明您应该重新考虑恢复策略。

如果有问题的卷包含数据库,使用逻辑备份工具进行异地备份可能是一个更简洁的解决方案。如果卷包含资产,则可以使用 tarball 或 rsync。如果该卷包含您的应用程序代码,则您确实需要一个基础架构,让您可以通过自动化从受版本控制的源代码从头开始重复构建工作服务器。这需要改变思维方式并及时进行大量的前期投资,但从长远来看会更好地为您服务。