Облачное хранилище

Восстановление входа в vCenter Server Appliance 5.5 при переполнении дисков

Иногда администраторы VMware сталкиваются с неприятной ситуацией: внезапно перестаёт работать вход в vCenter Server Appliance (vCSA) 5.5. Причина может оказаться банальной, но весьма критичной — на сервере просто заканчивается свободное место на одном или нескольких разделах.

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

df -h /storage/{core,db}

Результат оказался таким:

Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 20G 20G 0 100% /storage/core
/dev/sdb3 60G 56G 90M 100% /storage/db

Оба раздела — /storage/core и /storage/db — были переполнены, что полностью блокировало работу сервиса.


Причина проблемы

В базе знаний VMware есть статья, посвящённая подобному симптому. Оказывается, это известная ошибка в vCenter Server 5.5U2. Основная причина — чрезмерное количество записей в журнале базы данных vPostgres.

Во время работы vCenter база может создавать очень много сообщений вида:

ВНИМАНИЕ: в данный момент может выполняется транзакция!

Если уровень логирования настроен слишком подробно, файлы журналов быстро занимают всё дисковое пространство, что и приводит к сбою.


Шаги по решению

1. Остановка сервисов

Сначала нужно полностью остановить работу vCenter и встроенной базы данных:

service vmware-vpxd stop
service vmware-vpostgres stop

2. Настройка параметров логирования

Переходим в каталог с конфигурацией базы данных и редактируем файл postgresql.conf. Обязательно сделайте резервную копию перед изменениями:

cd /storage/db/vpostgres
cp postgresql.conf postgresql.conf.orig
vi postgresql.conf

В файле следует уменьшить уровень логирования. Найдите параметр log_min_messages и замените его на:

log_min_messages = warning
log_min_messages = error

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

3. Очистка старых логов

Далее можно удалить все устаревшие файлы журналов (оставив только последний):

find . -type f -ctime +1 -exec rm {}

Таким образом вы освободите место на разделе /storage/db.


Очистка каталога /storage/core

В моём случае ситуация осложнилась тем, что забит был не только каталог с базой данных, но и раздел /storage/core. Там со временем накапливаются старые дампы памяти и файлы core, которые можно без опасений удалить.

Сначала проверим содержимое:

cd /storage/core
ls -lhs

Пример вывода:

2.1G -rw------- 1 root root 2.6G Aug 18 08:46 core.vpxd-worker.25327
9.6G -rw------- 1 root root 12G Aug 18 06:39 core.vpxd-worker.4489

Как видно, файлы могут достигать десятков гигабайт. Удаляем их командой:

rm core.vpxd-worker.*

Перезапуск сервисов

После освобождения места можно снова запустить vCenter и базу данных:

service vmware-vpostgres start
service vmware-vpxd start

Если всё сделано правильно, вход в систему снова станет доступен.


Итог

  • Проблема возникает из-за чрезмерного логирования в vPostgres на vCSA 5.5U2.

  • Решение — уменьшить уровень логирования, очистить старые журналы и удалить накопившиеся файлы в /storage/core.

  • После перезапуска сервисов система возвращается в нормальный режим работы.

💡 Совет: чтобы не столкнуться с этим снова, стоит периодически проверять дисковое пространство и настраивать автоматическую очистку старых логов. Это простое действие поможет избежать простоя в будущем.

Дополнительные меры профилактики

1. Мониторинг дискового пространства

Чтобы заранее видеть, когда разделы начинают заполняться, можно использовать стандартные инструменты Linux.

Например, проверить все разделы в удобном виде можно так:

df -h

Для мониторинга конкретных каталогов (например, /storage/core и /storage/db) удобно применять команду du:

du -sh /storage/core
du -sh /storage/db

Эти команды покажут общий объём данных внутри папок. Если нужно узнать, какие именно файлы занимают больше всего места, используйте:

du -ah /storage/core | sort -rh | head -20

Здесь выводятся 20 самых «тяжёлых» файлов и папок в каталоге.


2. Автоматическая очистка логов через cron

Чтобы больше не сталкиваться с переполнением раздела из-за старых логов, можно настроить автоматическую очистку. Для этого используется планировщик задач cron.

Открываем редактор crontab:

crontab -e

И добавляем, например, такую строку:

0 3 * * * find /storage/db/vpostgres -type f -ctime +7 -exec rm -f {} \;

Что делает эта команда:

  • запускается каждый день в 03:00 ночи;

  • ищет все файлы старше 7 дней в каталоге /storage/db/vpostgres;

  • удаляет их автоматически.

Аналогично можно очистить и папку /storage/core, если там часто появляются дампы:

0 4 * * * find /storage/core -type f -ctime +14 -exec rm -f {} \;

Здесь будут удаляться файлы старше 14 дней.


3. Настройка уведомлений (опционально)

Ещё один полезный приём — настроить уведомления, чтобы администратор знал, что место заканчивается. Для этого можно объединить df с почтовым уведомлением.

Простейший пример скрипта:

#!/bin/bash
THRESHOLD=80
EMAIL="admin@example.com"
USAGE=$(df -h /storage/db | grep -v Filesystem | awk ‘{print $5}’ | sed ‘s/%//’)

if [ $USAGE -ge $THRESHOLD ]; then
echo «Внимание! Раздел /storage/db заполнен на $USAGE%» | mail -s «vCSA предупреждение» $EMAIL
fi

Скрипт можно добавить в cron, чтобы он проверял состояние диска, например, каждые 6 часов.


Итоговое резюме

Теперь статья стала полноценным практическим руководством:

  • мы разобрались, почему vCSA 5.5 перестаёт пускать в систему;

  • пошагово очистили диски;

  • настроили снижение уровня логирования в vPostgres;

  • добавили автоматическую очистку через cron и мониторинг дисков;

  • показали, как настроить уведомления.

Таким образом, администратор может не только решить проблему разового переполнения, но и предотвратить её повторение в будущем.

спасибо: http://www.stankowic-development.net/?p=8846&lang=enclear