Как заменить корневой volume EC2 на снимок, который будет подключен к экземпляру в будущем.

Вопрос или проблема

У меня есть экземпляр 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, который вы хотите использовать для замены корневого диска. Следуйте этим шагам для создания нового тома:

  1. Создайте новый том из снимка:
    aws ec2 create-volume --availability-zone <instance-az> --snapshot-id snap-foobarbaz --volume-type gp3 --size 200

    Замените <instance-az> на зону доступности вашего экземпляра EC2.

Шаг 2: Присоединение нового тома

После того как новый том создан, вам нужно прикрепить его к вашему экземпляру EC2:

  1. Прикрепите новый том как временный (например, /dev/sdf или другое доступное имя устройства):
    aws ec2 attach-volume --instance-id i-foobarbaz --volume-id vol-<new-volume-id> --device /dev/sdf

Шаг 3: Остановка экземпляра и изменение корневого устройства

  1. Остановите экземпляр:

    aws ec2 stop-instances --instance-ids i-foobarbaz

    Ждите, пока экземпляр полностью остановится.

  2. Отключите оригинальный корневой диск (/dev/xvda1):

    aws ec2 detach-volume --volume-id vol-<original-volume-id>
  3. Прикрепите новый том как корневой:

    aws ec2 attach-volume --instance-id i-foobarbaz --volume-id vol-<new-volume-id> --device /dev/xvda

Шаг 4: Возможные дополнительные шаги

После замены корневого диска возможно, что потребуется внести изменения в конфигурацию загрузки, в частности:

  1. Обновление файла fstab: проверьте файл /etc/fstab на наличие правильных привязок. Убедитесь, что идентификаторы дисков соответствуют новым устройствам.

  2. Переустановка загрузчика: если экземпляр не загружается после внесения изменений, возможно, потребуется переустановить загрузчик (например, GRUB).

Шаг 5: Запуск экземпляра

  1. После всех изменений, запустите экземпляр:

    aws ec2 start-instances --instance-ids i-foobarbaz
  2. Проверьте состояние: Убедитесь, что экземпляр запускается успешно и что данные на новом корневом диске доступны.

Шаг 6: Отсоединение временного тома (необязательно)

Если вы больше не нуждаетесь во временном томе, вы можете его отключить:

  1. Отключите временный том:
    aws ec2 detach-volume --volume-id vol-<temporary-volume-id>

Теперь вы успешно заменили корневой том на новый, созданный из снимка. Это позволит вашему экземпляру EC2 работать с необходимыми данными без необходимости поддерживать работу двух томов. Всегда помните о важности резервного копирования данных перед выполнением значительных изменений в инфраструктуре.

Оцените материал
Добавить комментарий

Капча загружается...