Рейтинг:1

What is the proper way to back up ISC DHCPd lease files?

флаг ma

According to this answer, DHCPd lease files are cleared every hour. The goal is to back up the leases file continuously, so there is never a lease lost. This is made difficult since it is unclear whether the hour timer is based on system time (eg the file is rewritten at 1am, 2am, 3am etc) or process time (service_start + 1h, service_start + 2h, etc). Say the leases file is cleared at exactly 3am, and a lease is granted at 2:58:55; the service that backs up the lease file would need to run, quickly, before the file is cleaned.

The DHCPd process makes its own backup of the file to /var/lib/dhcpd/dhcpd.leases~. The best bet then seems to be to make a script that backs up this file to another location every hour. But if the DHCPd process is restarted and the timer is relative to the process, it would be possible for the hour mark on the backup tasks to align, which might end in one process reading while the other writes, and that could mangle the file (depending on how it's done). So the backup task would need some knowledge of when DHCPd starts. This is getting complicated.

What is the 'correct' way to back up the DHCPd leases file, so no leases are lost?

флаг cn
Просто моя мысль после прочтения этого: Основанный на событии (например, inotify) срабатывает при закрытии нового `dhcpd.leases~`?
Рейтинг:1
флаг cl
A.B

От Источники DHCP:

      if (snprintf (backfname, sizeof backfname, "%s~", path_dhcpd_db) >= sizeof backfname)

[...]

      if (unlink (backfname) < 0 && errno != ENOENT) { 

[...]

      если (ссылка (path_dhcpd_db, backfname) < 0) { 

Предыдущий файл резервной копии удаляется, затем текущий файл аренды жестко связывается как резервная копия с конечным ~.

В Linux с помощью инотифицировать(7) события, жесткая ссылка рассматривается как событие создания.

я бы предложил использовать inotifywait (от inotify-инструменты package), чтобы сигнализировать, когда такое событие произошло. Следует ожидать появления /var/lib/dhcpd/dhcpd.leases~ который затем сразу готов к резервному копированию (это жесткая ссылка на оригинал). Поскольку файл каждый раз будет другим файлом (разным индексным узлом), это каталог, за которым следует следить для правильного обнаружения, и, например, --включать можно использовать для упрощения обработки оболочки (без обработки, даже строка чтения отбрасывается в фиктивной переменной):

inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | пока читается манекен; делать
    do_backup /var/lib/dhcpd/dhcpd.leases~
сделано

Если команда недостаточно свежа, она может не понять --включать в таком случае тест должен быть выполнен в цикле событий:

inotifywait -m -e создать /var/lib/dhcpd | при чтении -r имя файла события каталога; делать
    если [ "$filename" = dhcpd.leases~ ]; тогда
        do_backup /var/lib/dhcpd/dhcpd.leases~
    фи
сделано

Альтернативно, инкрон пакет (доступный по крайней мере в CentOS 8 Stream), может использоваться с вход похожий на:

/var/lib/dhcpd IN_CREATE, recursive=false if_correct_file_do_backup $#

с if_correct_file_do_backup например, оболочка, проверяющая, что это предполагаемое имя файла:

#!/бин/ш

если [ "$1" = dhcpd.leases~ ]; тогда
    do_backup /var/lib/dhcpd/dhcpd.leases~
фи

Ответить или комментировать

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