從快照恢復卷
回答
我不知道一種方法可以「恢復」連接的卷,但我會這樣做的方式是從快照創建卷,然後分離原始文件並附加新卷。
從快照創建卷以在現有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