Top.Mail.Ru
КОНФИГУРАТОР Серверы
Сетевое оборудование
СХД
IP-телефоны IP-камеры Источники бесперебойного питания (ИБП) Комплектующие Готовые решения Серверы под задачу
О компании Купить в лизинг Блог Отзывы Доставка Гарантия Контакты Работа у нас Реквизиты Спецпредложения Игровые ПК на ISKRAPC Заявка в тех поддержку
Эксперты в подборе IT-оборудования

Управление виртуальными машинами Proxmox через CLI: запуск и остановка

31 марта 2026
Управление виртуальными машинами Proxmox через CLI: запуск и остановка

Веб-интерфейс Proxmox завис — браузер крутит колёсико, сессия не отвечает. А вам нужно перезапустить конкретную ВМ прямо сейчас. SSH на хост открыт, и вот тут начинается настоящая работа.

Именно в таких ситуациях понимаешь, зачем вообще учить команды управления виртуальными машинами через консоль. Не ради красоты, а ради контроля — когда GUI не вариант, CLI не подводит.

Утилита qm: один инструмент, всё управление

Весь жизненный цикл ВМ в Proxmox закрывается через одну утилиту — qm. Это не просто обёртка для запуска и остановки: qm — фронтенд к QEMU/KVM, через который вы создаёте, правите, мигрируете машины и управляете снапшотами. Но прежде чем управлять машинами через CLI, важно убедиться, что хост отвечает системным требованиям Proxmox к аппаратным ресурсам. Веб-интерфейс Proxmox, по сути, сам вызывает те же команды под капотом.

Синтаксис прямолинейный: qm <команда> [опции]. VMID — числовой идентификатор ВМ, который вы задаёте при создании машины (обычно от 100 и выше; диапазон 1–99 зарезервирован Proxmox для системных нужд). Если забыли VMID — не проблема, qm list выдаст полную картину.

Посмотреть список всех ВМ и их текущие состояния:

qm list


Вывод будет примерно таким:

     VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID

       100 web-prod             running    4096              50.00 12345

       101 db-staging           stopped    8192             100.00 0

       102 test-runner          running    2048              20.00 67890

Уже этого достаточно, чтобы скомбинировать с grep или awk — например, вытащить только остановленные машины или отфильтровать по шаблону имени. Статус конкретной ВМ:

qm status

Запуск, остановка и всё между ними

Команды управления ВМ в Proxmox образуют чёткую иерархию действий. Вот полная таблица с описанием того, что реально происходит на уровне гостя:

Команда Что происходит Когда использовать
qm start Запуск ВМ Холодный старт остановленной машины
qm shutdown ACPI poweroff → гостевая ОС завершает работу Штатное выключение с сохранением данных
qm stop Мгновенная остановка, аналог отключения питания Зависшая ВМ, не реагирующая на shutdown
qm reset Жёсткая перезагрузка (аналог reset на корпусе) Перезапуск без ожидания graceful shutdown
qm suspend Приостановка ВМ (состояние сохраняется в RAM) Краткое обслуживание хоста
qm resume Возобновление из приостановки После обслуживания

Разница между shutdown и stop — принципиальная, и её стоит понять один раз, чтобы не наступать на грабли.

qm shutdown посылает гостевой ОС событие ACPI poweroff. Windows корректно закрывает открытые файлы, Linux размонтирует файловые системы, базы данных делают checkpoint. Процесс занимает время — от нескольких секунд до минуты — зато данные в безопасности.

qm stop — это буквально выдернуть вилку из розетки у физического сервера. QEMU-процесс убивается немедленно. Никакого graceful shutdown, никаких уведомлений гостевой ОС. Файловые системы без journaling получат fsck при следующем старте. PostgreSQL запустит recovery. Это инструмент для экстренных ситуаций, а не для повседневного использования.

qm stop убивает QEMU-процесс на уровне хоста — гостевая ОС даже не узнаёт, что её выключили. Journaling в Linux и VSS в Windows существуют именно для таких случаев.

Алгоритм безопасного выключения

Практика хорошей эксплуатации — это всегда «лесенка» действий, а не сразу stop. Вот рабочий алгоритм:

  1. Отправить qm shutdown и засечь время
  2. Подождать 60–120 секунд, проверить статус через qm status
  3. Если ВМ всё ещё running — проверить, что происходит внутри гостя (подключиться через qm terminal или VNC)
  4. Если гость завис намертво — применить qm stop с пониманием последствий
  5. Зафиксировать факт жёсткой остановки в операционном журнале

