Восстановление тома из снимка - PullRequest
9 голосов
/ 11 марта 2011

Допустим, у меня есть AMI с подключенным томом EBS.

У меня тоже есть снимок.

Я хочу «восстановить» том EBS в моментальный снимок.

Какой лучший способ сделать это?

Ответы [ 5 ]

7 голосов
/ 12 августа 2013

Если у вас есть работающий экземпляр EC2, и вы хотите восстановить его в состояние, захваченное в более раннем снимке, вам необходимо остановить экземпляр, отсоединить его текущий том, создать новый том из снимка, присоединить новыйОбъем вашего экземпляра и перезапустите свой экземпляр.Кроме того, существует несколько тонкостей, связанных с указанием зоны доступности нового тома и имени устройства при отсоединении / повторном подключении тома.

Логика может быть легче увидеть, если вы сделаете это из командной строкивместо веб-интерфейса AWS.

Следующий скрипт 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
7 голосов
/ 12 марта 2011

Я не знаю, как можно «восстановить» подключенный том, но я бы сделал так, чтобы создать том из снимка, а затем отсоединить оригинал и прикрепить новый.

1 голос
/ 25 апреля 2017

Я исправил скрипт, предоставляемый @algal, чтобы использовать aws cli и poll вместо сна. Он также будет искать последний снимок данного тома.

#!/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

Если вы хотите быть в курсе этого сценария или внести свой вклад:

https://github.com/karimtabet/ebs_snapshot_recovery

1 голос
/ 02 апреля 2014

Чтобы заменить том, подключенный к экземпляру, новым томом, созданным из снимка:

  1. Создайте том из снимка в той же зоне доступности, в которой находится экземпляр (щелкните правой кнопкой мыши на снимке инажмите «Создать том из снимка»)
  2. Лучше всего остановить экземпляр, чтобы избежать сбоя любого приложения.Дождитесь остановки экземпляра.
  3. Запишите точное имя устройства исходного тома (оно записывается в консоли AWS в представлении экземпляров или в представлении томов)
  4. Отключите старый том, удалите еговпоследствии, если вам это не нужно.
  5. Присоедините вновь созданный том (из моментального снимка) к экземпляру с тем же именем устройства.
  6. Запустите экземпляр еще раз
0 голосов
/ 13 февраля 2013

Создайте том из снимка, чтобы смонтировать том на существующем компьютере EC2 и скопировать с него файлы.

Проверьте машину EC2.

  1. Выберите экземпляр. Вкладка EC2 | МОМЕНТЫ | Экземпляры.
  2. Запишите зону доступности машины EC2.

Создать том.

  1. Найдите снимок, с которого вы хотите скопировать файлы, и поставьте галочку. ЭЛАСТИЧЕСКИЙ БЛОК МАГАЗИН | Снимки
  2. Нажмите кнопку «Создать том» и заполните поля. o Размер должен быть больше размера снимка (бесплатные микроэкземпляры получают объем 8 ГБ). o Зона доступности должна совпадать с зоной машины EC2. o Снимок уже выбран, более или менее похож на snap12345678 - мое описание.
  3. Нажмите кнопку Да, Создать. Новая строка появится в таблице томов. ЭЛАСТИЧЕСКИЙ БЛОК МАГАЗИН | Объемы

Прикрепите громкость.

  1. Нажмите кнопку Attach Volume и заполните поля.
  2. Значение тома уже есть.
  3. Выберите имя вашего компьютера i-12345678 (работает) из раскрывающегося списка Экземпляры.
  4. В поле «Устройства» отображается первое доступное имя устройства, например / dev / sdf. Кто-нибудь потрудился изменить это значение?
  5. Нажмите кнопку Да, Создать. На устройстве EC2 волшебным образом появляется новое устройство.
  6. Закройте консоль AWS.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...