- Вопрос или проблема
- Ответ или решение
- Замена корневого диска EC2 с использованием снимка, связанного с экземпляром
- Подготовка
- Шаг 1: Создание нового тома из снимка
- Шаг 2: Присоединение нового тома
- Шаг 3: Остановка экземпляра и изменение корневого устройства
- Шаг 4: Возможные дополнительные шаги
- Шаг 5: Запуск экземпляра
- Шаг 6: Отсоединение временного тома (необязательно)
Вопрос или проблема
У меня есть экземпляр EC2 с корневым томом (/dev/xvda1
) и присоединенным устройством, которое не является корневым (/dev/xvdh1
), но которое смонтировано в корень:
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
xvda 202:0 0 200G 0 disk
└─xvda1 202:1 0 200G 0 part
xvdh 202:112 0 200G 0 disk
└─xvdh1 202:113 0 200G 0 part /
Я хотел бы заменить корневой том на устройство, которое не является корневым.
Я создал снимок устройства, на котором есть данные, которые мне нужны (/dev/xvdh1
), а затем попытался заменить корневой том (/dev/xvda1
) на этот снимок, в результате чего получил следующее сообщение об ошибке:
% aws ec2 create-replace-root-volume-task --instance-id i-foobarbaz --snapshot-id snap-foobarbaz --no-delete-replaced-root-volume
Произошла ошибка (InvalidParameterValue) при вызове операции CreateReplaceRootVolumeTask: Неверный снимок для корневого тома для virt i-foobarbaz. Снимок должен быть одним из корневых томов, присоединенных к экземпляру в прошлом
В конечном итоге я хотел бы полностью заменить содержимое /dev/xvda1
на то, что есть на /dev/xvdh1
, а затем отсоединить /dev/xvdh1
, чтобы у меня был этот хост, работающий на корневом томе с необходимыми файлами, без оплаты за оба xvda1
и xvdh1
.
Что мне нужно сделать, чтобы достичь этого, минуя или иным образом устраняя это сообщение об ошибке?
Перед тем как что-либо делать, я бы сначала создал новый AMI из текущего экземпляра в качестве меры предосторожности.
Поскольку у вас уже есть снимок необходимых вам данных, вы можете создать новый том на основе этого снимка.
Создайте новый том из снимка, который вы сделали с /dev/xvdh1
:
aws ec2 create-volume --availability-zone <instance-az> --snapshot-id snap-foobarbaz --volume-type gp3 --size 200
Присоедините этот вновь созданный том к экземпляру в качестве временного тома (например, /dev/sdf
или другое неиспользуемое имя устройства).
aws ec2 attach-volume --instance-id i-foobarbaz --volume-id vol-<new-volume-id> --device /dev/sdf
Затем остановите экземпляр и отсоедините корневой том (/dev/xvdh1
). Теперь вновь присоедините том, который вы создали из снимка, в качестве корневого устройства (/dev/xvda
).
Также может быть необходимо изменить конфигурацию загрузки, если экземпляр EC2 не загружается после этого изменения. Вам потребуется обновить файл fstab
или переустановить загрузчик.
Ответ или решение
Замена корневого диска EC2 с использованием снимка, связанного с экземпляром
В этой инструкции мы рассмотрим, как заменить корневой диск EC2 на снимок, который был создан с другого диска, прикреплённого к вашему экземпляру EC2. Мы подробно разберём последовательность действий, чтобы избежать ошибок, таких как сообщение о невалидном снимке.
Подготовка
Прежде всего, настоятельно рекомендуется создать новый AMI (Amazon Machine Image) из текущего экземпляра EC2 в качестве меры предосторожности. Это позволит вам восстановить систему в случае возникновения непредвиденных проблем во время процесса замены корневого диска.
Шаг 1: Создание нового тома из снимка
У вас уже есть снимок (snap-foobarbaz
), созданный из устройства /dev/xvdh1
, который вы хотите использовать для замены корневого диска. Следуйте этим шагам для создания нового тома:
- Создайте новый том из снимка:
aws ec2 create-volume --availability-zone <instance-az> --snapshot-id snap-foobarbaz --volume-type gp3 --size 200
Замените
<instance-az>
на зону доступности вашего экземпляра EC2.
Шаг 2: Присоединение нового тома
После того как новый том создан, вам нужно прикрепить его к вашему экземпляру EC2:
- Прикрепите новый том как временный (например,
/dev/sdf
или другое доступное имя устройства):aws ec2 attach-volume --instance-id i-foobarbaz --volume-id vol-<new-volume-id> --device /dev/sdf
Шаг 3: Остановка экземпляра и изменение корневого устройства
-
Остановите экземпляр:
aws ec2 stop-instances --instance-ids i-foobarbaz
Ждите, пока экземпляр полностью остановится.
-
Отключите оригинальный корневой диск (
/dev/xvda1
):aws ec2 detach-volume --volume-id vol-<original-volume-id>
-
Прикрепите новый том как корневой:
aws ec2 attach-volume --instance-id i-foobarbaz --volume-id vol-<new-volume-id> --device /dev/xvda
Шаг 4: Возможные дополнительные шаги
После замены корневого диска возможно, что потребуется внести изменения в конфигурацию загрузки, в частности:
-
Обновление файла fstab: проверьте файл
/etc/fstab
на наличие правильных привязок. Убедитесь, что идентификаторы дисков соответствуют новым устройствам. -
Переустановка загрузчика: если экземпляр не загружается после внесения изменений, возможно, потребуется переустановить загрузчик (например, GRUB).
Шаг 5: Запуск экземпляра
-
После всех изменений, запустите экземпляр:
aws ec2 start-instances --instance-ids i-foobarbaz
-
Проверьте состояние: Убедитесь, что экземпляр запускается успешно и что данные на новом корневом диске доступны.
Шаг 6: Отсоединение временного тома (необязательно)
Если вы больше не нуждаетесь во временном томе, вы можете его отключить:
- Отключите временный том:
aws ec2 detach-volume --volume-id vol-<temporary-volume-id>
Теперь вы успешно заменили корневой том на новый, созданный из снимка. Это позволит вашему экземпляру EC2 работать с необходимыми данными без необходимости поддерживать работу двух томов. Всегда помните о важности резервного копирования данных перед выполнением значительных изменений в инфраструктуре.