如何将 Amazon EC2 Windows AMI(或实例)从一个区域迁移到另一个区域?

如何将 Amazon EC2 Windows AMI(或实例)从一个区域迁移到另一个区域?

我在弗吉尼亚州有一个 Windows EC2 AMI 和实例,但想将其迁移到俄勒冈州。我猜实例迁移可能是不可能的,因为它是实时的,但至少 AMI+EBS 卷传输会有所帮助!

另外,我知道以前有人问过这个问题,但是截至 2011 年底,没有任何答案适用。

旧解决方案 1,2@是否可以将 AWS EC2 AMI 从一个区域移动到另一个区域,如果可以,如何移动?问题:解决方案 1 需要 ElastiFox,但目前已不再受支持(自 3.6 版起,不再适用于任何 Firefox)。解决方案 2 仅适用于 Linux

旧解决方案3@Amazon EC2 从一个区域迁移到另一个区域问题:需要 ElastiFox,但现在不受支持/不兼容

“部分”解决方案4@http://blog.taggesell.de/index.php?/archives/85-Amazon-EC2-How-to-migrate-an-EBS-backed-image-from-US-to-EU-or-wherever.html问题:这在 AWS 系统“外部”工作,通过创建图像然后将其作为流发送。此外,尚不清楚如何保护流免受损坏(例如数据包丢失等)。编辑:netcat 是基于 TCP/IP 的,因此是可靠的传输。最好还是让 Windows 在启动时检查磁盘。

答案1

嗯,没有回应,所以我继续尝试解决方案 4 的变体。原始解决方案失败了,因为

  1. netcat 的错误使用
  2. 较新的 Linux 内核对 Windows 卷的引用方式进行了更改

因此我会记录下对我有用的方法。

设置

我们将使用 Linux 通过网络逐字节复制 Windows 卷。这实际上非常简单,我只是给出了详细的说明来帮助新手。

1. 在源区域备份 Windows EBS 卷

  1. 关闭您的 Windows EC2 实例。
  2. 分离卷。卷部分 -> Windows 卷(右键单击)-> 分离卷。
  3. 创建快照。再次右键单击它 -> 创建快照。
  4. 注意卷的“区域”(例如“us-east-1b”)。您很快就会需要它

2. 在源区域的同一区域内创建 Linux 实例 我使用了 Ubuntu(搜索“ubuntu/images”AMI)。或者转到http://alestic.com/您会在顶部找到最新的官方 Ubuntu AMI 的链接。我使用 AMI ami-20f97410 作为参考。

  1. 选择实例类型,t1.micro 对我来说很合适。我的 ubuntu 11.10 32 位实例在整个磁盘读取操作中 CPU 占用率为 40%。
  2. 将实例设置在与您的 Windows 卷相同的区域(例如“us-east-1b”)。
  3. 将 Windows 卷附加到您的 Linux 实例(右键单击 -> 附加 -> 选择 Linux 实例)到类似 /dev/sdf 的位置(Web UI 将来可能会更改为 /dev/xvdf)。如果您没有看到您的 Linux 实例,则 Windows 卷和 Linux 实例可能位于不同的“区域”(例如“us-east-1a”与“us-east-1b”)。
  4. 确保安全组中的 9999 端口已开放
  5. 启动 Linux 实例
  6. 不是挂载 Windows 卷(我们只希望将 Windows“硬盘”连接到“机器”,而不是 Linux 操作系统来挂载“硬盘”设备内的文件系统)
  7. 通过以下方式安装 cpipesudo apt-get install cpipe

3. 在目标区域创建一个空白 EBS 卷

  1. 目标区域(左上)->卷->创建卷。
  2. 我使用了相同的大小(30GB),但这是一个增加容量的机会。
  3. 记下区域(例如 us-west-2a)。确保它与您希望 Windows EC2 实例所在的区域相同。

4. 在目标区域的同一区域内创建 Linux 实例 阅读上面关于 Linux 实例的部分 (#2)。再次确保目标区域内的 Linux 和 Windows 卷区域相同。在此磁盘写入操作期间,我的 Ubuntu 11.10 32 位“服务器”t1.micro 实例的 CPU 占用率达到 80%。

  1. 启动实例。
  2. *不要**安装 Windows 卷
  3. 将空白的目标 Windows 卷附加到此 Linux 实例。

开始复制过程

1. 目的地 登录Linux EC2实例并输入

sudo sh -c 'netcat -p 9999 -l > /dev/xvdf'

2. 来源 登录Linux EC2实例并输入

sudo sh -c 'cpipe -vt -b 1024 < /dev/xvdf | netcat -q 1 dest-aws-ip-dns-address.com 9999'

笔记:更多新/当前内核将使用 /dev/xvdf 作为 Windows 卷。较旧的内核将其称为 /dev/sdf

笔记2如果您使用的是其他 Linux 发行版,netcat 有时也会被别名为 nc。cpipe 只会向您提供有关进度和传输速率的反馈。netcat 通过 TCP/IP 运行,因此它能够有效防止数据包丢失/损坏。传输完成后,您仍需要在目标上执行 Windows 磁盘检查。

3.等待 在整个从东海岸到西海岸的传输过程中,我获得了精确的 3.00MB/秒(兆字节,不是兆位)。我的 30GB 图像耗时 2 小时 50 分钟。

4.创建新的 Windows EC2 实例 我们有一个卷,但实际上需要一个 EC2 实例/机器来启动任何东西。如果使用 AWS 控制台 GUI 转到卷->快照->AMI,AWS 会错误地创建一个Linux(?!?) VM 无法启动,因为 EC2 配置现在是垃圾。我们通过以下方式解决这个问题:

  1. 在与您的卷相同的区域中创建一个新的 Windows EC2 实例。您将选择库存 Windows AMI,但选择一个最接近您实际 Windows 卷的。我的源映像是 Windows 2003 R2,32 位,EBS 支持,所以我也启动了一个(通用)Windows 2003 R2,32 位,EBS 支持的 AMI。
  2. 启动该实例完全地. 通过 RDP 登录进行验证。
  3. 关闭此实例
  4. 分离在 #1 中创建的 EBS 卷
  5. 将复制的 EBS 卷附加为 /dev/sda1 (不是Web UI 对话框中的默认 /dev/xvdf)
  6. 重启。
  7. 安全措施:检查生成的系统的驱动器(chkdsk)。
  8. 享受!

5. 清理 请记住,你只做了以下事情

  1. 迁移了卷
  2. 重新创建 EC2 实例

如果你终止上述操作,它将永远消失,没有 AMI 可以重新启动它。因此,我强烈建议

  1. 从当前正在运行的实例构建 AMI(右键单击实例 -> 创建映像 AMI)。现在,这就是您的新“第 0 天”参考点。
  2. 也对卷进行快照。是的,我知道上面的 AMI 备份很有帮助,但我每周都会进行备份,所以无论如何我下周都会有一个“第 7 天”的参考。另外,由于快照是不同的,所以我立即做了这件事。

结论 这是一篇很长的文章,但我没有为新手留下任何细节。上面的方法对我从美国东部(弗吉尼亚)迁移到美国西部(俄勒冈)来说 100% 有效。我住在加州,这样做是为了让虚拟机离我更近,而不会影响加州北部更高的费用。

相关内容