IP-KVM через QEMU

Устранение неисправностей при загрузке операционной системы на серверах без KVM — непростое занятие. Создаем себе KVM-over-IP через образ восстановления и виртуальную машину.

В случае возникновения проблем с операционной системой на удаленном сервере, администратор загружает образ восстановления и проводит необходимые работы. Такой способ отлично работает, когда причина сбоя известна, а образ восстановления и установленная на сервере операционная система из одного семейства. Если причина сбоя еще не известна, необходимо понаблюдать за ходом загрузки операционной системы.

Удаленный KVM

Получить доступ к консоли сервера можно с помощью встроенных средств, таких как IPMI или Intel® vPro™, или с помощью внешних устройств, именуемых IP-KVM. Существуют ситуации, в которых все из перечисленных технологий недоступны. Однако, это не конец. Если сервер можно удаленно перезагрузить в образ восстановления на базе операционной системы семейства Linux, то можно быстро организовать KVM-over-IP.

Образ восстановления представляет собой полноценную операционную систему, которая размещается в оперативной памяти. Таким образом, мы можем запускать любое программное обеспечение, в том числе и виртуальные машины (ВМ). То есть можно запустить ВМ, внутри которой будет работать операционная система сервера. Доступ к консоли ВМ может быть организован, например, через VNC.

Для запуска операционной системы сервера внутри ВМ необходимо указать диски сервера в качестве дисков ВМ. В операционных системах семейства Linux физические диски представляются блочными устройствами вида /dev/sdX, с которыми можно работать как с обычными файлами.

Некоторые гипервизоры, такие как QEMU и VirtualBox позволяют хранить данные ВМ в «сыром» виде, то есть только данные хранилища без метаданных гипервизора. Таким образом, ВМ можно запустить с использованием физических дисков сервера.

Подобный способ требует ресурсов на запуск образа восстановления и ВМ внутри него. Однако, при наличии четырех и более гигабайт оперативной памяти это не станет проблемой.

Подготовка окружения

В качестве виртуальной машины можно использовать легковесную и простую программу QEMU, которая чаще всего не является частью образа восстановления, поэтому должна быть установлена отдельно. Образ восстановления, который мы предлагаем клиентам, основан на Arch Linux, в котором используется пакетный менеджер pacman.

Сперва необходимо удостовериться, что образ восстановления использует последнии версии программного обеспечения. Выполнить проверку и обновить все компоненты ОС можно следующей командой:

pacman -Suy

После обновления необходимо установить QEMU. Команда на установку через pacman будет выглядеть так:

pacman -S qemu

Проверим, что qemu установилась корректно:

root@sel-rescue ~ # qemu-system-x86_64 --version
QEMU emulator version 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

Если все так, то образ восстановления готов к работе.

Запуск виртуальной машины

Сперва необходимо определиться с количеством ресурсов, выделяемых ВМ, и выяснить пути до физических дисков. В нашем случае мы выделим два ядра и два гигабайта оперативной памяти виртуальной машине, а диски находятся по пути /dev/sda и /dev/sdb. Запустим ВМ:

qemu-system-x86_64 \
    -m 2048M \
    -net nic -net user \
    -enable-kvm \
    -cpu host,nx \
    -M pc \
    -smp 2 \
    -vga std \
    -drive file=/dev/sda,format=raw,index=0,media=disk \
    -drive file=/dev/sdb,format=raw,index=1,media=disk \
    -vnc :0,password \
    -monitor stdio

Немного подробнее о том, что значит каждый из параметров:

  • -m 2048M — выделяем 2 ГБ оперативной памяти на ВМ;
  • -net nic -net user — добавляем простое подключение к сети через гипервизор с использованием NAT (Network Address Translation);
  • -enable-kvm — включаем полную виртуализацию KVM (Kernel Virtual Machine);
  • -cpu host — говорим виртуальному процессору получить весь функционал процессора сервера;
  • -M pc — тип оборудования PC;
  • -smp 2 — виртуальный процессор должен быть двухъядерным;
  • -vga std — выбираем стандартную видеокарту, которая не поддерживает большие разрешения экрана;
  • -drive file=/dev/sda,format=raw,index=0,media=disk
    • file=/dev/sdX — путь до блочного устройства, представляющего диск сервера;
    • format=raw — помечаем, что в указанном файле все данные лежат в «сыром» виде, то есть как на диске;
    • index=0 — номер диска, должен увеличиваться для каждого следующего диска на единицу;
    • media=disk — виртуальная машина должна распознать это хранилище как диск;
  • -vnc :0, password — запускаем VNC-сервер по умолчанию на 0.0.0.0:5900, в качестве авторизации используем пароль;
  • -monitor stdio — общение администратора с qemu будет происходить через стандартные потоки ввода-вывода.

Если все в порядке, то запустится QEMU монитор:

QEMU 4.0.0 monitor - type 'help' for more information
(qemu)

Мы указали, что авторизация происходит по паролю, но не указали сам пароль. Сделать это можно отправив команду change vnc password в QEMU-монитор. Важное замечание: пароль не может быть больше восьми символов.

(qemu) change vnc password
Password: ******

После этого мы можем подключиться любым VNC-клиентом, например, Remmina, по IP-адресу нашего сервера с указанным нами паролем.

Параметры для подключения по VNC
VNC-клиент помогает выяснить, почему операционная система не загрузилась.

Теперь мы не только видим возможные ошибки на этапе загрузки, но и можем с ними бороться.

По окончании работ необходимо завершить виртуальную машину. Это можно сделать как внутри ОС, подав сигнал на выключение, либо дать команду system_powerdown в QEMU-монитор. Это будет эквивалентно однократному нажатию кнопки выключения: операционная система внутри виртуальной машины плавно завершится.

Установка операционной системы

Виртуальная машина имеет полный доступ к дискам сервера и потому может быть использована для установки операционной системы вручную. Единственное ограничение заключается в количестве оперативной памяти: не всегда ISO-образ можно разместить в оперативной памяти. Выделим в оперативной памяти четыре гигабайта для хранения образа в /mnt:

mount -t tmpfs -o size=4G tmpfs /mnt

Также загрузим установочный образ операционной системы FreeBSD 12.0:

wget -P /mnt ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso

Теперь можно запускать ВМ:

qemu-system-x86_64 \
    -m 2048M \
    -net nic -net user \
    -enable-kvm \
    -cpu host,nx \
    -M pc \
    -smp 2 \
    -vga std \
    -drive file=/dev/sda,format=raw,index=0,media=disk \
    -drive file=/dev/sdb,format=raw,index=1,media=disk \
    -vnc :0,password \
    -monitor stdio \
    -cdrom /mnt/FreeBSD-12.0-RELEASE-amd64-bootonly.iso \
    -boot d

Флаг -boot d устанавливает загрузку с CD-привода. Подключаемся VNC-клиентом и видим загрузчик FreeBSD.

Загрузчик FreeBSD.

Так как для доступа в интернет использовалось получение адреса по DHCP, возможно, после настройки будет необходимо загрузиться в только что установленную систему и исправить сетевые настройки. В некоторых случаях может потребоваться установка драйверов сетевого адаптера, так как сетевая карта, установленная в сервере и эмулируемая в ВМ отличаются.

Заключение

Данный способ организации удаленного доступа к консоли сервера потребляет часть ресурсов сервера, однако, не предъявляет никаких особенных требований к аппаратной составляющей сервера, а потому может быть выполнен в практически любых условиях. Использование такого решения позволяет значительно облегчить диагностику программных неисправностей и восстановление работоспособности удаленного сервера.

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022
T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022