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

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

另外,我知道这个问题之前已经被问过了,但是截至2011年底没有任何答案。

旧的解决scheme1,2 @ 是否可以将AWS EC2 AMI从一个区域移动到另一个区域,如果是这样的话? 。 问题 :解决scheme1需要不再支持的ElastiFox(从3.6开始,无法在Firefox上运行)。 解决scheme2只是Linux

旧的solution3 @ Amazon EC2从一个地区迁移到另一个地区 。 问题 :需要现在不支持/不兼容的ElastiFox

'Partial'solution4 @ http://blog.taggesell.de/index.php?/archives/85-Amazon-EC2-How-to-migrate-an-EBS-backed-image-from-US-to-EU-或 – where.html 。 问题 :这在AWS系统的“外部”通过创build图像然后作为stream发送它。 另外,还不清楚stream如何防止腐败(如丢包等)。 编辑: netcat是在TCP / IP,所以它是可靠的运输。 在启动时,窗口检查磁盘还是很不错的。

嗯,没有反应,所以我继续前进,并尝试了解决scheme的变种4.原来的解决scheme,因为失败了

  1. netcat使用不当
  2. 更新的Linux内核在他们如何引用Windows卷

所以我会logging什么对我有用。

设置它

我们将使用Linux在整个networking上以字节为单位复制Windows卷。 其实很简单,我刚刚给了详细的指导来帮助新手。

1.在源区域备份Windows EBS卷

  1. closuresWindows EC2实例。
  2. 分离音量。 卷部分 – > Windows卷(右键单击) – >分离音量。
  3. 创build快照。 再次右键单击 – >创build快照。
  4. 注意卷的“区域”(例如“us-east-1b”)。 你很快就需要它

2.在你使用Ubuntu的同一个区域,在你的源代码区域创build一个Linux实例 (search“ubuntu / images”AMIs)。 或者访问http://alestic.com/ ,你会发现最新官方Ubuntu AMI的链接。 我用AMI ami-20f97410作为参考。

  1. select实例types,t1.micro为我工作。 在整个磁盘读取操作中,我的ubuntu 11.10 32位实例占用了40%的CPU。
  2. 在同一个区域中设置实例作为你的Windows卷(例如'us-east-1b')。
  3. 将Windows卷附加到您的Linux实例(右键单击 – >附加 – >selectLinux实例)到/ dev / sdf之类的东西(将来Web UI可能会更改为/ dev / xvdf)。 如果你没有看到你的linux实例,Windows卷和Linux实例可能在不同的“区域”(例如,'us-east-1a'和'us-east-1b')。
  4. 确保安全组中的端口9999已打开
  5. 启动Linux实例
  6. 不要挂载Windows卷(我们只想把“硬盘”连接到“机器”,而不是Linux操作系统来挂载“硬盘”设备中的文件系统)
  7. 通过sudo apt-get install cpipe

3.在目的地区域创build一个空白的EBS卷

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

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

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

开始复制过程

1.目的地login到Linux EC2实例并input

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

2.源login到Linux EC2实例并input

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

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

note2 netcat有时会被别名为nc,以防你正在使用另一个Linux发行版。 cpipe只是给你的反馈进度和转让率。 netcat运行在TCP / IP上,所以它对于丢失/损坏的数据包是健壮的。 一旦传输完成,您仍然希望对目标执行一次Windows磁盘检查。

3.等待从东到西的整个操作过程中,我已经准确地获得了3.00MB /秒(兆字节,而不是兆位)。 我的30GB图像需要2小时50分钟。

4.创build新的Windows EC2实例我们有一个卷,但需要一个EC2实例/机器来实际启动任何东西。 如果使用AWS控制台GUI进行卷 – >快照 – > AMI,AWS会错误地创build一个不启动的Linux (?!?)虚拟机,因为EC2configuration现在是垃圾。 我们通过

  1. 在SAME区域中创build一个新的Windows EC2实例作为您的卷。 您将select股票Windows AMI的,但select一个最接近您的实际Windows卷。 我的源图像是Windows 2003 R2,32位,EBS支持,所以我也发射了一个(通用)Windows 2003 R2,32位,EBS支持的AMI。
  2. 完全引导此实例。 通过RDPlogin进行validation。
  3. closures这个实例
  4. 分离刚才在#1中创build的EBS卷
  5. 将您复制的EBS卷附加为/ dev / sda1( 不是 Web UI对话框中的默认/ dev / xvdf)
  6. 重启。
  7. 安全措施:检查生成的系统驱动器(chkdsk)。
  8. 请享用!

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

  1. 迁移音量
  2. 重新创build了EC2实例

如果你终止了上述,那么它永远消失了,没有AMI可以重新启动它。 所以,我会强烈推荐

  1. 从当前正在运行的实例中构buildAMI(右键单击实例 – >创build映像AMI)。 这是您现在的新“第0天”参考点。
  2. 也做一个卷的快照。 是的,我知道上面的AMI备份有帮助,但我每周备份一次,所以下周我会有一个“第7天”的参考。 另外,因为快照是有差别的,所以我马上做了。

结论这是一个很长的写作,但我没有留下新手的细节。 上述工作从美东(弗吉尼亚州)迁移到美西(俄勒冈州)100%。 我在加利福尼亚州,这样做是为了让虚拟机靠近我,而不会影响北加州的高收费。