Dado um sistema de arquivos original e de backup, como posso descobrir se algum arquivo está faltando?

Dado um sistema de arquivos original e de backup, como posso descobrir se algum arquivo está faltando?

eu encontrei deesta postagem no Stackoverflow, se você quiser apenas obter uma lista de arquivos correspondentes cujo conteúdo é diferente, poderá executar:

diff  --brief --recursive dir1/ dir2/

... e tentando fazer isso sozinho, isso fornece uma pequena lista de arquivos cujo conteúdo é diferente.

Mas se eu fiz um backup de um sistema de arquivos original (suponha sistemas de arquivos GRANDES, 2 TB, por exemplo), e queria verificar se o backup é igual ao original (por exemplo, quero verificar se o backup foi bem-sucedido), o que devo executar, se estiver interessado apenas em quais arquivos NÃO estão disponíveis em nenhum dos lados? Quero algo que verifique as árvores de diretórios RÁPIDO (sem verificar o conteúdo).

Embora a comparação do tamanho do arquivo não forneça uma indicação absoluta sobre se o arquivo de backup é diferente, comparar esse e outros metadados que não sejam de conteúdo de arquivo durante o comando de comparação ajudaria.

(Peço desculpas por repassar uma pergunta muito semelhante, mas notei um usuário argumentando que a pergunta talvez estivesse fora do assunto, então essa pergunta definitivamente estaria no stackoverflow.)

Alguma experiência sobre isso?

Responder1

Uma solução não rsync que verifica o horário da modificação e o tamanho do arquivo:

diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'

Exemplo de saída:

> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep  8 23:01:02.0355432619 2013 347

Mostra que foofoi modificado dir1e barsó existe em dir2.

Responder2

Você não nos diz qual solução de backup usa, mas quase todos os programas de backup reais têm um modo de “verificação”. (Uma ferramenta de backup "real" neste contexto é algo como o Bacula, software projetado expressamente para backup e restauração).
Todas as outras coisas sendo iguais, eu sugeriria usar um software de backup real e suas ferramentas de verificação integradas.


Todas as outras coisas NÃO sendo iguais, rsync -nav --delete <backup> <original>seria minha sugestão.
Essefazverifique o conteúdo e informará sobre arquivos extras, arquivos diferentes e arquivos ausentes. Não é tão profundo (lento) quanto um diff, e isso -nsignifica que não afetará realmente o sistema de arquivos.

Responder3

Resultante das respostas acima, criei o seguinte pequeno roteiro, que gostaria de compartilhar:

# vi /bin/checkbackup

#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp

# chmod 755 /bin/checkbackup

Uso:

$ checkbackup /path/to/dir1 /path/to/dir2

Nenhum relatório significa que a estrutura e os nomes das pastas são iguais e que os arquivos têm os mesmos tamanhos e nomes, sem falta alguma.

Testado em árvores de diretório de 1,5 TB em discos SATA2 5400rpm, termina em aproximadamente 5 minutos.

Este script não está de forma alguma concluído, sem dúvida existem outros, melhores, mais rápidos e mais aprofundados com mais ferramentas de verificação por aí. Mas pensei em compartilhar de qualquer maneira.

informação relacionada