Verifique a correção dos arquivos copiados

14

Depois de copiar, digamos mais de 50 GB (30.000 arquivos, incluindo diferentes formatos) de arquivos de um disco rígido interno para um disco 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 disser mesclar ao continuar a operação, a correção será afetada?

Eu poderia usar aplicativos como, back-in-timemas sou muito exigente ao copiar arquivos e, na próxima vez, pretendo usar a copyoperação e dizer em mergevez de replace. É aconselhável ao copiar um grande número de arquivos?

Chethan S.
fonte
2
você pode encontrar uma resposta aqui .
Takkat

Respostas:

16

Eu estou usando hashdeep para verificar backups / restaurações e ocasionalmente para verificar a corrupção do sistema de arquivos em um RAID.

A velocidade depende de quais funções de hash você usa (algumas consomem mais CPU do que outras), bem como da velocidade de leitura de seus discos. No meu sistema, é hashdeeppossível 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 - especificar função hash
  • . - recursivo começando no diretório atual
  • > - redireciona a saída para o arquivo especificado

Veja a página do manual .


Exemplo na verificação de somas de verificação e impressão de 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 - auditoria (compare com a lista de somas de verificação conhecidas)
  • v- detalhado (para obter uma lista de incompatibilidades, múltiplo vs significa mais detalhado)
  • k - arquivo de hashes conhecidos

Observe que em março de 2016 hashdeepparece ter sido abandonado .

jg-faustus
fonte
14

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

O rsyncutilitário me veio à mente quando vi sua pergunta. Fazer algo como abaixo pode mostrar rapidamente quais arquivos estão no diretório, amas não no 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

Essa é uma boa opção, pois você também pode comparar o conteúdo dos arquivos para garantir que eles correspondam. rsyncO algoritmo delta do é otimizado para este tipo de caso de uso. Então, se você deseja fazer a bcorrespondência com o conteúdo a, basta remover a -nopção para executar a sincronização real.

Algumas questões relacionadas:

ddeimeke
fonte
1
O rsync é definitivamente a ferramenta para este trabalho, mas não compara e copia as diferenças, por si só. Ele compara os arquivos usando tamanhos e hashes.
Justin Força
@JustinForce Usando tamanho? Certamente, tamanhos diferentes garantem que o arquivo não seja exatamente o mesmo, mas o rsync é muito versátil; pode opcionalmente confiar em metadados (como o tempo) para evitar a leitura de todos os arquivos. Ao copiar pela rede, ele calcula um hash rotativo para detectar partes comuns finas para evitar transferi-las, mas na unidade local, por padrão, os hashes não desempenham esse papel (se usado). Você pode até pedir para confiar que um destino mais curto já possui conteúdo correto e só precisa ser anexado, mas vamos continuar no tópico.
Stéphane Gourichon
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 copiados:

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

sudo apt-get install meld
puneet
fonte
0

No "se tudo foi copiado corretamente", eu uso um cp (ou mv) modificado que inclui soma de verificação (opcionalmente armazenada no xattr, portanto, ele só precisa ser calculado uma vez para a fonte) http://sourceforge.net/projects / crcsum /

Hans
fonte
1
Embora sua resposta seja 100% correta, também é quase impossível para um usuário iniciante implementar. Portanto, edite sua resposta e inclua as etapas sobre como baixar, compilar, instalar e desinstalar crccpna sua resposta! ;-) Você pode sempre deixar o link no na parte inferior da sua resposta como uma fonte para o seu material ...
Fabby