Невозможно подключиться к экземпляру EC2 после преобразования Ubuntu 16 PV в Ubuntu 16 HVM

Невозможно подключиться к экземпляру EC2 после преобразования Ubuntu 16 PV в Ubuntu 16 HVM

Итак, прошло несколько дней, а я все еще не могу подключиться к своему новому экземпляру HVM с EC2 под управлением Ubuntu 16. Для справки, я пытаюсь обновить наш сервер с экземпляра m3 под управлением Ubuntu 16 до экземпляра C5 под управлением Ubuntu 16. Почти для каждого метода, который я пробовал, мне удается дойти до точки, где я останавливаю свой новый экземпляр C5, отсоединяю все тома и присоединяю недавно обновленный исходный том как /dev/sda1, но затем, когда я пытаюсь подключиться к экземпляру, я всегда заканчиваю тайм-аутом. Проверка статуса Amazon также не проходит, так как он сообщает, что экземпляр недоступен. Однако системный журнал не показывает никаких проблем при запуске.

Я пробовал делать все, что вэта почта. Я пробовалэта почтатакже. Я посмотрел на других сайтах и ​​далэтотиэтотпопытка. Я даже пробовал и метод с использованием инструментов командной строки ec2, и преобразование AMI из консоли ec2 (онлайн), однако я либо не могу запустить экземпляр C5 с преобразованным AMI, либо экземпляр останавливается и выходит из строя (в случае преобразования через командную строку).

Единственное, что я могу придумать, что может быть причиной этого, это соглашение об именовании разделов на экземпляре C5. Все руководства, которые я видел, используют xvda/xvdf/xvdg. Я могу ошибаться, но у меня нет этих разделов или дисков, а вместо этого есть nvme0n1, nvme0n1p1, (новый корень HVM), nvme1n1, и nvme1n1p1. Когда я попробовал метод HVM / источник / целевой диск, у меня было nvme0n1/nvme0n1p1, nvme1n1(цель -- где все должно оказаться), и nvme2n1/nvme2n1p1(источник -- откуда все было, на m3). Я обнаружилэтот пост Amazon о nvmeтак что я не думаю, что это должно быть проблемой, так как я просто использую правильный диск / раздел при использовании /mnt/, т. е. Я вызываю mkdir -p /mnt/target && mount /dev/nvme1n1 /mnt/targetвместо mkdir -p /mnt/target && mount /dev/xvdf /mnt/target, но пока ничего не работает. Мой экземпляр становится недоступным в тот момент, когда я присоединяю targetas /dev/sda1.

Итак, есть ли что-то, что я упускаю, когда делаю это с диском с именем nvme*? Есть ли какая-либо другая информация или отладочные вещи, которые я могу предоставить, чтобы помочь понять проблему?

решение1

Я понимаю, что этот вопрос не очень-то замечен, но на всякий случай надеюсь, что мои результаты помогут кому-то в будущем (возможно, даже мне, когда я попытаюсь сделать это в следующий раз). Я хотел бы поблагодарить Стива Э. из службы поддержки Amazon за помощь в переносе моего экземпляра <3

В любом случае, при миграции моего экземпляра Ubuntu 16.04 M3 (PV) на экземпляр Ubuntu 16.04 C5 (HVM) возникло 2 проблемы. Первая проблема заключалась в том, что новые экземпляры C5 использовали новые соглашения об именовании, поэтому другие руководства по миграции PV на HVM работали не совсем так. Другая проблема заключалась в том, что мой экземпляр M3 (PV) прошел через обновления до Ubuntu. На самом деле я перешел с Ubuntu 12 на Ubuntu 14 на Ubuntu 16 примерно за последний год. Это вызвало проблему, из-за которой не создавались файлы облачной сети, и поэтому мой экземпляр не мог быть доступен.

В любом случае, чтобы перенести экземпляр Ubuntu 16.04 PV на экземпляр HVM с использованием нового соглашения об именовании nvme, выполните следующие действия:

Краткое описание предварительных условий:

  1. Перед началом работы обязательно установите на свой экземпляр PV следующее:

    $ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
    $ sudo apt-get install linux-aws
    
  2. Остановите экземпляр PV иСоздать снимокего корневого объема,восстановить этот снимоккак новый том EBS в той же зоне доступности источника (запустите экземпляр PV сразу после создания снимка)
  3. Запуск нового экземпляра C5 HVM(назначение) выбор Ubuntu Server 16.04 LTS (HVM) в той же зоне доступности исходного экземпляра (сохраните размер корневого тома EBS этого нового экземпляра равным 8 ГБ, так как этот корневой том будет использоваться только временно)
  4. После запуска экземпляра,прикрепить томвы восстановили на шаге 1 (это корневой том из экземпляра PV) как /dev/sdf(в системе Ubuntu имя будет nvme1n1).
  5. Создать новый (пустой) том EBS(того же размера, что и корневой том вашего «исходного» PV) и подключите его к экземпляру HVM как /dev/sdg(в системе Ubuntu имя будет nvme2n1)

