Подготовить свой образ диска
Примечание
Использовать можно только образы, подготовленные по этой инструкции.
Вы также можете ознакомиться с готовыми образами в Yandex Cloud Marketplace.
Вы можете использовать собственный файл с образом диска виртуальной машины под управлением операционной системы из семейства Linux. После подготовки образа загрузите его в Compute Cloud.
Если вы подготовили программное обеспечение, которое может быть полезно другим, предложите его в Yandex Cloud Marketplace.
Важно
Образы с UEFI/EFI
Настройте ОС в соответствии с требованиями
Для образов загрузочного диска должны выполняться следующие требования:
- Установлены драйверы
virtio-net,virtio-blkиvirtio-pci. Если вы собираетесь подключать к виртуальной машине файловые хранилища, также должен быть установлен драйверvirtiofs. См. инструкцию. - Терминал
ttyS0(порт COM1) настроен в качестве серийной консоли. См. инструкцию. - Сетевой интерфейс корректно запускается при старте ВМ и получает IP-адрес по DHCP.
- Пакет
cloud-initустановлен и настроен для работы с нашим сервисом метаданных. Установить пакет для CentOS можно с помощью командыsudo yum install cloud-init, для Debian или Ubuntu —sudo apt update && sudo apt install -y cloud-init. - Если образ создан на основе Amazon Machine Image (AMI), в настройках
cloud-initотключена проверка облачной платформы, на которой запускается ВМ. См. инструкцию. - В настройках системного файрвола открыт необходимый минимум портов для работы ваших приложений, а также порт для доступа по SSH (по умолчанию это порт 22 TCP).
- SSH-сервер запускается автоматически при старте ВМ.
- Сервисы с вашим приложением устойчивы к перезагрузке ВМ.
- Для загрузочного диска используется MBR-разбивка.
- Диск смонтирован по UUID, а не по имени.
- Файловая система не зашифрована.
Установите virtio-драйверы
Для успешной загрузки в ОС должны присутствовать драйверы virtio-blk, virtio-net и virtio-pci, а для работы с файловыми хранилищами Compute Cloud — virtiofs.
Большинство современных дистрибутивов по умолчанию содержит драйверы virtio. Драйверы могут быть скомпилированы в виде отдельных файлов .ko или входить в состав самого ядра.
По инструкции ниже вы можете проверить, установлены ли драйверы, и при необходимости добавить их в ОС.
-
Узнайте, входят ли драйверы в конфигурацию ядра:
Как узнать
Выполните команду:
grep -E -i "VIRTIO_(BLK|NET|PCI|FS)" /boot/config-$(uname -r)Если на экране не появились строки, начинающиеся на
CONFIG_VIRTIO_BLK=,CONFIG_VIRTIO_NET=,CONFIG_VIRTIO_PCI=иCONFIG_VIRTIO_FS=, нужно заново скомпилировать ядро Linux с virtio-драйверами. В противном случае переходите к следующим шагам. -
Если на шаге 1 на экране появились строки
CONFIG_VIRTIO_BLK=y,CONFIG_VIRTIO_NET=y,CONFIG_VIRTIO_PCI=yиCONFIG_VIRTIO_FS=y, проверьте, что драйверы входят в состав ядра:Как проверить драйверы в составе ядра
Выполните команду:
grep -E "virtio(_blk|_net|_pci|fs)" /lib/modules/"$(uname -r)"/modules.builtin- Если на экране появились строки с файлами
virtio_net.ko,virtio_blk.ko,virtio_pci.koиvirtiofs.ko, драйверы входят в состав ядра, устанавливать их не нужно. - Если на экране не появились такие строки, нужно заново скомпилировать ядро Linux с virtio-драйверами.
- Если на экране появились строки с файлами
-
Если на шаге 1 на экране появились строки
CONFIG_VIRTIO_BLK=m,CONFIG_VIRTIO_NET=m,CONFIG_VIRTIO_PCI=mиCONFIG_VIRTIO_FS=m, проверьте, что драйверы установлены в качестве модулей ядра:Как проверить модули ядра
CentOS/FedoraDebian/UbuntuВыполните следующую команду:
sudo lsinitrd /boot/initramfs-$(uname -r).img | grep -E "virtio(_blk|_net|_pci|fs)"-
Если на экране появились строки с файлами
virtio_net.ko.xz,virtio_blk.ko.xz,virtio_pci.ko.xzиvirtiofs.ko.xz, драйверы установлены в качестве модулей ядра. -
Если на экране не появились такие строки, создайте резервную копию файла
initramfsи установите драйверы:sudo cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak sudo mkinitrd -f --with=virtio_blk --with=virtio_net --with=virtio_pci --with=virtiofs /boot/initramfs-$(uname -r).img $(uname -r)Если на экране появилась ошибка
Command 'mkinitrd' not found, установите драйверы с помощью утилитыdracut:sudo dracut -f --add-drivers "virtio_blk virtio_net virtio_pci virtiofs" /boot/initramfs-$(uname -r).img $(uname -r)После этого перезапустите ОС и проверьте, что драйверы появились в файле
initramfsи загрузились:sudo lsinitrd /boot/initramfs-$(uname -r).img | grep -E "virtio(_blk|_net|_pci|fs)" find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "(blk|net|pci|fs)"После каждой из команд на экране должны появиться строки с файлами
virtio_net.ko.xz,virtio_blk.ko.xz,virtio_pci.ko.xzиvirtiofs.ko.xz.
Выполните следующую команду:
lsinitramfs /boot/initrd.img-$(uname -r) | grep -E "virtio(_blk|_net|_pci|fs)"-
Если на экране появились строки с файлами
virtio_net.ko,virtio_blk.ko,virtio_pci.koиvirtiofs.ko, драйверы установлены в качестве модулей ядра. -
Если на экране не появились такие строки, установите драйверы:
echo -e "virtio_blk\nvirtio_net\nvirtio_pci\nvirtiofs" | sudo tee -a /etc/initramfs-tools/modules sudo update-initramfs -uПосле этого перезапустите ОС и проверьте, что драйверы появились в файле
initrdи загрузились:lsinitramfs /boot/initrd.img-$(uname -r) | grep -E "virtio(_blk|_net|_pci|fs)" find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "(blk|net|pci|fs)"После каждой из команд на экране должны появиться строки с файлами
virtio_net.ko,virtio_blk.ko,virtio_pci.koиvirtiofs.ko.
-
Настройте серийную консоль
Серийная консоль — это способ получить доступ к ВМ вне зависимости от состояния сети или ОС. Используйте серийную консоль, например, для устранения неисправностей ВМ или при возникновении проблем с доступом через SSH. Подробнее см. в разделе Начало работы с серийной консолью.
Чтобы к ВМ можно было подключаться с помощью серийной консоли, настройте для образа терминал ttyS0 (порт COM1) в качестве системной консоли:
-
В файле с настройками GRUB
/etc/default/grubдобавьте в значение параметраGRUB_CMDLINE_LINUXопциюconsole=ttyS0. Строка с этим параметром должна иметь такой вид:GRUB_CMDLINE_LINUX="foo=bar baz console=ttyS0" -
Убедитесь, что в файле
/etc/securettyс перечислением терминалов, через которые пользовательrootможет войти в ОС, есть строкаttyS0. Если файла не существует, создайте его.Примечание
В некоторых ОС файл
/etc/securettyне используется, и пользователюrootпо умолчанию разрешен доступ ко всем терминалам. Если вы хотите настраивать доступ с помощью этого файла, нужно добавить в файл/etc/pam.d/loginуказание на модульpam_securetty.so. Подробнее см.man pam_securettyиman pam.d. -
Выполните следующие команды:
CentOS/FedoraDebian/Ubuntusudo stty -F /dev/ttyS0 9600 # Устанавливает рекомендуемую скорость терминала ttyS0 — 9600 бод. sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Генерирует конфигурационный файл для GRUB. sudo systemctl start getty@ttyS0 # Запускает getty на терминале ttyS0. sudo systemctl enable getty@ttyS0 # Указывает, что getty нужно запускать при каждом включении ОС.sudo stty -F /dev/ttyS0 9600 # Устанавливает рекомендуемую скорость терминала ttyS0 — 9600 бод. sudo update-grub # Генерирует конфигурационный файл для GRUB. sudo systemctl start getty@ttyS0 # Запускает getty на терминале ttyS0. sudo systemctl enable getty@ttyS0 # Указывает, что getty нужно запускать при каждом включении ОС. -
Перезапустите ОС.
После создания ВМ из образа ее нужно будет дополнительно настроить для работы с серийной консолью.
Отключите проверку облачной платформы при создании образа в Amazon EC2
Если вы создаете образ в Amazon EC2 на основе Amazon Machine Image, cloud-init проверяет, что ВМ запускается в Amazon EC2. ВМ в Yandex Compute Cloud не пройдут проверку и могут работать некорректно.
Чтобы этого не произошло, отключите проверку метаданных на ВМ. Для этого создайте в директории /etc/cloud/cloud.cfg.d конфигурационный файл, например 99-ec2-datasource.cfg, и добавьте в него код:
#cloud-config
datasource_list: [Ec2]
datasource:
Ec2:
strict_id: false
Внимание
В релизах пакета cloud-init, начиная с версии 25.1.4, а также 24.4.1-0ubuntu0~20.04.3+esm1 и 23.1.2-0ubuntu0~18.04.1+esm1, были внесены изменения
После обновления у таких виртуальных машин может наблюдаться проблема с запуском из снимка или образа загрузочного диска.
Чтобы исправить эту проблему, на существующей ВМ выполните команду:
echo "datasource_list: [Ec2]" | sudo tee /etc/cloud/cloud.cfg.d/99999_ds_list.cfg
Установите драйверы для совместимости с GPU
Если при работе с ВМ потребуется GPU, во время подготовки образа установите драйверы NVIDIA.
Создайте файл с образом
Поддерживаемые форматы: Qcow2, VMDK, RAW и VHD.
Рекомендуется использовать формат Qcow2 с оптимизированным размером кластера, чтобы ускорить импорт. Сконвертировать образ из других форматов можно с помощью утилиты qemu-img:
qemu-img convert -p -O qcow2 -o cluster_size=2M <имя_вашего_файла_образа> <имя_нового_файла_образа>
Примечание
Не используйте программы для сжатия или архивирования при подготовке файла с образом. Для увеличения скорости создания ВМ из образа, вы можете его оптимизировать.