Qual é a maneira correta de fazer backup de arquivos de concessão ISC DHCPd?

Qual é a maneira correta de fazer backup de arquivos de concessão ISC DHCPd?

De acordo comesta resposta, os arquivos de concessão DHCPd são apagados a cada hora. O objetivo é fazer backup do arquivo de arrendamento continuamente, para que nunca haja perda de um arrendamento. Isto é dificultado porque não está claro se o cronômetro é baseado na hora do sistema (por exemplo, o arquivo é reescrito à 1h, 2h, 3h, etc.) ou no tempo do processo (service_start + 1h, service_start + 2h, etc). Digamos que o arquivo de arrendamento seja limpo exatamente às 3h e o arrendamento seja concedido às 2h58min55s; o serviço que faz backup do arquivo de concessão precisaria ser executado rapidamente antes que o arquivo fosse limpo.

O processo DHCPd faz seu próprio backup do arquivo para /var/lib/dhcpd/dhcpd.leases~. A melhor aposta parece ser criar um script que faça backup desse arquivo em outro local a cada hora. Mas se o processo DHCPd for reiniciado e o cronômetro for relativo ao processo, seria possível alinhar a marca da hora nas tarefas de backup, o que pode terminar na leitura de um processo enquanto o outro grava, e isso pode danificar o arquivo ( dependendo de como isso é feito). Portanto, a tarefa de backup precisaria de algum conhecimento de quando o DHCPd é iniciado. Isso está ficando complicado.

Qual é a maneira 'correta' de fazer backup do arquivo de concessões DHCPd, para que nenhuma concessão seja perdida?

Responder1

DeFontes DHCP:

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

[...]

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

[...]

      if (link(path_dhcpd_db, backfname) < 0) { 

O arquivo de backup anterior é excluído e, em seguida, o arquivo de concessão atual é vinculado como backup com uma extensão ~.

No Linux, com oinoificar(7)instalação de eventos, um hardlink é visto como um evento de criação.

Eu sugeriria usar inotifywait(do inotify-toolspacote) para sinalizar quando tal evento aconteceu. Deve-se esperar /var/lib/dhcpd/dhcpd.leases~que a aparição esteja diretamente pronta para backup (é um hardlink para o original). Como o arquivo será um arquivo diferente (inode diferente) a cada vez, é o diretório que deve ser observado para detecção adequada e, por exemplo, a --includeopção pode ser usada para simplificar o processamento do shell (sem processamento, até mesmo a linha de leitura é descartada em um variável fictícia):

inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | while read dummy; do
    do_backup /var/lib/dhcpd/dhcpd.leases~
done

Se o comando não for recente o suficiente, pode não ser compreendido. --includeNesse caso, o teste deve ser feito no loop de eventos:

inotifywait -m -e create /var/lib/dhcpd | while read -r dir event filename; do
    if [ "$filename" = dhcpd.leases~ ]; then
        do_backup /var/lib/dhcpd/dhcpd.leases~
    fi
done

Alternativamente, o incronpacote (disponível pelo menos no CentOS 8 Stream), poderia ser usado com umentradaigual a:

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

sendo if_correct_file_do_backup, por exemplo, um shell verificando se este era o nome de arquivo pretendido:

#!/bin/sh

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

informação relacionada