Автоматизация проверки виртуализации после настройки BIOS на серверах Gigabyte | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Автоматизация проверки виртуализации после настройки BIOS на серверах Gigabyte

04 мая 2026 9 мин. чтения

После массового включения технологий виртуализации Intel VT-x или AMD-V в BIOS/UEFI серверов Gigabyte перед администратором встает рутинная задача: проверить корректность настройки на каждом хосте. Ручной обход десятков или сотен машин по SSH с выполнением команд kvm-ok и проверкой модулей ядра отнимает часы рабочего времени и чреват человеческими ошибками. Автоматизация этого процесса с помощью готовых скриптов и Ansible сокращает время проверки с часов до минут, гарантирует единообразие результатов и генерирует структурированный отчет для всего парка оборудования. Это решение исключает риск пропустить сервер с некорректными настройками, что критично для стабильной работы гипервизоров KVM, VMware ESXi или контейнерных сред Docker.

В этом руководстве представлены проверенные на практике методы: от быстрой проверки одного сервера через SSH до полной автоматизации аудита с помощью Ansible Playbook. Вы получите готовые команды для установки утилит cpu-checker и libvirt-tools, скрипт для интерпретации вывода kvm-ok и конфигурацию для массового сбора данных. Решение масштабируется на любое количество узлов и может быть интегрировано в CI/CD пайплайн обновления инфраструктуры, становясь обязательным этапом после прошивки BIOS.

Проблема: ручная проверка виртуализации на десятках серверов неэффективна

Типичный сценарий после настройки BIOS на парке серверов Gigabyte выглядит так: администратор подключается по SSH к первому хосту, устанавливает пакеты cpu-checker и libvirt-clients, выполняет sudo kvm-ok, анализирует вывод, проверяет загрузку модуля ядра kvm командой lsmod | grep kvm, затем повторяет эти шаги для второго, третьего, N-го сервера. Для 50 машин такая процедура занимает не менее двух часов чистого времени, без учета возможных сетевых задержек или необходимости переключения контекста.

Ручной подход создает три ключевых риска:

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

Автоматизация с помощью скриптов и инструментов управления конфигурацией, таких как Ansible, устраняет эти недостатки. Единоразовая настройка playbook позволяет выполнить проверку на всех целевых хостах параллельно, собрать результаты в структурированный JSON или CSV отчет и интегрировать проверку в процесс непрерывного развертывания. Это соответствует принципам инфраструктуры как кода (IaC) и DevOps-практикам, которые подробно рассмотрены в нашем руководстве по автоматизации инфраструктуры.

Быстрая проверка на одном сервере Gigabyte через SSH

Для оперативной проверки состояния виртуализации на отдельном сервере Gigabyte после изменения настроек BIOS достаточно выполнить несколько команд в SSH-сессии. Этот метод подходит для точечного аудита или проверки перед развертыванием автоматизации.

Установка утилит cpu-checker и libvirt-tools

Перед запуском проверки необходимо установить диагностические пакеты. Команды зависят от дистрибутива Linux. Для систем на базе Debian/Ubuntu (включая Proxmox VE) выполните:

sudo apt update
sudo apt install cpu-checker libvirt-clients -y

Пакет cpu-checker содержит утилиту kvm-ok, которая проверяет поддержку аппаратной виртуализации процессором и корректность настроек BIOS. Пакет libvirt-clients предоставляет клиентские инструменты для работы с libvirt, а также включает полезные скрипты проверки.

Для систем на базе RHEL, CentOS, Rocky Linux или AlmaLinux используйте менеджер пакетов yum или dnf:

sudo yum install libvirt-client virt-what -y
# или
sudo dnf install libvirt-client virt-what -y

Утилита virt-what выполняет схожую с kvm-ok диагностику и часто предустановлена в серверных дистрибутивах.

Запуск kvm-ok и интерпретация результатов

После установки пакетов выполните проверку:

sudo kvm-ok

Успешный вывод указывает на полную готовность системы к работе с KVM:

INFO: /dev/kvm exists
KVM acceleration can be used

Это означает, что технология виртуализации (VT-x для Intel или AMD-V для AMD) включена в BIOS/UEFI, модуль ядра kvm загружен, и у пользователя есть права на доступ к устройству /dev/kvm.

Типичные ошибки и их значение:

  1. "Your CPU does not support KVM extensions": процессор физически не поддерживает аппаратную виртуализацию либо она отключена в BIOS. Необходимо войти в интерфейс UEFI сервера Gigabyte и активировать опцию "Intel Virtualization Technology", "Intel VT-x", "AMD SVM" или "AMD-V". Детальная инструкция по настройке BIOS доступна в статье "Как включить виртуализацию в BIOS Gigabyte".
  2. "INFO: /dev/kvm does not exist" при поддержке процессором KVM: модуль ядра kvm не загружен. Загрузите его вручную: sudo modprobe kvm (для Intel) или sudo modprobe kvm_amd (для AMD). Для автоматической загрузки при старте добавьте модуль в /etc/modules-load.d/.
  3. "KVM acceleration can NOT be used" с сообщением о правах доступа: пользователь не входит в группу kvm. Добавьте текущего пользователя: sudo usermod -aG kvm $USER и перезайдите в систему.

