Verifique a exatidão dos arquivos copiados

13

Depois de copiar, digamos 50 ou mais GB (30.000 arquivos, incluindo formatos diferentes) de arquivos de um disco rígido interno para um drive externo. Existe alguma maneira de descobrir se tudo foi copiado corretamente? Além disso, se eu parar no meio cancelando a operação e depois dizer mesclar ao continuar a operação, a correção será afetada?

Eu poderia usar aplicativos como back-in-time , mas sou muito exigente ao copiar arquivos e, da próxima vez, pretendo usar copy operation e dizer merge em vez de replace . É aconselhável ao copiar um grande número de arquivos?

    
por Chethan S. 28.04.2011 / 11:33

5 respostas

14

Estou usando o hashdeep para verificar backups / restaurações e, ocasionalmente, verificar se há corrupção do sistema de arquivos em um RAID.

A velocidade depende de quais funções hash você usa (algumas são mais intensivas na CPU do que outras), bem como a velocidade de leitura de seus discos. No meu sistema hashdeep pode processar ou verificar em torno de 1 TB / hora com velocidade de leitura md5 e 300 MB / s.

Exemplo sobre como calcular somas de verificação e armazená-las em um arquivo:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Parâmetros:

  • r - recursivo
  • l - use caminhos relativos
  • c - especifica a função hash
  • . - recursiva a partir do diretório atual
  • > - redireciona a saída para o arquivo especificado

Veja a página de manual .

Exemplo sobre como verificar somas de verificação e imprimir uma lista de diferenças:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Parâmetros:

  • a - audit (compare com a lista de somas de verificação conhecidas)
  • v - verbose (para obter uma listagem de incompatibilidades, vários v s significa mais detalhado)
  • k - arquivo de hashes conhecidos

Observe que, a partir de março de 2016, o hashdeep parece ser abandonado .

    
por j-g-faustus 28.04.2011 / 21:09
12

Parece a tarefa perfeita para o rsync . O Rsync está comparando e copiando os diffs.

O utilitário rsync apareceu em minha mente quando vi sua pergunta. Fazer algo como abaixo pode mostrar rapidamente quais arquivos estão no diretório a , mas não em b :

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Esta é uma boa opção porque você pode comparar o conteúdo dos arquivos também para garantir que eles correspondam. O algoritmo delta de rsync é otimizado para esse tipo de caso de uso. Então, se você quiser que b corresponda ao conteúdo de a , basta remover a opção -n para realizar a sincronização real.

Algumas perguntas relacionadas:

por ddeimeke 28.04.2011 / 12:01
8

Se os aplicativos da GUI forem sugeridos em Ferramenta de comparação de arquivos e diretórios? don ' Não faça isso por você, tente diff -rq /path/to/one /path/to/other para recurse através de ambos os diretórios silenciosamente, registrando apenas as diferenças para a tela.

    
por Amanda 28.04.2011 / 14:07
3

A situação que você está dizendo é muito complexa. Embora você possa escrever um script para calcular o MD5 de todos os arquivos que deseja copiar e, posteriormente, compará-los com os arquivos copiados:

Se você quiser algo simples e rápido (não funcionará em cenários muito complexos), use Meld

sudo apt-get install meld
    
por puneet 28.04.2011 / 13:36
0

No "se tudo foi copiado corretamente", eu uso um cp modificado (ou mv) que inclui checksum (opcionalmente armazenado em xattr, portanto, ele só precisa ser calculado uma vez para a origem) link

    
por Hans 05.02.2015 / 14:26

Tags