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

2

Eu encontrei de Essa postagem no Stackoverflow , se você quiser apenas obter uma lista de arquivos correspondentes cujo conteúdo seja diferente, então você pode executar:

diff  --brief --recursive dir1/ dir2/

... e tentando 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 BIG, 2TB por exemplo), e eu queria verificar se o backup é o mesmo que o original (por exemplo, eu quero verificar se o backup foi bem-sucedido ), o que devo executar, se estou interessado apenas em quais arquivos NÃO estão disponíveis em nenhum dos lados? Eu quero algo que verifica as árvores de diretório FAST (não verificando 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 são de conteúdo de filmagem durante o comando de comparação ajudaria.

(Minhas desculpas por repostar uma pergunta muito semelhante, mas notei um usuário argumentando que a questão talvez estivesse fora do tópico, então essa questão definitivamente estaria no stackoverflow.)

Alguma experiência sobre isso?

    
por Florian Mertens 13.09.2013 / 19:02

3 respostas

3

Uma solução não-rsync que verifica o tempo de 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 foo foi modificado em dir1 e bar existe apenas em dir2 .

    
por 13.09.2013 / 20:03
3

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

Todas as outras coisas NÃO são iguais, rsync -nav --delete <backup> <original> seria minha sugestão.
Este faz verificar o conteúdo, e irá informá-lo sobre arquivos extras, arquivos diferentes e arquivos ausentes. Não é tão profundo (lento) como diff , e o -n significa que ele não vai realmente tocar no sistema de arquivos.

    
por 13.09.2013 / 19:51
0

Como resultado das respostas acima, criei o seguinte pequeno script que queria 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 os mesmos, e que os arquivos têm os mesmos tamanhos e os mesmos nomes, sem qualquer falta.

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

Este script não está terminado, há, sem dúvida, outros, melhores, mais rápidos e mais detalhados, com mais ferramentas de verificação por aí. Mas eu pensei que iria compartilhá-lo de qualquer maneira.

    
por 15.09.2013 / 21:45