从快照恢复卷
回答
我不知道一种方法可以“恢复”连接的卷,但我会这样做的方式是从快照创建卷,然后分离原始文件并附加新卷。
从快照创建卷以在现有EC2计算机上挂载卷并从中复制文件。
检查EC2机器。
- 挑选一个实例。 EC2选项卡|实例|实例。
- 记下EC2机器的可用区域。
创建一个卷。
- 找到您想要复制文件的快照并勾选此框。 ELASTIC BLOCK STORE |快照
- 单击创建音量按钮并填写字段。 o大小必须大于快照大小(免费微型实例获得8GB卷)。 o可用区域必须与EC2机器相同。 o快照已被选中,或多或少像snap12345678 - 我的描述。
- 单击是,创建按钮。一个新行出现在“卷”表中。 ELASTIC BLOCK STORE |卷
附加卷。
- 单击附加音量按钮并填写字段。
- Volume值已经存在。
- 从Instances的下拉列表中选择您的计算机名称i-12345678(正在运行)。
- 设备字段显示第一个可用的设备名称,如/ dev/sdf。有人打扰改变这个价值吗?
- 单击是,创建按钮。神奇的EC2机器上出现一个新的设备。
- 关闭AWS控制台。
如果您有一个正在运行的EC2实例,并且您希望将其恢复到先前快照中捕获的状态,则需要停止实例,分离其当前卷,从快照创建新卷,将新卷附加到您的实例,然后重新启动您的实例。此外,指定新卷的可用区域以及拆卸/重新连接卷时的设备名称有一些细微之处。
如果您是从命令行执行此操作,而不是从AWS Web UI执行操作,则可能会更容易看到逻辑。
以下bash脚本是不适合生产使用,因为它没有任何错误检查,它仅仅使用sleep
,而不是投票,以确保AWS命令已经完成。但它确实成功地执行这些步骤:
#!/bin/bash
set -e
# IN PARAMS
INSTANCE_ID=<YOUR_INSTANCE_ID_HERE>
SNAPSHOT_ID=<YOUR_SNAPSHOT_ID_HERE>
# OUT PARAMS
VOLUME_ID=
# begin execution
echo "Gathering information about the instance"
DEVICE_NAME=`ec2-describe-instance-attribute ${INSTANCE_ID} --block-device-mapping | awk '{print $2}'`
OLD_VOLUME_ID=`ec2-describe-instance-attribute ${INSTANCE_ID} --block-device-mapping | awk '{print $3}'`
echo "Found instance ${INSTANCE_ID} has volume ${OLD_VOLUME_ID} on device ${DEVICE_NAME}"
echo "Creating new volume from snapshot"
AVAILABILITY_ZONE=`ec2-describe-availability-zones --filter state=available | head -n 1 | awk '{print $2}'`
VOLUME_ID=`ec2-create-volume --availability-zone ${AVAILABILITY_ZONE} --snapshot ${SNAPSHOT_ID} | awk '{print $2}'`
echo "Created new volume: ${VOLUME_ID}"
sleep 20
echo "Stopping the instance"
ec2-stop-instances $INSTANCE_ID
sleep 20
echo "Detaching current volume"
ec2-detach-volume $OLD_VOLUME_ID --instance $INSTANCE_ID --device $DEVICE_NAME
sleep 20
echo "Attaching new volume"
ec2-attach-volume $VOLUME_ID --instance $INSTANCE_ID --device $DEVICE_NAME
sleep 20
echo "Starting the instance"
ec2-start-instances $INSTANCE_ID
哇......谢谢! ...我正在讨论,它实际上是工作,除了:ec2-start-instance和ec2-stop-instances似乎现在作为ec2start和ec2stop工作。另外我不得不用--region在所有命令中指定区域,因为对我来说不是默认的。 – Rafael 2013-09-12 16:48:15
另外我发现我无法将卷附加到不在相同可用区域的实例,因此我必须修改脚本以使用与该实例相同的可用区域。 – Rafael 2013-09-12 17:02:00
@Rafael感谢您的评论。我修正了ec2- {start,stop} -instance,这应该是ec2- {start,stop} -instances。但你是对的:这也应该查询和检查可用性区域。最后,我写了一个python脚本来处理这个脚本,并使用轮询而不是睡眠。 Bash变得相当笨拙。 – algal 2013-09-14 00:55:57
要更换连接到一个实例从快照创建新卷的卷:
- 在同一个可用性区域从快照创建卷实例是(右键点击快照,然后单击“创建快照卷”)
- 最好停止实例,以避免崩溃的应用程序。等到实例停止。
- 写下原体积的准确设备名(它是写在AWS控制台下的情况下,查看或卷查看)
- 拆下旧卷,删除之后,如果你不需要它。
- 将新创建的卷(从快照)附加到具有相同设备名称的实例。
- 启动实例再次
,我摸到了由@algal提供使用AWS CLI和投票,而不是睡眠的脚本。它还将查找给定卷的最新快照。
#!/bin/bash
set -e
# IN PARAMS
RECOVERY_INSTANCE_ID=
SNAPSHOT_VOLUME_ID=
echo "Gathering information about the instance"
BLOCK_DEVICE_MAPPING=`aws ec2 describe-instance-attribute --instance-id ${RECOVERY_INSTANCE_ID} --attribute blockDeviceMapping`
DEVICE_NAME=`echo ${BLOCK_DEVICE_MAPPING} | jq '.BlockDeviceMappings[0].DeviceName' | tr -d '"'`
OLD_VOLUME_ID=`echo ${BLOCK_DEVICE_MAPPING} | jq '.BlockDeviceMappings[0].Ebs.VolumeId' | tr -d '"'`
AVAILABILITY_ZONE=`aws ec2 describe-instances --filters "Name=instance-id,Values='${RECOVERY_INSTANCE_ID}'" | jq '.Reservations[0].Instances[0].Placement.AvailabilityZone' | tr -d '"'`
LATEST_SNAPSHOT_ID=`aws ec2 describe-snapshots --filter "Name=volume-id,Values='${SNAPSHOT_VOLUME_ID}'" | jq '.[]|max_by(.StartTime)|.SnapshotId' | tr -d '"'`
echo "Found instance ${RECOVERY_INSTANCE_ID} in ${AVAILABILITY_ZONE} has volume ${OLD_VOLUME_ID} on device ${DEVICE_NAME}"
echo "Creating new volume from snapshot ${LATEST_SNAPSHOT_ID}"
NEW_VOLUME_ID=`aws ec2 create-volume --region eu-west-1 --availability-zone ${AVAILABILITY_ZONE} --snapshot-id ${LATEST_SNAPSHOT_ID} | jq '.VolumeId' | tr -d '"'`
echo "Created new volume ${NEW_VOLUME_ID}"
aws ec2 wait volume-available --volume-ids $NEW_VOLUME_ID
echo "Stopping the instance"
aws ec2 stop-instances --instance-ids $RECOVERY_INSTANCE_ID
aws ec2 wait instance-stopped --instance-ids $RECOVERY_INSTANCE_ID
echo "Detaching current volume"
aws ec2 detach-volume --volume-id $OLD_VOLUME_ID --instance-id $RECOVERY_INSTANCE_ID
aws ec2 wait volume-available --volume-ids $OLD_VOLUME_ID
echo "Attaching new volume"
aws ec2 attach-volume --volume-id $NEW_VOLUME_ID --instance-id $RECOVERY_INSTANCE_ID --device $DEVICE_NAME
aws ec2 wait volume-in-use --volume-ids $NEW_VOLUME_ID
echo "Starting the instance"
aws ec2 start-instances --instance-ids $RECOVERY_INSTANCE_ID
如果你想保持最新与此脚本或贡献:从http://www.techrepublic.com/blog/the-enterprise-cloud
- 1. 从virtualbox中的快照恢复
- 2. 从Xcode快照手动恢复文件
- 3. VirtualBox Python API恢复快照
- 4. 从EC2删除快照/卷
- 5. 用于复制的EBS卷的快照
- 6. 从tarball创建一个AWS卷/快照
- 7. 应用程序无法从快照视图正确恢复
- 8. 使用快照的AWS EBS卷挂载
- 9. 找到卷被删除的快照
- 10. 无法将数据库恢复到SQL Server中的快照
- 11. 恢复到多个虚拟机的VM快照
- 12. RepositoryException在恢复Ubuntu机器中Elastic Search的快照时
- 13. Xcode快照恢复失败:“文件已存在”
- 14. 如何检查快照恢复操作是否已完成
- 15. 如何查看Acumatica中快照恢复的进度
- 16. 如何使用Google Compute Engine中的快照恢复实例?
- 17. 使用SQL管理对象(SMO)恢复数据库快照
- 18. Redshift从快照恢复 - 群集状态对群集意味着什么?
- 19. 根据同一EBS卷的几张快照的最后EBS快照创建EBS卷
- 20. 使用批处理文件,打开虚拟框,恢复到指定的快照,并打开快照映像
- 21. 在QTableView中恢复垂直卷轴
- 22. grep和打印恢复参照
- 23. 照片拍摄后恢复camera.preview()
- 24. Redis复制:从机是否从快照中读取?
- 25. 应用程序的屏幕快照被显示,而不是launchScreen状态恢复
- 26. 亚马逊RDS:在没有备份的情况下恢复快照
- 27. 在java中:创建一个目录的快照并将其恢复
- 28. Web架构 - 如何有效地保存和恢复数据库快照
- 29. 是否可以在没有快照的情况下恢复Cassandra节点?
- 30. cassandra快照在不同的集群上恢复丢失的模式
Copypasta /备份和恢复 - 快照 - 亚马逊-EC2-机器/ – bwerks 2015-09-09 18:47:21
'/ dev/sdf'“有没有人打扰改变这个值? - 是的,如果我正在更换根音量,我将它设置为'/ dev/sda1'(这是我的根音量设置) – Randall 2016-03-23 18:17:10