Видеонаблюдение через интернет в веб-браузере

avreg-unlink: «чистильщик» медиа-архива от старых записей.

Предназначен для очистки архива с аудио/видео файлами от старых (по времени создания) записей, то есть для организации автономного необслуживаемого циклического архива.

Настройки.

Все настройки avreg-unlink вынесены в файл «/etc/avreg/avreg.conf», в основном в секции «avreg-unlink { … }».

Каждый параметр в конфигурационном файле комментирован, поэтому просто приведём часть его содержимого.

...

# Имя хоста SQL-сервера и имя базы данных.
# По умолчанию:
; db-host = 'пусто'
; db-name = 'avreg5_db'

# Каталог, в который должны сохраняться аудио/видео файлы.
# По умолчанию:
; storage-dir = '/var/spool/avreg'

# Имя текстового файла-журнала, в который записываются "вручную"
# удалённые из архива файлы, например, для сокрытия каких-то проишествий.
# Журнал создаётся в каталоге "{{storage-dir}}".
# По умолчанию: "removed-manually.txt"
; removed-manually = 'removed-manually.txt'

# Системные пользователь/группа, с привилегиями которых ("под которыми")
# будут работать приложения серверной части AVReg - avregd и avreg-unlink.
# Такие же атрибуты "владелец:группа" получат все создаваемые каталоги и файлы.
# Прим. по группе: если при монтировании файловой системы использовалась опция
# grpid (man 8 mount), то группа созданного в ней каталога/файла будет
# установлена значением группы родительского каталога.
# По умолчанию: avreg/avreg
; user  = avreg
; group = www-data

avreg-unlink {
   ### Настройки "чистильщика" архива от старых медиа-файлов (версия 5.5),   ###
   ### автоматически запускаемого системным шедулером CRON по расписанию:    ###
   ### см. файл-задание "/etc/cron.d/avreg-unlink"                           ###
   ### Значениями параметров start-space и end-space, в сочетании с частотой ###
   ### запуска "чистильщика", вы должны предотвратить 100% заполнение        ###
   ### дискового устройства используемого для записи файлов, и тем самым     ###
   ### останов процесса записи. Значениями параметров del-per-once и timeout ###
   ### вы должны предотвратить пиковую перегрузку системы вызванную          ###
   ### процессом удаления файлов с файловой системы и записей в базе данных. ###

   #    Устанавливайте имя "db-user" и пароль "db-passwd" доступа к базе данных
   # в приватном ( 0600 root:root ) файле c именем "avreg-unlink.secret" 
   include /etc/avreg/avreg-unlink.secret

   #    Команда для получения размеров диска в 1КБ блоках,
   # требуемый stdout вывод: "1Kблоков_ИСПОЛЬЗОВАНО 1Kблоков_ВСЕГО",
   # Параметр "disk-usage-cmd" предназначен прежде всего для ипользования
   # дисковых системных квот quota(1)/quotactl(2) или xfs_quota(8).
   # В команде можно использовать переменные:
   #  - @USER/@GROUP - раскрываются как "user"/"group" в avreg.conf;
   #  - @DIR/@FS/@MNTPOINT - раскрываются как имя каталога "storage-dir"
   #   в avreg.conf, имя блочного устройства и точка монтирования, соотв.
   # По умолчанию: не задано, т.е. будет использоваться вызов statfs(2)
   # Для ext3/ext4 файловых систем смонтированных с опцией "usrquota":
   ; disk-usage-cmd = "quotatool -b -u @USER -d @MNTPOINT | awk '{ print $3,$5 }'"
   # Для XFS файловой системы смонтированной с опцией "uquota":
   ; disk-usage-cmd = "xfs_quota -c 'quota -vbN @USER' | awk '{ print $2,$4 }'"

   #    В трёх нижеследующих параметрах допустимо использование
   # суффиксов-модификаторов: k[ило], M[ега] and G[ига] байт,
   # например: 2500M or 1G (пишите латинскими буквами и слитно)
   #    Для "-space" опций вы пожете также задавать знаяения в процентах,
   # от общего размера устройства "storage-dir".

   #    Размер свободного места на архивном устройстве,
   # при котором начинается процесс очистки.
   # По умолчанию: остаток - '10%', суффикс-модификатор - 'G'(Гигабайт)
   ; start-space = 35G

   #    Размер свободного места на архивном устройстве,
   # при котором заканчивается процесс очистки.
   # Рекомендуется устанавливать не менее чем 1,5 размера start-space
   # По умолчанию: остаток - '15%', суффикс-модификатор - 'G'(Гигабайт)
   ; end-space = 50G

   #    Внутри сеанса удаления процесс разбит на небольшие транзакции.
   # Это нужно для того, чтобы не перегрузить систему длительным и непрерывным
   # процессом удаления файлов с жестких дисков (особенно на ext3 или 
   # программных RAID 4,5) одновременно с процессом записи новых файлов.
   # В рамках одной транзакции удаляется набор файлов с общим размером
   # не более чем значение "del-per-once".
   # По умолчанию: удалять по 100M, суффикс-модификатор - 'M'(Мегабайт)
   ; del-per-once = 200M

   #    Перерыв между транзакциями timeout в секундах,
   # по умолчанию: 1 секунда
   ; timeout = 2

   #    Читать за один раз rows-per-select записей из таблицы EVENTS.
   # Если не очень понимаете зачем нужен этот параметр - не трогайте.
   # По умолчанию: 5000
   ; rows-per-select = 10000

   #    Не удалять записи и файлы новее чем "select-now-minus" минут.
   # Поставьте как максимальное возможное значение длительности (mtime - ctime)
   # медиа-файлов (см. V.max_minutes и A.max_minutes) с небольшим запасом.
   # По умолчанию: 60 минут (1 час.)
   ; select-now-minus = 120
}