Миграция:

После входа в систему используйте sudo suдля выполнения всех команд от имени пользователя root.

  1. Покажите ваши объемы

    # lsblk 
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    nvme0n1     259:0    0    8G  0 disk 
    └─nvme0n1p1 259:1    0    8G  0 part /
    nvme1n1     259:2    0  100G  0 disk 
    nvme2n1     259:3    0  100G  0 disk 
    

    nvme0n1это только что созданный вами корень HVM (на этот раз только для загрузки) nvme1n1это восстановленный корень PV (будет преобразован в HVM) nvme2n1это пустой том (получит преобразование из корня PV как nvme1n1)

  2. Создайте новый раздел на nvme2n1( nvme2n1p1будет создан)

    # parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit'
    # partprobe /dev/nvme2n1
    # udevadm settle
    
  3. Проверьте 'исходный' том и минимизируйте размер исходной файловой системы, чтобы ускорить процесс. Мы не хотим копировать свободное дисковое пространство на следующем шаге.

    # e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
    
  4. Дублировать «исходный» том в «целевой» том

    # dd if=/dev/nvme1n1 of=/dev/nvme2n1p1 bs=$(blockdev --getbsz /dev/nvme1n1) conv=sparse count=$(dumpe2fs /dev/nvme1n1 | grep "Block count:" | cut -d : -f2 | tr -d "\\ ")
    
  5. Увеличьте размер «целевого» тома до максимума:

    # e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
    
  6. Подготовьте целевой том:

    # mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  7. chrootк новому тому

    # chroot /mnt/
    
  8. Переустановить grubна изолированном томе:

    # grub-install --recheck /dev/nvme2n1
    # update-grub
    

    Выйти изchroot

    # exit
    

    Выключите экземпляр.

    # shutdown -h now
    
  9. После конвертации вам нужно сделать следующее:

    Отсоедините 3 тома, которые у вас были на экземпляре HVM. Присоедините последний созданный вами том (пустой) как /dev/sda1на консоли (ранее он был присоединен как /dev/nvme2n1) на экземпляре HVM. Запустите экземпляр HVM.

Новый экземпляр HVM теперь должен успешно загрузиться и будет точной копией старого исходного экземпляра PV (если вы использовали правильный исходный том). После того, как вы убедились, что все работает, исходный экземпляр может быть завершен.


Обновление конфигурации сети (необязательно)

Теперь, шаги выше будут работать для большинства людей здесь. Однако мой статус экземпляра все еще не был достигнут. Причина была в том, что я обновил Ubuntu на своем экземпляре, вместо того, чтобы начать с нового образа. Это оставило конфигурацию eth0активированной, без 50-cloud-init.cfgфайла конфигурации.

Если у вас уже есть файл /etc/network/interfaces.d/50-cloud-init.cfg, то вы можете следовать и обновить файл, вместо того, чтобы создавать новый. Также предположим, что все команды запускаются через sudo su.

  1. Выключите экземпляр, отсоедините тома и введите ту же конфигурацию, что и раньше. Подключите том 8 ГБ как /dev/sda1/, а ваш конечный целевой том как /dev/sdf/. Запустите экземпляр и войдите в систему.

  2. Смонтировать /dev/sdfего теперь можно, nvme1n1p1выполнив следующие действия:

    # mount /dev/nvme1n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  3. Создайте или обновите файл:

    /etc/network/interfaces.d/50-cloud-init.cfg
    

    Со следующим:

    # This file is generated from information provided by
    # the datasource.  Changes to it will not persist across an instance.
    # To disable cloud-init's network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
    
    auto ens5
    iface ens5 inet dhcp
    
  4. Выйти chroot( exit), завершить работу экземпляра ( shutdown -h now).

  5. Выполните шаг 9, описанный ранее!

Вам следует закончить!


решение2

Спасибо, подсказка по настройке сети сработала в случае обновления (с Ubuntu 14.04 PV на Ubuntu 18.04 PV). Конвертировал обновленную Ubuntu 18.04 PV в Ubuntu 18.04 HVM с небольшой подстройкой в ​​настройке сети. Создал новый /etc/netplan/50-cloud-init.config со следующей конфигурацией

network:
    version: 2
    ethernets:
        all-en:
            match:
                name: "en*"
            dhcp4: true
        all-eth:
            match:
                name: "eth*"
            dhcp4: true

Связанный контент