Мастерство командной строки ESXi: Безопасное управление питанием виртуальных машин
Подробное руководство по выполнению команд, включая принудительное выключение (poweroff), для вашей ВМ Davletov_test_for84 с акцентом на безопасность и лучшие практики.
Управление виртуальными машинами (ВМ) через командную оболочку ESXi (ESXi Shell) предоставляет мощные возможности, особенно в ситуациях, когда стандартные инструменты, такие как vSphere Client, недоступны. Однако выполнение команд, особенно тех, что могут привести к потере данных, требует особой осторожности. В этом руководстве мы подробно рассмотрим, как безопасно выполнить команду принудительного выключения (аналогичную poweroff) для вашей виртуальной машины Davletov_test_for84 на гипервизоре VMware ESXi.
Ключевые моменты
- Определение ID виртуальной машины: Перед выполнением любых команд необходимо точно идентифицировать целевую ВМ. Для этого используются команды
vim-cmd vmsvc/getallvms(для получения VMID) илиesxcli vm process list(для получения World ID). - Выбор метода выключения: Важно различать корректное выключение (graceful shutdown), которое позволяет операционной системе ВМ завершить все процессы, и принудительное выключение (force power off), которое немедленно прекращает работу ВМ. Команда
poweroff, выполненная напрямую в ESXi Shell, выключит сам хост ESXi, а не конкретную ВМ. - Безопасность прежде всего: Доступ к ESXi Shell и SSH следует включать только на время выполнения необходимых операций и отключать сразу после их завершения. Принудительное выключение ВМ может привести к потере несохраненных данных или повреждению файловой системы.
Основы работы с командной оболочкой ESXi
Командная оболочка ESXi (ESXi Shell) и SSH предоставляют прямой доступ к операционной системе гипервизора VMware ESXi. Это позволяет выполнять административные задачи, диагностику и устранение неполадок на низком уровне. Однако, поскольку эти инструменты дают полный контроль над хостом, их использование сопряжено с рисками, особенно при выполнении команд, изменяющих состояние системы или виртуальных машин.
Включение ESXi Shell и SSH
По умолчанию в целях безопасности ESXi Shell и SSH отключены. Для их активации:
- Через DCUI (Direct Console User Interface):
- Подключитесь к консоли хоста ESXi.
- Нажмите
F2для входа в меню настройки системы (Customize System/View Logs). - Перейдите в раздел "Troubleshooting Options".
- Выберите "Enable ESXi Shell" и "Enable SSH" и нажмите Enter для их активации.
- Через vSphere Client:
- Подключитесь к хосту ESXi или vCenter Server с помощью vSphere Client.
- Выберите хост в инвентаре.
- Перейдите на вкладку "Configure" (Конфигурация).
- В разделе "System" (Система) выберите "Services" (Службы).
- Найдите службы "ESXi Shell" (TSM) и "SSH" (TSM-SSH).
- Для каждой службы нажмите "Start" (Запустить). Рекомендуется также настроить политику запуска на "Start and stop manually" (Запускать и останавливать вручную).
Важно: После завершения работ не забудьте отключить ESXi Shell и SSH для обеспечения безопасности хоста.
Пример интерфейса консоли виртуальной машины VMware.
Подключение к ESXi Shell
После активации соответствующих служб вы можете подключиться к хосту ESXi:
- Локально (ESXi Shell): Если вы имеете физический доступ к серверу, нажмите
Alt+F1на консоли для доступа к ESXi Shell. Для возврата в DCUI нажмитеAlt+F2. - Удаленно (SSH): Используйте SSH-клиент (например, PuTTY для Windows или команду
sshв Linux/macOS) для подключения к IP-адресу или имени хоста ESXi. Вход осуществляется под учетной записьюrootи соответствующим паролем.
Идентификация вашей виртуальной машины Davletov_test_for84
Перед тем как выполнить команду выключения, необходимо получить уникальный идентификатор вашей виртуальной машины Davletov_test_for84. Существует два основных идентификатора:
- VMID (Virtual Machine ID): Внутренний идентификатор, используемый командой
vim-cmd. - World ID: Идентификатор процесса ВМ на хосте ESXi, используемый командой
esxcli.
Получение VMID с помощью vim-cmd
Выполните следующую команду в ESXi Shell:
vim-cmd vmsvc/getallvms
Эта команда выведет список всех зарегистрированных на хосте виртуальных машин. Найдите в списке вашу ВМ Davletov_test_for84 и запомните ее Vmid из первого столбца. Вывод будет выглядеть примерно так:
Vmid Name File Guest OS Version Annotation
1 Davletov_test_for84 [datastore1] Davletov_test_for84/Davletov_test_for84.vmx ubuntu64Guest vmx-19
2 AnotherVM [datastore1] AnotherVM/AnotherVM.vmx windows10Guest vmx-19
В данном примере VMID для Davletov_test_for84 равен 1.
Получение World ID с помощью esxcli
Если вы планируете использовать esxcli, получите World ID:
esxcli vm process list
Эта команда покажет список запущенных виртуальных машин и их World ID. Найдите ВМ Davletov_test_for84 по ее Display Name и запишите соответствующий World ID.
Davletov_test_for84
World ID: 12345
Process ID: 0
VMX Cartel ID: 67890
UUID: aa-bb-cc-dd-ee-ff-00-11-22-33-44-55-66-77-88-99
Display Name: Davletov_test_for84
Config File: /vmfs/volumes/datastore1/Davletov_test_for84/Davletov_test_for84.vmx
Здесь World ID для Davletov_test_for84 равен 12345.
Выполнение команд управления питанием для ВМ Davletov_test_for84
Теперь, когда у вас есть идентификатор ВМ, вы можете выполнить команду выключения. Помните, что прямая команда poweroff в ESXi Shell приведет к выключению всего хоста ESXi, а не отдельной ВМ. Для управления питанием конкретной ВМ используются специализированные команды.
Корректное выключение (Graceful Shutdown)
Этот метод является предпочтительным, так как он отправляет сигнал операционной системе внутри ВМ для корректного завершения работы. Это возможно, если в гостевой ОС установлены и работают VMware Tools.
Использование vim-cmd
vim-cmd vmsvc/power.shutdown <VMID>
Замените <VMID> на VMID вашей ВМ. Например, для Davletov_test_for84 с VMID 1:
vim-cmd vmsvc/power.shutdown 1
Использование esxcli
esxcli vm process kill --type=soft --world-id=<WorldID>
Замените <WorldID> на World ID вашей ВМ. Например, для Davletov_test_for84 с World ID 12345:
esxcli vm process kill --type=soft --world-id=12345
Принудительное выключение (Force Power Off – аналог poweroff для ВМ)
Этот метод следует использовать, если ВМ не отвечает на команду корректного выключения или зависла. Принудительное выключение эквивалентно отключению питания и может привести к потере несохраненных данных.
Использование vim-cmd
Эта команда немедленно выключает ВМ:
vim-cmd vmsvc/power.off <VMID>
Для Davletov_test_for84 с VMID 1:
vim-cmd vmsvc/power.off 1
Использование esxcli
Команда esxcli vm process kill предлагает несколько типов принудительного завершения:
hard: Немедленно завершает работу ВМ. Это похоже наpower.off.force: Самый агрессивный метод, используется еслиsoftиhardне сработали.
Для принудительного выключения Davletov_test_for84 с World ID 12345:
esxcli vm process kill --type=hard --world-id=12345
Или, если требуется более жесткий метод:
esxcli vm process kill --type=force --world-id=12345
Для вашего тестового случая с Davletov_test_for84 и требованием poweroff, наиболее подходящей командой будет vim-cmd vmsvc/power.off <VMID> или esxcli vm process kill --type=hard --world-id=<WorldID>.
Сравнение команд управления питанием ВМ
В таблице ниже представлено сравнение основных команд для управления питанием виртуальных машин через ESXi Shell.
| Команда | Инструмент | Тип действия | Когда использовать | Пример для Davletov_test_for84 (VMID=1, WorldID=12345) |
|---|---|---|---|---|
power.shutdown <VMID> |
vim-cmd vmsvc |
Корректное выключение (Graceful Shutdown) | Предпочтительный метод, если ВМ отвечает и VMware Tools установлены. | vim-cmd vmsvc/power.shutdown 1 |
power.off <VMID> |
vim-cmd vmsvc |
Принудительное выключение (Force Power Off) | Если ВМ не отвечает на корректное выключение. Аналог poweroff для ВМ. |
vim-cmd vmsvc/power.off 1 |
kill -t soft -w <WorldID> |
esxcli vm process |
Корректное завершение процесса ВМ | Аналогично power.shutdown, требует World ID. |
esxcli vm process kill -t soft -w 12345 |
kill -t hard -w <WorldID> |
esxcli vm process |
Немедленное завершение процесса ВМ | Если soft не работает, более агрессивный. Аналог poweroff для ВМ. |
esxcli vm process kill -t hard -w 12345 |
kill -t force -w <WorldID> |
esxcli vm process |
Принудительное "убийство" процесса ВМ | Крайняя мера, если soft и hard не сработали. Самый агрессивный аналог poweroff. |
esxcli vm process kill -t force -w 12345 |
Анализ влияния методов выключения ВМ
Различные методы выключения виртуальной машины имеют разные последствия для сохранности данных, скорости операции и общего влияния на систему. Диаграмма ниже иллюстрирует сравнительные характеристики основных методов выключения. Оценка производится по шкале от 1 до 10, где более высокое значение обычно означает лучший результат (например, выше сохранность данных, выше скорость), за исключением "Влияния на систему", где ниже - лучше.
Как видно из диаграммы, корректное выключение обеспечивает наилучшую сохранность данных и шансы на восстановление, но может быть медленнее. Принудительные методы работают быстро, но сопряжены с высоким риском потери данных и могут оказать большее негативное влияние на файловую систему ВМ.
Визуализация процесса: от подготовки до выключения ВМ
Ниже представлена ментальная карта, которая наглядно демонстрирует последовательность шагов для управления питанием виртуальной машины через командную оболочку ESXi. Эта схема поможет вам лучше понять весь процесс и не упустить важные детали.
через ESXi Shell"] id1["Этап 1: Подготовка"] id1.1["Включить ESXi Shell и/или SSH"] id1.2["(Рекомендация) Создать снимок (snapshot) ВМ
или резервную копию важных данных"] id1.3["Осознать риски принудительного выключения
(потеря данных, повреждение ФС)"] id2["Этап 2: Идентификация ВМ"] id2.1["Подключиться к хосту ESXi
(через SSH или локальную консоль)"] id2.2["Получить VMID для 'Davletov_test_for84'"] id2.2.1["Команда:
vim-cmd vmsvc/getallvms"]
id2.3["Получить World ID для 'Davletov_test_for84'"]
id2.3.1["Команда: esxcli vm process list"]
id3["Этап 3: Выполнение команды выключения"]
id3.1["Выбор метода и команды"]
id3.1.1["Корректное выключение (предпочтительно)"]
id3.1.1.1["vim-cmd vmsvc/power.shutdown <VMID>"]
id3.1.1.2["esxcli vm process kill -t soft -w <WorldID>"]
id3.1.2["Принудительное выключение (для 'poweroff' сценария)"]
id3.1.2.1["vim-cmd vmsvc/power.off <VMID>"]
id3.1.2.2["esxcli vm process kill -t hard -w <WorldID>"]
id3.1.2.3["esxcli vm process kill -t force -w <WorldID>(самый агрессивный метод)"] id3.2["Выполнить выбранную команду для
Davletov_test_for84"]
id4["Этап 4: Завершение и проверка"]
id4.1["Проверить статус ВМ (выключена ли)"]
id4.1.1["vim-cmd vmsvc/getallvms"]
id4.1.2["esxcli vm process list"]
id4.2["Отключить ESXi Shell и SSH"]
id4.3["(При необходимости) Проанализировать логи хоста"]
id4.3.1["Лог команд: /var/log/shell.log"]
id4.3.2["Лог событий ВМ: /vmfs/volumes/datastore_name/vm_name/vmware.log"]
Эта карта охватывает ключевые шаги, начиная от подготовки и идентификации виртуальной машины до выполнения самой команды и последующих проверок.
Видеоурок: Работа с командной строкой ESXi
Для лучшего понимания работы с командной строкой ESXi, включая выполнение различных команд и навигацию, рекомендуется ознакомиться со следующим видео. Оно предоставляет общий обзор использования CLI на хостах ESXi, что может быть полезно для вашей задачи.
В этом видео демонстрируются основные приемы работы с ESXi Shell, которые помогут вам увереннее чувствовать себя при выполнении команд.
Проверка состояния ВМ и действия после операции
После выполнения команды выключения, убедитесь, что виртуальная машина Davletov_test_for84 действительно выключена. Вы можете использовать те же команды, что и для идентификации:
vim-cmd vmsvc/getallvms
Проверьте статус ВМ в выводе или используйте:
vim-cmd vmsvc/power.getstate <VMID>
Ожидаемый вывод для выключенной ВМ: "Powered off".
Также можно проверить список активных процессов ВМ:
esxcli vm process list
Если ВМ Davletov_test_for84 отсутствует в списке, значит, она выключена.
Крайне важно: после завершения всех операций в ESXi Shell или через SSH, не забудьте отключить эти службы для поддержания безопасности вашего хоста ESXi.
Аудит и логирование
Все команды, выполненные в ESXi Shell, обычно логируются в файле /var/log/shell.log. Вы можете просмотреть этот файл для аудита выполненных действий. Это может быть полезно для анализа в случае возникновения проблем.
Часто задаваемые вопросы (FAQ)
В чем разница между power.off и power.shutdown в vim-cmd?
vim-cmd vmsvc/power.shutdown <VMID> инициирует корректное (graceful) выключение. Эта команда отправляет сигнал гостевой операционной системе ВМ для завершения работы всех процессов и сохранения данных перед выключением. Требуется наличие VMware Tools в гостевой ОС.
vim-cmd vmsvc/power.off <VMID> выполняет принудительное (force) выключение ВМ. Это эквивалентно нажатию кнопки питания на физическом компьютере или отключению его от сети. Используется, если ВМ не отвечает на команду корректного выключения. Может привести к потере несохраненных данных.
Что такое VMID и World ID, и как их узнать?
VMID (Virtual Machine ID) — это числовой идентификатор, который ESXi присваивает каждой зарегистрированной виртуальной машине. Он используется в командах утилиты vim-cmd. Узнать VMID можно командой vim-cmd vmsvc/getallvms.
World ID — это идентификатор процесса виртуальной машины в планировщике VMkernel. Он используется в командах утилиты esxcli, например, esxcli vm process kill. Узнать World ID можно командой esxcli vm process list.
Можно ли безопасно оставлять ESXi Shell или SSH включенными?
Нет, не рекомендуется оставлять ESXi Shell и SSH постоянно включенными. Эти службы предоставляют прямой доступ к управлению хостом и могут представлять угрозу безопасности, если не контролируются должным образом. Включайте их только на время выполнения необходимых административных задач и отключайте сразу после завершения.
Что если я не знаю точное имя ВМ или ее ID?
Команды vim-cmd vmsvc/getallvms и esxcli vm process list выводят списки всех виртуальных машин на хосте с их именами и идентификаторами. Вы можете просмотреть эти списки, чтобы найти нужную ВМ по ее отображаемому имени (Display Name) или пути к конфигурационному файлу (.vmx).
Какие риски связаны с принудительным выключением ВМ (например, `power.off` или `esxcli vm process kill -t force`)?
Принудительное выключение ВМ сопряжено со следующими основными рисками:
- Потеря данных: Любые несохраненные данные в приложениях или операционной системе ВМ будут потеряны.
- Повреждение файловой системы: Резкое прекращение операций ввода-вывода может привести к повреждению файловой системы внутри ВМ, что может потребовать проверки диска при следующем запуске или даже привести к невозможности загрузки ОС.
- Нарушение целостности приложений: Приложения, особенно базы данных, могут оказаться в несогласованном состоянии.
Поэтому принудительное выключение следует использовать только в крайних случаях, когда ВМ полностью не отвечает.
Команда `poweroff` в ESXi Shell выключит ВМ или хост?
Команда poweroff, выполненная напрямую в командной оболочке ESXi (без указания конкретной ВМ через vim-cmd или esxcli), приведет к выключению всего хоста ESXi, а не отдельной виртуальной машины. Это очень опасная команда, если ваша цель – выключить только одну ВМ. Для управления питанием конкретных ВМ используйте команды, описанные в данном руководстве, такие как vim-cmd vmsvc/power.off <VMID> или esxcli vm process kill --type=[hard|force] --world-id=<WorldID>.
Рекомендуемые запросы для дальнейшего изучения
- Как автоматизировать задачи управления ВМ с помощью скриптов в ESXi Shell?
- Какие существуют методы устранения неполадок с зависшими виртуальными машинами в ESXi?
- Каковы лучшие практики обеспечения безопасности при работе с командной строкой ESXi?
- Как отслеживать производительность виртуальных машин с помощью esxtop в ESXi?
Источники и полезные ссылки
Last updated May 13, 2025