Когда при запуске или перезагрузке VPS-контейнера возникает сообщение «Container already locked», это значит, что виртуальная машина уже заблокирована другой операцией. Такая ситуация может произойти после некорректного завершения работы, зависания или принудительного выключения VPS. В статье разберём, что вызывает ошибку, как безопасно её устранить и что сделать, чтобы она больше не повторялась.
Что означает ошибка
OpenVZ использует механизм блокировок, чтобы предотвратить одновременное выполнение конфликтующих операций над одним контейнером. Например, если администратор уже выполняет команду vzctl start 100, система создаёт временный файл блокировки, чтобы другая команда не изменила состояние контейнера.
Иногда процесс, создавший блокировку, завершается некорректно — и файл остаётся в каталоге /vz/lock/. После этого при любой попытке остановить, запустить или перезагрузить контейнер появляется сообщение:
Container already lockedТакое часто случается после сбоев питания, зависаний, ошибок ядра или ручного завершения процессов OpenVZ.
Как устранить проблему
Если вы уверены, что контейнер не выполняет никаких операций, можно удалить файл блокировки вручную.
- Проверяем, какой номер у контейнера (в примере — 100).
- Удаляем файл блокировки:
rm /vz/lock/100.lckСистема может уточнить, удалить ли файл. Подтвердите — y.
- Для очистки зависших состояний выполним дополнительную команду:
vzctl chkpnt 100 --killЭта операция завершит все процессы, которые могли остаться в подвешенном состоянии.
- После этого можно безопасно перезапустить контейнер:
vzctl restart 100Если всё сделано верно, VPS запустится без ошибок.
Что делать, если контейнер не реагирует
Иногда контейнер не отвечает даже после удаления блокировки. Возможные причины:
- зависший процесс vzctl;
- системная ошибка ядра;
- проблемы с файловой системой.
В этом случае:
- Выполните ps aux | grep vzctl и убедитесь, что нет зависших процессов управления контейнерами.
- Если они есть, завершите их с помощью kill -9 [PID].
- Проверьте свободное место на разделе /vz командой df -h — при переполнении раздела OpenVZ может не создавать временные файлы.
- После этого повторите попытку перезапуска.
Типичные ошибки OpenVZ
| Сообщение об ошибке | Возможная причина | Как устранить |
|---|---|---|
| Container already locked | Остался файл блокировки в /vz/lock | Удалить .lck-файл и перезапустить контейнер |
| Container is not running | Контейнер не запущен, но команда требует активного состояния | Запустить контейнер: vzctl start [ID] |
| Unable to fork | Недостаточно памяти на хост-системе | Проверить ресурсы хоста, при необходимости увеличить лимиты |
| Cannot open /dev/vzctl | Модуль OpenVZ не загружен | Загрузить модуль: modprobe vzmon или перезапустить сервер |
| Failed to start container | Ошибка конфигурации или повреждённый образ | Проверить конфиг /etc/vz/conf/[ID].conf и шаблон ОС |
Как предотвратить повторение ошибки
Чтобы избежать подобных ситуаций, рекомендуется:
- корректно завершать работу контейнеров с помощью vzctl stop [ID];
- не отключать сервер во время выполнения операций с VPS;
- регулярно выполнять бекап конфигураций и образов контейнеров;
- следить за логами /var/log/vzctl.log и состоянием ресурсов хоста.
Заключение
Ошибка «Container already locked» в OpenVZ — не критическая и устраняется за минуту, если понимать её природу. Она говорит лишь о том, что контейнер остался «заперт» после сбоя. Удалите файл блокировки, завершите зависшие процессы и аккуратно перезапустите VPS. Если подобное повторяется часто, проверьте стабильность хост-системы и обновите OpenVZ до актуальной версии — в последних сборках механизм блокировок работает стабильнее и безопаснее.
Читайте в блоге:
- Исправление ошибки «Too many open files» при работе с Nginx в Linux
- Код ошибки 429 Too Many Requests: причины, последствия и решения
- Проблемы с сокетами у Bitrix: как исправить ошибки и вернуть нормальную работу сайта

