Puncte:1

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

drapel 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?

drapel cn
Doar gândul meu de la citirea asta: Bazat pe evenimente (de ex. inotify) declanșat la închiderea noului `dhcpd.leases~`?
Puncte:1
drapel cl
A.B

Din Surse DHCP:

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

[...]

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

[...]

      dacă (link(path_dhcpd_db, backfname) < 0) { 

Fișierul de rezervă anterior este șters, apoi fișierul de închiriere curent este conectat ca backup cu un final ~.

Pe Linux, cu notificare(7) facilitate pentru evenimente, un hardlink este văzut ca un eveniment de creație.

Aș sugera să folosești inotifywait (din inotify-instrumente pachet) pentru a semnala când a avut loc un astfel de eveniment. Ar trebui să se aștepte la apariția /var/lib/dhcpd/dhcpd.leases~ care este apoi direct gata pentru backup (este un hardlink către original). Deoarece fișierul va fi un fișier diferit (inod diferit) de fiecare dată, directorul ar trebui urmărit pentru detectarea corectă și, de exemplu, --include opțiunea poate fi utilizată pentru a simplifica procesarea shell (nicio procesare, chiar și linia de citire este eliminată într-o variabilă inactivă):

inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | în timp ce citiți manechin; do
    do_backup /var/lib/dhcpd/dhcpd.leases~
Terminat

Dacă comanda nu este suficient de recentă, este posibil să nu înțeleagă --include în acest caz, testul trebuie făcut în bucla de evenimente:

inotifywait -m -e create /var/lib/dhcpd | while read -r dir nume fișier eveniment; do
    if [ "$filename" = dhcpd.leases~ ]; atunci
        do_backup /var/lib/dhcpd/dhcpd.leases~
    fi
Terminat

Alternativ, incron pachet (disponibil cel puțin pe CentOS 8 Stream), ar putea fi folosit cu un intrare similar cu:

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

cu if_correct_file_do_backup fiind, de exemplu, un shell care verifică, acesta a fost numele de fișier dorit:

#!/bin/sh

if [ "$1" = dhcpd.leases~ ]; atunci
    do_backup /var/lib/dhcpd/dhcpd.leases~
fi

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.