Подготовить свой образ диска
Примечание
Использовать можно только образы, подготовленные по этой инструкции.
Вы также можете ознакомиться с готовыми образами в Yandex Cloud Marketplace.
Вы можете использовать собственный файл с образом диска виртуальной машины под управлением операционной системы из семейства Linux. После подготовки образа загрузите его в Compute Cloud.
Если вы подготовили программное обеспечение, которое может быть полезно другим, предложите его в Yandex Cloud Marketplace.
Настройте ОС в соответствии с требованиями
Для образов загрузочного диска должны выполняться следующие требования:
- Установлены драйверы
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 <имя_вашего_файла_образа> <имя_нового_файла_образа>
Примечание
Не используйте программы для сжатия или архивирования при подготовке файла с образом. Для увеличения скорости создания ВМ из образа, вы можете его оптимизировать.