Логировать остановки стоит хотя бы через простой bash-вывод в файл — особенно если в инфраструктуре есть ВМ с базами данных или сервисами без репликации.

# Пример простого логирования остановки

VMID=101

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Shutting down VM $VMID" >> /var/log/vm-operations.log

qm shutdown $VMID

echo "[$(date '+%Y-%m-%d %H:%M:%S')] VM $VMID shutdown initiated" >> /var/log/vm-operations.log

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

Массовые операции через скрипты

Вот где CLI по-настоящему выигрывает у веб-морды. Допустим, нужно выключить все тестовые ВМ перед обновлением хоста. Через GUI это — открыть каждую машину, нажать Shutdown, подтвердить, перейти к следующей. В CLI:

# Получить VMID всех запущенных ВМ и выключить их

qm list | awk 'NR>1 && $3=="running" {print $1}' | while read vmid; do

    echo "Shutting down VM $vmid..."

    qm shutdown "$vmid"

done

Или более осторожный вариант — с ожиданием подтверждения остановки каждой машины:

for vmid in $(qm list | awk 'NR>1 && $3=="running" {print $1}'); do

    echo "Stopping VM $vmid"

    qm shutdown "$vmid"

    # Ждём до 90 секунд

    for i in $(seq 1 18); do

        sleep 5

        status=$(qm status "$vmid" | grep -oP '(?<=status: )\w+')

        [ "$status" = "stopped" ] && break

        echo "  Still running after ${#i}*5s..."

    done

    if [ "$(qm status "$vmid" | grep -oP '(?<=status: )\w+')" != "stopped" ]; then

        echo "  Force stopping VM $vmid"

        qm stop "$vmid"

    fi

done

Такие скрипты легко встраиваются в Ansible playbook или cron-задачи для ночных регламентных окон. Это уже не «администрирование руками», а автоматизация с аудит-трейлом.

Приостановка ВМ: когда stop — слишком радикально

qm suspend сохраняет текущее состояние ВМ в RAM и останавливает выполнение. Машина не отвечает на сетевые запросы, но при qm resume продолжает работу с той же точки — как будто ничего не было.

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

Есть нюанс: suspend хранит состояние в оперативной памяти хоста. Если хост по какой-то причине перезагружается — suspended ВМ теряют своё состояние и потребуют холодного старта. Для долгосрочного сохранения состояния есть другой инструмент — snapshots с сохранением RAM-состояния, но это уже отдельная тема.

Ещё один момент, про который забывают: сетевые сессии внутри suspended ВМ могут оборваться, если пауза затянулась. TCP-таймауты никто не отменял — коннекты к БД, SSH-сессии, активные запросы к API могут потребовать переустановки после qm resume. Для stateless-сервисов это не проблема, для stateful — планируйте это заранее.

Перед qm suspend убедитесь, что на хосте достаточно свободной RAM. Состояние ВМ с 16 ГБ оперативки займёт около 16 ГБ на хосте — плюсом к тому, что уже занято другими машинами.

Hookscript: то, о чём молчит документация

Большинство администраторов Proxmox знают qm start и qm stop. Немногие знают про hookscript — и зря.

Hookscript — это скрипт, который Proxmox вызывает на определённых этапах жизненного цикла ВМ: перед стартом, после остановки, перед миграцией, до/после бэкапа. Привязывается к конкретной ВМ:

qm set --hookscript local:snippets/myhook.sh

Скрипт получает два аргумента: VMID и фазу (pre-start, post-start, pre-stop, post-stop, pre-migrate, и т.д.).

Что можно с этим делать:

  • Отправлять уведомления в Telegram или Slack при старте/остановке конкретных ВМ
  • Делать pre-backup проверки: убедиться, что БД в консистентном состоянии перед снапшотом
  • Монтировать/размонтировать NFS-шары только когда ВМ активна
  • Логировать все операции с ВМ в централизованную систему

Hookscript должен быть исполняемым файлом в директории /var/lib/vz/snippets/ на хосте (или соответствующем пуле хранилища). Простой пример для Telegram-уведомления:

#!/bin/bash

VMID=$1

PHASE=$2

TOKEN="ваш_токен"

CHAT_ID="ваш_chat_id"


if [ "$PHASE" = "post-start" ]; then

    curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \

        -d "chat_id=${CHAT_ID}&text=VM ${VMID} started on $(hostname)"

fi

После создания скрипта — не забудьте сделать его исполняемым через chmod +x и зарегистрировать хранилище snippets в Proxmox, если оно ещё не добавлено. Это делается через pvesm или в веб-интерфейсе в разделе Datacenter → Storage.