Автоматический запуск (CRON).

avreg-unlink запускается периодически через системный шедулер CRON.

Время и период запуска определяются в файле «/etc/cron.d/avreg-unlink»:

# Расписание cron для пакета avreg-unlink
# синтаксис смотрите: man 5 crontab
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# раскомментируйте строку ниже, если локаль "ru_RU.UTF8" НЕ поддерживается syslog
# LANG=C

# раскомментируйте 3 строки ниже, если локаль "ru_RU.UTF8" ПОДДЕРЖИВАЕТСЯ syslog
LC_ALL='ru_RU.UTF-8'
CONTENT_TYPE='text/plain; charset="utf-8"'
CONTENT_TRANSFER_ENCODING='8bit'

# по умолчанию: каждыe 10 минут
*/10 *    * * *   root    /usr/sbin/avreg-unlink >/dev/null

# дополнительно, каждую неделю во вторник в 05:00
# выполниить удаление и упаковать базу (см. MySQL OPTIMIZE TABLE)
00 5    * * 2   root    /usr/sbin/avreg-unlink --optimize >/dev/null

Подробнее о том как составлять задания для cron см. Cron.

Различная глубина архива для разных камер

Для avreg-unlink >= 6.1p1

Если необходимо обеспечить увеличенную глубину архива для небольшого списка камер, то используйте следующее задание CRON.

задание CRON /etc/cron.d/avreg-unlink

# Расписание cron для пакета avreg-unlink
# синтаксис смотрите: man 5 crontab
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# раскомментируйте строку ниже,
# если локаль "ru_RU.UTF8" НЕ поддерживается syslog
# LANG=C

# раскомментируйте 3 строки ниже,
# если локаль "ru_RU.UTF8" ПОДДЕРЖИВАЕТСЯ syslog
LC_ALL='ru_RU.UTF-8'
CONTENT_TYPE='text/plain; charset="utf-8"'
CONTENT_TRANSFER_ENCODING='8bit'