Дополнительно проверьте загрузку модулей ядра и флаги процессора:

lsmod | grep kvm
cat /proc/cpuinfo | grep -E "(vmx|svm)"

Наличие строки vmx (Intel) или svm (AMD) в выводе /proc/cpuinfo подтверждает поддержку на уровне процессора. Для проверки возможности вложенной виртуализации (nested) выполните:

cat /sys/module/kvm_*/parameters/nested

Значение Y или 1 указывает на активную поддержку.

Массовая автоматизация проверок с помощью Ansible

Ansible позволяет проверить поддержку виртуализации на всем парке серверов Gigabyte одной командой, собрать результаты в централизованный отчет и интегрировать проверку в рабочие процессы. Этот подход заменяет рутину управляемым кодом.

Подготовка инвентаря и управляющего узла Ansible

На управляющем узле (control node) должен быть установлен Ansible (версии 2.9 или выше) и Python 3. Убедитесь, что SSH-доступ по ключам настроен для всех целевых серверов. Создайте инвентарный файл inventory.ini:

[gigabyte_servers]
server-01.gigabyte.lan ansible_user=admin
server-02.gigabyte.lan ansible_user=admin
server-03.gigabyte.lan ansible_user=admin

[gigabyte_servers:vars]
ansible_python_interpreter=/usr/bin/python3

Группа gigabyte_servers содержит список хостов. Переменная ansible_user задает пользователя для подключения. Для больших инфраструктур инвентарь можно генерировать динамически из CMDB или облачных провайдеров.

Ansible Playbook для сбора отчета о виртуализации

Создайте файл check_virt.yml со следующим содержимым. Этот playbook идемпотентен: его многократный запуск не изменит состояние систем, а только соберет актуальные данные.

---
- name: Проверка поддержки виртуализации на серверах Gigabyte
  hosts: gigabyte_servers
  become: yes
  gather_facts: yes

  tasks:
    - name: Установка cpu-checker (Debian/Ubuntu)
      apt:
        name:
          - cpu-checker
          - libvirt-clients
        state: present
        update_cache: yes
      when: ansible_os_family == "Debian"

    - name: Установка libvirt-client (RHEL/CentOS)
      yum:
        name:
          - libvirt-client
          - virt-what
        state: present
      when: ansible_os_family == "RedHat"

    - name: Выполнение проверки kvm-ok
      command: kvm-ok
      register: kvm_check_result
      changed_when: false
      ignore_errors: yes

    - name: Проверка загрузки модуля KVM
      shell: lsmod | grep -q kvm && echo "KVM module loaded" || echo "KVM module not loaded"
      register: kvm_module_check
      changed_when: false

    - name: Проверка флагов процессора (vmx/svm)
      shell: grep -E "(vmx|svm)" /proc/cpuinfo | head -1
      register: cpu_flags_check
      changed_when: false

    - name: Сбор результатов в локальный отчет
      local_action:
        module: copy
        content: |
          {
            "{{ inventory_hostname }}": {
              "kvm_ok_output": "{{ kvm_check_result.stdout | default('N/A') }}",
              "kvm_ok_failed": {{ kvm_check_result.failed | to_json }},
              "kvm_module": "{{ kvm_module_check.stdout }}",
              "cpu_flags": "{{ cpu_flags_check.stdout | default('N/A') }}",
              "distribution": "{{ ansible_distribution }} {{ ansible_distribution_version }}",
              "timestamp": "{{ ansible_date_time.iso8601 }}"
            }
          }
        dest: "/tmp/{{ inventory_hostname }}_virt_check.json"
      run_once: yes
      delegate_to: localhost

  post_tasks:
    - name: Объединение отчетов в единый файл
      local_action:
        module: assemble
        src: "/tmp/"
        dest: "./report_virtualization_check.json"
        regexp: ".*_virt_check\.json$"
      run_once: yes
      delegate_to: localhost

    - name: Очистка временных файлов
      local_action:
        module: file
        path: "/tmp/{{ inventory_hostname }}_virt_check.json"
        state: absent
      delegate_to: localhost

Playbook выполняет следующие задачи: определяет дистрибутив ОС, устанавливает необходимые пакеты, запускает проверку kvm-ok, проверяет загрузку модуля ядра и наличие флагов процессора. Результаты каждого хоста сохраняются в отдельный временный JSON-файл, а на этапе post_tasks объединяются в единый отчет report_virtualization_check.json на управляющем узле.

Запуск плейбука и анализ сводного отчета

Запустите проверку на всех серверах из инвентаря:

ansible-playbook -i inventory.ini check_virt.yml

После успешного выполнения в текущей директории появится файл report_virtualization_check.json. Его структура позволяет быстро идентифицировать проблемные узлы:

