Рассмотрим, как принудительно выключить/перезагрузить зависшую виртуальную машину на хосте Proxmox, которая не отвечает на команды Reboot/Stop/Reset из веб интерфейса.
В моем случае, при попытке выключить виртуальную машину Proxmox в панели задач появилась ошибка:
trying to acquire lock... TASK ERROR: can't lock file '/var/lock/qemu-server/lock-152.conf' - got timeout
В логе
/var/log/pve/tasks/active
ошибка выглядит так:
UPID:pve1:00002C30:0005677F:67E127EF:qmstop:152:root@pam: 1 67E127F9 can't lock file '/var/lock/qemu-server/lock-152.conf' - got timeout
При этом ВМ не реагирует на штатные команды сброса или принудительного выключения ВМ из веб интерфейса Proxmox.
- Error: VM is locked (backup)
- VM is locked (snapshot)
- VM is locked (clone)
Для остановки запущенной ВМ из консоли Proxmox доступны две команды:
# qm shutdown <vmid>
Эта команда аналогична короткому однократному нажатию на кнопку питания физического компьютера, когда в операционную систему отправляется команда ACPI для запуска процедуры корректного отключения. Это безопасный способ выключения ВМ (но требует наличие агента QEMU в гостевой ОС).
# qm reboot <vmid>
Команда принудительного выключения ВМ (аналогично отключению питания на физическом компьютере):
# qm stop <vmid>
При запуске этой команды появится ошибка, в которой указано имя файла, который не удается разблокировать:
# qm stop 152
trying to acquire lock... can't lock file '/var/lock/qemu-server/lock-152.conf' - got timeout
Пробуем снять все блокировки ВМ:
# qm unlock 152
trying to acquire lock... can't lock file '/var/lock/qemu-server/lock-102.conf' - got timeout
Если блокировка не снимается, придется вручную удалить файл блокировки, на который ссылается ошибка:
# rm -f /var/lock/qemu-server/lock-103.conf
Останавливаем виртуальную машину:
# qm stop 103
Также, если ничего не помогает, можно принудительно завершить процесс ВМ. Получить идентификатор процесса (PID) запущенной виртуальной машины можно, выведя список всех ВМ на хосте:
# qm list
Здесь видно, что ВМ запущена (STATUS = running) в процессе с PID = 23549.
Или получим PID, отфильтровав процессы по VMID зависшей виртуальной машины:
# ps aux | grep "/usr/bin/kvm -id 152"
# kill -9 PIDVM
Проверяем, что ВМ остановлена (статус stopped):
qm stop
и
qm shutdown
будут работать только когда в гостевой ОС установлены qemu guest tools. Можно проверить, доступен ли Qemu агент в ВМ по ее ID из консоли самого хоста:
# qm agent 152 ping
QEMU guest agent is not running