Размер файлов MongoDB в программном обеспечении UniFi и UniFi-Video

В данной статье описывается решение проблемы чрезмерного использования места программными продуктами компании Ubiquiti: UniFi-Video и UniFi. В конфигурации по умолчанию данные продукты используют фактически двойной размер места под журналы базы данных. В заметке описано решение проблемы.

UniFi – торговая марка фирмы Ubiquiti. Изначально под этой торговой продавались wifi точки доступа, сейчас под этой маркой доступны целые серии устройств для обеспечения доступности wi-fi сети, видеонаблюдения, телефонии или умного дома. Программное обеспечение предоставляемое компанией – бесплатно, этим объясняется популярность устройств компании при решении многих задач.

К сожалению, в программном обеспечении и инструкциях по его установке присутствуют ошибки переходящие из версии в версию. Одной из таких ошибок является двойное использование места при журналировании базы данных MongoDB в Ubuntu и Debian. Первую версию журнала ведёт движок базы данных, вторую версию журнала ведёт непосредственный экземпляр обслуживающий БД UniFi. Цель ведения журнала – восстановление после сбоя, однако зачем это делать дважды – не ясно.

Пример использования места с тестовой системы видеозаписи на базе UniFi-Video:

[email protected]:/var/lib# du -h --max-depth=1
4.0K    ./misc
52K     ./belocs
4.0K    ./landscape
3.1M    ./apt-xapian-index
143M    ./apt
20K     ./sudo
4.0K    ./ntpdate
25M     ./dpkg
8.0K    ./plymouth
3.1G    ./mongodb
84K     ./ucf
2.5M    ./mlocate
4.0K    ./insserv
8.0K    ./urandom
8.0K    ./update-manager
16K     ./locales
8.0K    ./dbus
24K     ./update-notifier
7.1G    ./unifi-video
8.0K    ./ureadahead
4.0K    ./dhcp
8.0K    ./ntp
4.0K    ./aptitude
4.0K    ./libuuid
88K     ./update-rc.d
12K     ./AccountsService
456K    ./usbutils
4.0K    ./os-prober
12K     ./xml-core
8.0K    ./vim
12K     ./initramfs-tools
8.0K    ./logrotate
28K     ./pam
4.0K    ./initscripts
4.0K    ./sgml-base
11G     .

Подсвечены строчки с журналами базы данных и журналом экземпляра UniFi-Video.

Деликатное решение проблемы (на примере Unifi-Video):

Сначала требуется остановить работу MongoDB и UniFi-Video:

sudo -s
service unifi-video stop
service mongodb stop

Теперь в скрипте запуска MongoDB требуется выключить основной экземпляр БД. Для этого нужно внести иправления в файл: /etc/init/mongodb.conf, нужно исправить строчку ENABLE_MONGODB=»yes» на ENABLE_MONGODB=»no».Сделать это можно либо в режиме редактора, либо запустив команду:

sed -i 's/ENABLE_MONGODB=\"yes\"/ENABLE_MONGODB=\"no\"/g' /etc/init/mongodb.conf

Удаляем файлы журнала по адресу /var/lib/mongodb/journal

rm -Rf /var/lib/mongodb/journal/

Запускаем службу UniFi-Video и проверяем работу:

service unifi-video start

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

[email protected]:/var/lib# du -h --max-depth=1
4.0K    ./misc
52K     ./belocs
4.0K    ./landscape
3.1M    ./apt-xapian-index
143M    ./apt
20K     ./sudo
4.0K    ./ntpdate
25M     ./dpkg
8.0K    ./plymouth
4.0K    ./mongodb
84K     ./ucf
2.5M    ./mlocate
4.0K    ./insserv
8.0K    ./urandom
8.0K    ./update-manager
16K     ./locales
8.0K    ./dbus
24K     ./update-notifier
7.1G    ./unifi-video
8.0K    ./ureadahead
4.0K    ./dhcp
8.0K    ./ntp
4.0K    ./aptitude
4.0K    ./libuuid
88K     ./update-rc.d
12K     ./AccountsService
456K    ./usbutils
4.0K    ./os-prober
12K     ./xml-core
8.0K    ./vim
12K     ./initramfs-tools
8.0K    ./logrotate
28K     ./pam
4.0K    ./initscripts
4.0K    ./sgml-base
7.2G    .

Данное решение является деликатным, потому что у нас остаётся второй журнал базы данных, который ведёт экземпляр UniFi-Video. В случае сбоя мы можем использовать этот журнал для восстановления базы данных.

Полное отключение ведение журнала (только для UniFi Wi-Fi):

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

На время внесения изменений опять остановить службу UniFi:

service unifi stop

Удаляем существующий файл журнала:

rm -Rf /var/lib/unifi/db/journal/

Добавляем в файл/var/lib/unifi/system.propertiesстроку:

unifi.db.nojournal=true

Запускаем сервис и проверяем его работу:

service unifi start

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *