Pull to refresh

Отдельный LOG диск для Kerio Control

Reading time4 min
Views5.2K
Казалось чего проще вынести логи на отдельный диск, но нет, есть свои подковырки.



Предыстория


Помню, был прекрасный зимний вечер, как вдруг выяснилось, что с Kerio Control беда.
Kerio Control не мог записать изменения в конфигурацию и вообще происходила какая-то бесовщина!

Диагноз был быстрый и точный — кончилось место на системном диске Kerio Control.

Причина, большой старый лог.

Вариантов решения было несколько:

  • Почистить логи
  • Увеличить место на системном диске
  • Добавить дополнительный диск для логов

Последний казался самым логичным.

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

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

Решение


Kerio Control Virtual Appliance – это виртуальная машина которая живет на одном диске, решение казалось очень простым:

  • Добавь дополнительный виртуальный диск в гипервизоре
  • Сделать разметку ext4 или ext3
  • Добавить монтирование нового диска в fstab
  • Найди конфигурационный файл Kerio и указать новый путь для логов.

НО НЕТ!

Начиная с пункта “Добавить монтирование нового диска в fstab” – что-то пошло не так.

Как выяснилось, Kerio плевать хотел на fstab.

Диск прекрасно монтировался в ручную, но вот автоматический после запуска чего-то не хотел.

После долгих шатаний по файловым директориям в поисках неизвестно чего, мое внимание привлек файл 05basefs, а именно мне очень понравились следующие надписи – base и fs, а вот 05 совсем не заинтересовало. Изучив его содержимое я понял что файловая система монтируется именно тут.

Далее все казалось простым, с давних пор существует файл winroute.CFG, все настройки хранятся там, там же можно указать и путь к директории с логами.

Но как выяснилось, я и тут ошибался, Kerio обращает внимание на новые пути в конфигурационном файле, но что-то работает не так, лог после изменения путей валит ошибки либо вообще ни отображает ничего.

Ну и ладно смонтируем новый диск по текущему размещению лога!

Реализация


После всего выше сказанного реализация очень проста.

Для начала нам нужно подключится к терминалу Kerio Control, проще всего это сделать, используя SSH.

Временно включаем доступ SSH.

Для этого необходимо залогинится в админке и перейти в раздел “Состояние системы” удерживая зажатую кнопку Shift.



Если вы все сделали правильно, внизу рядом с кнопкой перезагрузки сервера появится кнопка активации SSH:



Временно активируем SSH (не забудьте отключить его после настройки!)
После включения SSH можно подключится к серверу используя SSH клиент.

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

Итак, что мы сейчас имеем:

  • Мы создали и подключили новый диск к серверу
  • Разметили его в ext4 или ext3
  • Активировали SSH и подключились к серверу

Далее нам нужно исправить файл 05basefs который находится по следующему пути .\etc\boxrc.d\05basefs.

Но перед тем как его править нужно, сделать еще две вещи.

Первое — узнать dev нового диска для логов
Для того чтобы узнать имя диска выполним lsblk и получим что-то вроде



где:
  • SDA – системный диск
  • sda1 – загрузчик
  • sda2 и sda3 – текущая и по всей видимости предыдущая версия Kerio
  • sda4 – Var здесь конфигурация и логи по умолчанию
  • SDB – наш новый диск

В том случае, если нам необходимо сохранить текущие логи, нужно временно примонтировать диск sdb в любую пустую директорию и перенести содержимое /var/winroute/logs на примонтированный sdb.

После переноса отмантируем sdb.

Второе — разрешить файловой системе изменение системных файлов
Kerio монтирует системный диск где располагается 05basefs с правами – только на чтение.

чтобы посмотреть, что куда и как премотированно выполняем mount



Можно увидеть что /dev/sda2 находится в состоянии RO, а и именно там находится текущая версия Kerio и там-же находится 05basefs

Временно разрешим запись в /dev/sda2 командой mount -o rw,remount /dev/sda2
Теперь, можно исправить файл 05basefs, лично я предпочитаю копировать уже исправленный файл это удобно, так как сделав это один раз придётся повторять процедуру подмены файла каждый раз после обновления версии Kerio, так как с новой версией восстанавливается оригинальный 05basefs.

Также для изменения файла можно воспользоваться редактором vi — он есть в системе.

Изменяем 05basefs следующим образом

#!/bin/sh
# $Revision: 1.13 $

case "$1" in
start)
grep -q /tmp /proc/mounts || mount -t tmpfs tmp /tmp
mkdir -p /tmp/run

root=$(grep " / " /proc/mounts | grep -v rootfs | sed 's/ .*//')
DATA=${root%[23]}4
BOOT=${root%[23]}1

modprobe ext3
mount -o ro -t ext3 $BOOT /boot
if [ ! -z "$DATA" ] && ! mount -o data=ordered $DATA /var 2>/dev/null; then
echo "Creating new data partition..."
#mkfs.nilfs2 -b 1024 $DATA
mkfs.ext3 -b 4096 -q $DATA 2>&1
tune2fs -c 0 -i 0 -r 0 -E stride=512,stripe-width=512 $DATA
fsck -p $DATA
mount -o data=ordered $DATA /var
[ -d /var.default ] && cp -a /var.default/* /var
elif [ -f "/var.default/update.list" ]; then
for i in `cat /var.default/update.list`; do
[ -e "/var.default/$i" -o -h "/var.default/$i" ] || continue
! [ -e "/var/$i" -o -h "/var/$i" ] || continue
mkdir -p $(dirname "/var/$i")
cp -a "/var.default/$i" "/var/$i"
done
fi
mount -t ext4 /dev/sdb /var/winroute/logs
exit 0
;;
stop)
echo "Umounting data partition..."
for i in $(seq 1 10); do
if fuser -sm /var; then
sleep 1
else
break
fi
done
fuser -kms /var/winroute/logs
umount /var/winroute/logs
fuser -kms /var
umount /var
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac


Пояснения изменений в файле

mount -t ext4 /dev/sdb /var/winroute/logs
монтирует sdb по оригинальному пути логов /var/winroute/logs

fuser -kms /var/winroute/logs
umount /var/winroute/logs

Размонтирует sdb для корректного выключения сервера.

Теперь вернем sda2 в исходное состояние командой mount -o rо,remount /dev/sda2

После перезагрузки сервера, Kerio будет записывать логи на наш выделенный диск SDB.

Костыль


(ведь без костыля нельзя)

Как я уже ранее изложил, в том случае, если версия Kerio будет обновлена, файл 05basefs вернется в оригинальное состояние, Kerio вновь начнет записывать логи в sda4. По пути /var/winroute/logs.

Для того чтобы Kerio продолжал записывать лог на SDB необходимо повторить процедуру подмены файла.
Tags:
Hubs:
Total votes 5: ↑5 and ↓0+5
Comments11

Articles