Comando tar para obter arquivos para backup periódico

Comando tar para obter arquivos para backup periódico

Qual comando tar devo usar para alterar os arquivos após uma determinada data - incluindo alterações de propriedade, permissões, etc. - mas excluindo arquivos que foram simplesmente restaurados do backup?

Por outro lado, seria preferível percorrer todos os arquivos após uma restauração e alterar o horário de mudança de status de cada um como parte da restauração?

Tenho usado um comando semelhante ao seguinte para tar todos os arquivos modificados recentemente desde uma determinada data para backup periódico do pobre:

$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -

Este não é o comando real, mas ilustra o que estou tentando enfatizar. Este comando simplesmente despeja a lista de arquivos que deveriam ir para o arquivo tar se eu estivesse enviando a saída para um arquivo tar.

Até agora, pensei que este comando estava funcionando bem até substituir meu disco rígido e restaurar todos os arquivos do backup. Olhando para a saída de stat, parece que a data da alteração é a data em que restaurei todos os arquivos do backup, então agora todos os arquivos estão sendo selecionados no meu comando tar acima.

$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500

Mesmo --newer-mtimenão parece ajudar:

$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -

ATUALIZAR:Eu tentei o seguinte também, e isso também não pareceu ajudar em nada, pois ainda selecionou mais arquivos do que eu queria:

$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -

Responder1

Filtrando diretórios:

$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'

Vejo que os arquivos que eu queria capturar estão realmente sendo capturados e nada mais.

Por alguma razão, tar captura todos os diretórios sem levar em conta o carimbo de data e hora, mas acho que posso conviver com isso, então o comando acima ainda funciona na maioria das vezes e é por isso que não vi nenhum problema com ele até restaurar meu backup.

Agora com relação à restauração, afirmei que isso configura o atributo Change em cada arquivo restaurado; portanto, --after-datefoi inútil porque meu próximo backup acabou obtendo todos os arquivos.

Para superar isso, pela primeira vez apenas após a restauração, passei a usar --newer-mtime:

$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -

Isso me permite obter todos os novos arquivos desde a restauração e pretendo usar o original --after-datenovamente, começando com o próximo backup.

Isso tem uma desvantagem, conforme descrito abaixo: se houver alguma alteração de permissão ou propriedade entre o momento em que restaurei os arquivos e meu primeiro backup, não vou atender isso e provavelmente nunca o farei, a menos que esses mesmos arquivos tenham suas permissões/propriedade alteradas novamente, e então só receberei a atualização naquele momento e todos os meus backups até esse ponto seriam restaurados com as permissões/propriedade erradas.

OManual do alcatrão GNUafirma o seguinte:

O status de um arquivo é considerado alterado se seu conteúdo tiver sido modificado ou se seu proprietário, permissões e assim por diante tiverem sido alterados.

Não tenho certeza do que significa "e assim por diante", mas também estou perdendo isso.

Dado o que estou apoiando aqui, não estou preocupado com isso, então estou bem desta vez; no entanto, nos casos em que me importei com isso, eu poderia jogar fora meus backups incrementais e começar tudo de novo com um novo backup completo ou poderia concluir meu processo de restauração com um backup incremental seguindo as etapas acima usando --newer-mtimeimediatamente após a restauração . O último aconteceria antes que as pessoas começassem a usar os arquivos restaurados, então obtenho um bom backup incremental antes de voltar para o --after-date.

informação relacionada