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

Казалось чего проще вынести логи на отдельный диск, но нет, есть свои подковырки.

mk0wu0igurkarnykkzxo7z_emvs.jpeg

Предыстория


Помню, был прекрасный зимний вечер, как вдруг выяснилось, что с 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
yak_o7fixnljzcr4szfo3utwijs.jpeg

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

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

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

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

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

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

qg51j8sssazrp121-zpgg-ng8sw.jpeg

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

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

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

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

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

5aixzad-icnuk3p4bgfziyvpk7m.jpeg

Можно увидеть что /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

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

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

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

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

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

Костыль


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

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

Для того чтобы Kerio продолжал записывать лог на SDB необходимо повторить процедуру подмены файла.

© Habrahabr.ru