Hookscript — один из тех инструментов, которые кажутся избыточными до первого серьёзного инцидента. После того как вы один раз не поймёте, почему ВМ запустилась в три ночи без видимой причины, желание настроить аудит событий появляется само собой.

Это не экзотика — это нормальная практика для инфраструктур, где важна прозрачность операций.

Работа в кластере

Если Proxmox развёрнут в кластере, CLI-команды работают прозрачно через любой узел. Не нужно SSH-ить на конкретную ноду, где живёт ВМ — можно управлять с управляющего узла:

# Запустить ВМ 101, которая живёт на ноде pve-node2

qm start 101 --node pve-node2

Для просмотра всех ВМ кластера используйте pvesh:

pvesh get /cluster/resources --type vm

Это особенно полезно при написании скриптов автоматизации: не нужно динамически определять, на какой ноде живёт каждая ВМ — команда сама разберётся. Можно написать один скрипт обслуживания, который запускается на любом узле кластера и корректно управляет всеми машинами — независимо от того, где они физически размещены. Для небольших кластеров (3–5 нод) это избавляет от необходимости поддерживать отдельные скрипты для каждого хоста.

Типичные аварийные сценарии

ВМ не реагирует на shutdown. Гость завис, qm status показывает running, но из машины нет ответа. Алгоритм: подключиться через qm terminal или консоль в GUI, попробовать разобраться изнутри. Если гость полностью мёртв — qm stop, затем проверка журналов после перезапуска.

Зависание backup/restore. Иногда операции снапшота подвешивают ВМ в промежуточном состоянии. qm status может показывать странные статусы вроде paused. В этом случае — qm resume , или если не помогает — проверить процессы на хосте через ps aux | grep и разбираться с QEMU-процессом напрямую.

После qm stop гость не запускается. Чаще всего — fsck на следующий старт, если файловая система без journaling. Запустить ВМ, дать fsck отработать. Если диск был в консистентном состоянии — всё пройдёт нормально. Если нет — придётся восстанавливать из бэкапа, и здесь критически важно иметь заранее настроенную систему резервирования Proxmox Backup Server.

Регламент для дежурного персонала. Хорошая практика — зафиксировать в операционных инструкциях чёткое правило: жёсткая остановка через qm stop применяется только после согласования или при наступлении заранее описанных условий (ВМ не реагирует более N минут, shutdown завис, нет ответа на консоли). Это убирает самодеятельность в ночных дежурствах и даёт понятный аудит-трейл.

CLI vs веб-интерфейс: честный разбор

Веб-интерфейс Proxmox — отличный инструмент для разовых операций, визуального контроля и работы с незнакомой инфраструктурой. Он нагляден, интуитивен и не требует запоминания синтаксиса.

CLI выигрывает там, где нужна повторяемость и автоматизация:

Задача GUI CLI
Запустить одну ВМ вручную Удобно Можно, но избыточно
Выключить 20 ВМ по расписанию Больно Один скрипт
Аудит-трейл всех операций Сложно Легко через logging
Интеграция с Ansible/CI/CD Нет Да
Работа при недоступном GUI Нет Да
Hookscript и тонкая настройка Нет Да

Инвестиция в освоение CLI окупается при первом же плановом обслуживании кластера — когда вместо двух часов кликов в браузере уходит пять минут на скрипт.

Proxmox через CLI — это не хардкор ради хардкора. Это нормальный инструментарий администратора, который понимает, что делает и осознанно выбрал подходящий гипервизор для своих задач. Hookscript, массовые скрипты, прозрачная работа в кластере — всё это доступно прямо сейчас, без дополнительных плагинов и лицензий. Веб-морда никуда не денется, но знать, что за ней — полезно.

ПОДПИСКА

НА РАССЫЛКУ
ПОЛЕЗНЫЕ СТАТЬИ, АКЦИИ
И ЗАКРЫТЫЕ РАСПРОДАЖИ
Котик подписка
Похожие статьи
Вам также может быть интересно

ТОП-5 ошибок при выборе сервера
Товар добавлен в список сравнения
Перейти в сравнение
Продолжить просмотр
Заявка в тех поддержку
Консультация
ИТ-специалиста
Перезвоним и ответим на ваши вопросы
или напишите нам
IT-архитектор подберет сервер под вашу задачу
Заказать сервер
Мы свяжемся с вами в течение 15 мин
Зарегистрироваться в бонусной программе
Консультация
ИТ-специалиста
Перезвоним и ответим на ваши вопросы
или напишите нам