Подготовить свой образ диска
Примечание
Использовать можно только образы, подготовленные по этой инструкции.
Вы также можете ознакомиться с готовыми образами в 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:
  Ec2:
    strict_id: false
Установите драйверы для совместимости с GPU
Если при работе с ВМ потребуется GPU, во время подготовки образа установите драйверы NVIDIA.
Создайте файл с образом
Поддерживаемые форматы: Qcow2, VMDK, RAW и VHD.
Рекомендуется использовать формат Qcow2 с оптимизированным размером кластера, чтобы ускорить импорт. Сконвертировать образ из других форматов можно с помощью утилиты qemu-img:
qemu-img convert -p -O qcow2 -o cluster_size=2M <имя_вашего_файла_образа> <имя_нового_файла_образа>
Примечание
Не используйте программы для сжатия или архивирования при подготовке файла с образом. Для увеличения скорости создания ВМ из образа, вы можете его оптимизировать.