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

Dee*_*101 4 windows migration amazon-ec2

我在弗吉尼亚州有一个 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 在启动时检查磁盘仍然很好。

Dee*_*101 7

嗯,没有回应,所以我继续尝试了解决方案 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. 通过安装cpipe sudo 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 实例达到了 80% 的 CPU。

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

开始复制过程

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

sudo sh -c 'netcat -p 9999 -l > /dev/xvdf'
Run Code Online (Sandbox Code Playgroud)

2. Source 登录Linux EC2实例并输入

sudo sh -c 'cpipe -vt -b 1024 < /dev/xvdf | netcat -q 1 dest-aws-ip-dns-address.com 9999'
Run Code Online (Sandbox Code Playgroud)

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

note2 netcat 有时别名为 nc,以防您使用其他 Linux 发行版。cpipe 只是给你关于进度和传输率的反馈。netcat 在 TCP/IP 上运行,因此它对丢弃/损坏的数据包具有强大的抵抗力。传输完成后,您仍希望对目标执行 Windows 磁盘检查。

3. 等等 ,在从东海岸到西海岸的整个操作过程中,我得到了精确的 3.00MB/秒(Mbytes,而不是 Mbits)。我的 30GB 图像花了 2 小时 50 分钟。

4. 创建新的 Windows EC2 实例 我们有一个卷,但需要一个 EC2 实例/机器来实际启动任何东西。如果使用 AWS 控制台 GUI 转到 volume->snapshot->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%。我在加州,这样做是为了让 VM 离我更近,而不会影响加州北部的更高费用。