背景:

一个EC2 的 Windows 实例出现了问题,豆子打算从备份的EBS Snapshot上创建一个AMI 镜像,然后再通过镜像创建一个新的实例。然后问题来了,同样的操作在Linux上执行过几次 都没问题,但是没想到在Windows上面就行不通了。问题出在AMI的镜像上面,通过EBS Snapshot创建的 Windows 镜像,他显示的Platform 是 other Linux, 如果我在通过他来launch一个实例的话,这个实例我根本就无法访问。

AWS 如何从EBS Snapshot 恢复 Windows 系统

解决方式:

通过AWS 命令行来创建AMI

https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html

执行下面命令,他会通过指定的snapshotid创建一个AMI 这个过程比较慢,豆子100G的硬盘大概花了30分钟来创建

aws ec2 import-image --license-type AWS --disk-containers SnapshotId=snap-XXXXXXXXX

在等待的过程中,可以通过下面的命令来查看进度

aws ec2 describe-import-image-tasks --import-task-ids import-ami-XXXXXXX

创建好之后 发现正确的显示了Platform 为 windows

AWS 如何从EBS Snapshot 恢复 Windows 系统

这样就可以通过这个AMI再次创建EC2 实例了。

更改登录密码

创建成功之后 可能会有另外一个问题。这个新创建的服务器如果历史比较久,机器密码过期,那会失去了和AD的信任连接,这意味我们需要用本地管理员账号登录。这种通过snapshot还原的instance没法通过EC2的控制面板直接修改管理员密码,我们可以通过下面的方法进行重设

Window 2012

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ResettingAdminPassword_EC2Config.html

Windows 2016
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ResettingAdminPassword_EC2Launch.html

简单的说就是三步:

  1. 关机,detach 操作系统的volume
  2. 把这个volume attach到其他instance上,然后修改 \Program Files\Amazon\Ec2ConfigService\Settings\config.xml 文件, disabled 改成 Enabled

AWS 如何从EBS Snapshot 恢复 Windows 系统

  1. 最后再把这个volume 重新 attch 回到原先的instance上,注意挂载名为 /dev/sda1

  2. 重新设置密码 登录即可