# список "важных" камер
CAMS_LIST1=3,5,7-10
# остальные камеры
CAMS_LIST2=1,2,4,6,11-100

# каждые 15 мин. удалять ролики камер из списка CAMS_LIST2
# в автоматическом режиме с контролем свободного места на устройстве 
# с архивом AVReg
*/15 *    * * *   root    avreg-unlink "$CAMS_LIST2" >/dev/null


# каждую ночь в 04:37 удалять ролики "важных" камер
# из списка CAMS_LIST1, которые старше чем 90 дней (для примера)
37 04  * * *  root avreg-unlink "$CAMS_LIST1" "..$(date -d '90 day ago' +\%F)" >/dev/null
#                                подставьте своё значение   ^^ 

# дополнительно, каждую неделю во вторник в 05:00
# выполниить удаление и упаковать базу (см. MySQL OPTIMIZE TABLE)
00 5    * * 2   root    avreg-unlink --optimize >/dev/null

Запуск в терминале.

Все параметры, описанные выше (см. конфигурационный файл avreg.conf) также доступны опциями командной строки, см:

$ sudo avreg-unlink --help
или
$ man avreg-unlink

При интерактивном запуска, обычно, представляют интерес 2 возможности:

  1. повышение уровня отладки, ключ “-v“ - больше сообщений, например: -vvvv или -v3;
  2. выборочное удаление:
    avreg-unlink [опции] [СПИСОК_КАМЕР] [[ОТ]..[ДО]]
            где:
                 СПИСОК_КАМЕР - ограничивает набор камер, например: "1,2,7-13"
                 ОТ и ДО      - **отключают автоматический режим удаления с контролем
                                остатка свободного места**, переключаясь в режим удаления
                                заданного диапазона времени,
                                формат и ОТ и ДО: "ГГГГ-ММ-ДД[ чч:мм[:сс]]"
    
    
Примечания:
  • помните, нечаянно удалённые файлы - не восстановить;
  • если вы указываете часы:минуты в диапазонах [ОТ]..[ДО], то обязательно используйте кавычки для всего диапазона «ОТ..ДО», например, '2010-12-31 23:30..2011-01-01 00:30'

Примеры запуска avreg-unlink в терминале ( :!: запускать avreg-unlink нужно от root-а или через sudo ):

$ sudo avreg-unlink -v
Подключаемся к MySQL базе данных на  "avreg5_db-NEW"
Запуск "чистильщика" медиа-архива AVReg на "avreg5_db-NEW@/var/spool/avreg"
устройство с медиа-архивом - `/dev/mapper/md_mirr-var', смонтировано на `/var', fs `ext3'
перед удалением `/dev/mapper/md_mirr-var' размер: всего/использ./свободно: 29.5 ГБ / 18.1 ГБ (61%) / 9.9 ГБ (34%)
свободное место (9.9 ГБ) > "start-space" options (3.0 ГБ) => не будем удалять.
root# avreg-unlink -v  3-5,7  "2009-01-01..2014-02-15"
Подключаемся к MySQL базе данных на  "avreg5_db-NEW"
Запуск "чистильщика" медиа-архива AVReg на "avreg5_db-NEW@/var/spool/avreg"
устройство с медиа-архивом - `/dev/mapper/md_mirr-var', смонтировано на `/var', fs `ext3'
перед удалением `/dev/mapper/md_mirr-var' размер: всего/использ./свободно: 29.5 ГБ / 18.1 ГБ (61%) / 9.9 ГБ (34%)
после удаления  `/dev/mapper/md_mirr-var' размер: всего/использ./свободно: 29.5 ГБ / 18.1 ГБ (61%) / 9.9 ГБ (34%)
всего удалено 0 файлов общим размером 0 Б и 0 каталогов
$ sudo avreg-unlink -v '..2014-07-15'
manual/tuning/avreg-unlink.txt · Последние изменения: 2014-06-03