我们在 EC2 中运行了一个 Windows 服务器(EBS 支持)。我们定期制作快照以备份数据。我想从其中一个快照创建一个新的 EC2 实例。
是的,我意识到这与拔掉电源并打开机器是一样的,但我想测试快照中的数据的可靠性,以便进行恢复。
我尝试使用 Web 控制台、命令行工具和 ruby sdk 从我们的 Windows 启动驱动器 (EBS) 的快照创建 AMI 映像 - 它们都创建一个 AMI,该 AMI 将平台显示为 Linux 而不是 Windows,并将虚拟化显示为半虚拟化而不是 hvm。从此 AMI 创建的新 EC2 实例始终无法上线,我猜想它崩溃是因为它在错误的虚拟化平台上运行。
在我进行的所有谷歌搜索中,我只遇到过 Linux 说明,或从实例支持的 EC2 实例创建 Windows EBS 的说明 - 而不是 EBS 支持的实例或快照。
答案1
背景
从快照启动实例不适用于 Windows AMI(因为您有同时发现自己):
重要的
注册快照仅适用于 Linux/UNIX AMI;尽管您可以注册快照来创建 Windows AMI,AMI 无法启动。 [重点是我的]
选择
虽然没有具体说明,但人们应该意识到可以简单地克隆一个Amazon EBS 支持的实例概述如下从正在运行的实例创建映像- 当通过 AWS 管理控制台执行此操作时,EC2尝试在创建映像之前彻底关闭实例,然后重新启动实例。这显然通常是更好的选择,但是,如果需要的话,可以通过命令行来避免:
如果您不希望重新启动实例,则可以使用 Amazon EC2 命令行工具来创建映像 [...]。ec2-创建映像命令有一个 --no-reboot 选项。
解决方案
上述替代方法显然无助于从其中一个快照创建一个新的 EC2 实例如指定 - 无论如何,本部分概述了一种有用的解决方案移至新实例Eric Hammond 的文章将正在运行的 EBS 启动实例迁移到 Amazon EC2 上的新硬件(具有不同的用例,但无论如何都适用)并且在您的情况下归结为以下步骤:
- 创建一个具有与原始实例相同启动参数的新实例。
- 等到新实例运行然后停止(而不是终止)它。
- 从新实例中分离 EBS 启动卷并删除该分离的卷,因为不再需要它。
- 从快照创建一个新卷并将其附加到新实例。
- 重新启动现在将使用从快照创建的卷启动的新实例。
Colin Percival 曾使用过这项技术来实现通过 defenestration 在 EC2 上使用 FreeBSD顺便说一下。(其中包括一些有关虚拟化问题的提示):
另一方面,EC2 Windows 实例是在 HVM(硬件虚拟机)模式下启动的,FreeBSD 对此模式支持得很好。如果我们能以某种方式欺骗 EC2 以与启动 Windows 相同的方式启动 FreeBSD,我们就可以在各种实例类型上运行 FreeBSD。我们如何欺骗 EC2?利用 Elastic Block Store 磁盘可以从 EC2 实例分离并重新连接到不同实例这一事实,将“Windows”实例的启动磁盘替换为包含 FreeBSD 的磁盘。
答案2
我发现你可以创建一个 AMI仅有的从实例创建,而不是从现有快照创建。从快照创建 AMI 的命令仅支持 Linux。
从 Windows 实例(正在运行或已停止)创建 AMI 的命令行命令是ec2-create-image
。我已经使用 ruby sdk 成功完成了此操作。该命令创建附加到实例的 EBS 卷的快照,然后使用这些快照构建正确的 AMI。如果您使用 Web 控制台,它将关闭 Windows 机器。从命令行/api,您可以选择不关闭它,在这种情况下,您需要像制作快照一样注意数据一致性。
因此,如果您已终止实例并且没有 AMI,那么您就陷入困境了。或者,您可以启动一个新的 Windows 实例,然后关闭它,然后连接由快照创建的卷。我还没有尝试过,但我希望您可以分离启动卷并附加一个新的。