{
  "server-01.gigabyte.lan": {
    "kvm_ok_output": "INFO: /dev/kvm exists\nKVM acceleration can be used",
    "kvm_ok_failed": false,
    "kvm_module": "KVM module loaded",
    "cpu_flags": "flags\t\t: ... vmx ...",
    "distribution": "Ubuntu 22.04",
    "timestamp": "2026-05-04T10:30:15Z"
  },
  "server-02.gigabyte.lan": {
    "kvm_ok_output": "INFO: /dev/kvm does not exist\nKVM acceleration can NOT be used",
    "kvm_ok_failed": true,
    "kvm_module": "KVM module not loaded",
    "cpu_flags": "flags\t\t: ... vmx ...",
    "distribution": "CentOS 9",
    "timestamp": "2026-05-04T10:30:17Z"
  }
}

Отчет можно интегрировать в системы мониторинга (Zabbix, Prometheus) или отправлять в корпоративные чаты (Telegram, Slack) через webhook. Для постоянного аудита добавьте запуск playbook в cron или системный таймер. Такой подход к автоматизации рутинных задач подробно описан в нашей базе знаний в статье об автоматизации администрирования Linux.

Интеграция в CI/CD пайплайн обновления серверов

Для DevOps-инженеров, управляющих инфраструктурой как кодом, проверка виртуализации становится естественным этапом пайплайна обновления. После автоматической прошивки BIOS серверов Gigabyte с помощью фирменных утилит (например, через gb-fwupd или IPMI) запускается Ansible Playbook для верификации настроек. Условный переход на этап развертывания гипервизора (KVM, Proxmox) происходит только при успешной проверке на всех хостах.

Пример сценария в GitLab CI/CD:

stages:
  - bios_update
  - virt_validation
  - hypervisor_deploy

validate_virtualization:
  stage: virt_validation
  script:
    - ansible-playbook -i inventory/production.ini playbooks/check_virt.yml
    - python scripts/parse_report.py --require-all-success
  artifacts:
    paths:
      - report_virtualization_check.json
  only:
    - master

Скрипт parse_report.py анализирует JSON-отчет и возвращает код ошибки, если хотя бы на одном сервере проверка не пройдена. Это предотвращает развертывание виртуальных машин на неподготовленной инфраструктуре. Подобная практика исключает "поломку" на уровне гипервизора после массовых обновлений и соответствует принципам непрерывной интеграции и доставки. Для комплексной автоматизации процессов развертывания и контроля можно использовать агрегатор API AiTunnel, который предоставляет единый интерфейс для интеграции различных сервисов и моделей.

Устранение проблем: если проверка kvm-ok не прошла

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

  1. Повторная проверка настроек BIOS/UEFI: Физически или через IPMI войдите в интерфейс управления сервером Gigabyte. Убедитесь, что опция виртуализации ("Intel VT-x", "Intel VT-d", "AMD SVM Mode") активна и сохранена. На некоторых моделях серверных плат Gigabyte требуется также включить "Above 4G Decoding" и "SR-IOV Support" для полной функциональности. После изменения настроек выполните полную перезагрузку сервера, а не теплый рестарт ОС.
  2. Влияние Secure Boot: На системах с UEFI и активным Secure Boot загрузка сторонних модулей ядра, включая kvm, может быть заблокирована. Временно отключите Secure Boot в разделе "Security" BIOS для тестирования. Если виртуализация заработает, подпишите модули KVM ключами платформы или настройте MOK (Machine Owner Key).
  3. Ограничения оборудования: Убедитесь, что процессор сервера физически поддерживает аппаратную виртуализацию. Для Intel это технологии VT-x и VT-d (для ввода-вывода), для AMD - AMD-V и AMD-Vi. Проверьте спецификации процессора на сайте Gigabyte или Intel/AMD. Старые модели (например, Intel Xeon серии E5 v1/v2) могут иметь ограниченную поддержку.
  4. Проверка вложенной виртуализации (nested): Если на сервере планируется запускать виртуальные машины, которые сами будут работать как гипервизоры (например, для тестовых сред), активируйте nested виртуализацию. Для Intel выполните: echo "options kvm-intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf, для AMD: echo "options kvm-amd nested=1" | sudo tee /etc/modprobe.d/kvm-amd.conf. Затем перезагрузите модули ядра или сервер.
  5. Конфликты с другими технологиями: Некоторые технологии безопасности, такие как Intel SGX (Software Guard Extensions) или fTPM (Firmware TPM), могут конфликтовать с виртуализацией на уровне BIOS. Если проверка не проходит при корректных настройках, попробуйте отключить эти опции поэтапно. Подробнее о взаимодействии виртуализации и безопасности читайте в руководстве "Безопасность Linux-сервера: практический харденинг".

После внесения изменений повторно запустите Ansible Playbook для проверки. Автоматизация не только выявляет проблемы, но и ускоряет их устранение за счет четкого протокола диагностики.

Поделиться:
Сохранить гайд? В закладки браузера