Итак, прошло несколько дней, а я все еще не могу подключиться к своему новому экземпляру 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
, но пока ничего не работает. Мой экземпляр становится недоступным в тот момент, когда я присоединяю target
as /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, выполните следующие действия:
Краткое описание предварительных условий:
Перед началом работы обязательно установите на свой экземпляр PV следующее:
$ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists $ sudo apt-get install linux-aws
- Остановите экземпляр PV иСоздать снимокего корневого объема,восстановить этот снимоккак новый том EBS в той же зоне доступности источника (запустите экземпляр PV сразу после создания снимка)
- Запуск нового экземпляра C5 HVM(назначение) выбор Ubuntu Server 16.04 LTS (HVM) в той же зоне доступности исходного экземпляра (сохраните размер корневого тома EBS этого нового экземпляра равным 8 ГБ, так как этот корневой том будет использоваться только временно)
- После запуска экземпляра,прикрепить томвы восстановили на шаге 1 (это корневой том из экземпляра PV) как
/dev/sdf
(в системе Ubuntu имя будетnvme1n1
). - Создать новый (пустой) том EBS(того же размера, что и корневой том вашего «исходного» PV) и подключите его к экземпляру HVM как
/dev/sdg
(в системе Ubuntu имя будетnvme2n1
)
Миграция:
После входа в систему используйте sudo su
для выполнения всех команд от имени пользователя root.
Покажите ваши объемы
# 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
)Создайте новый раздел на
nvme2n1
(nvme2n1p1
будет создан)# parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit' # partprobe /dev/nvme2n1 # udevadm settle
Проверьте 'исходный' том и минимизируйте размер исходной файловой системы, чтобы ускорить процесс. Мы не хотим копировать свободное дисковое пространство на следующем шаге.
# e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
Дублировать «исходный» том в «целевой» том
# 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 "\\ ")
Увеличьте размер «целевого» тома до максимума:
# e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
Подготовьте целевой том:
# mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
chroot
к новому тому# chroot /mnt/
Переустановить grubна изолированном томе:
# grub-install --recheck /dev/nvme2n1 # update-grub
Выйти из
chroot
# exit
Выключите экземпляр.
# shutdown -h now
После конвертации вам нужно сделать следующее:
Отсоедините 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
.
Выключите экземпляр, отсоедините тома и введите ту же конфигурацию, что и раньше. Подключите том 8 ГБ как
/dev/sda1/
, а ваш конечный целевой том как/dev/sdf/
. Запустите экземпляр и войдите в систему.Смонтировать
/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
Создайте или обновите файл:
/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
Выйти
chroot
(exit
), завершить работу экземпляра (shutdown -h now
).Выполните шаг 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