md5 hash somente primeiros 512 bytes de arquivo

1

Antecedentes

Estou prestes a migrar arquivos do meu antigo NAS para um novo e quero verificar a integridade dos dados. O antigo NAS (Debian) está usando o sistema de arquivos Linux Ext3, enquanto o novo (FreeNAS) é baseado no ZFS. Para acelerar a validação de integridade, estou tentando usar a abordagem de triagem:

  • primeiro valide todos os tamanhos de arquivo
  • em segundo lugar, md5 hash os primeiros 512 bytes de cada arquivo
  • por último md5 hash arquivo inteiro

A ideia é que os dois primeiros passos filtrariam os arquivos obviamente corrompidos e seriam muito mais rápidos de detectar do que executar md5 em massa para TB de arquivos.

Pergunta

Eu construí um comando bash para executar um hash md5 de uma estrutura de diretório e classificar a saída com base no nome do arquivo para garantir uma ordem determinística no meu Linux NAS.

#find somedir -type f -exec md5sum {} \; | sort -k 34;
12e761f96223145aa63f4f48f252d7fb  /somedir/foo.txt
18409feb00b6519c891c751fe2541fdc  /somedir/bar.txt

Mas como modificar acima se eu quiser md5 apenas os primeiros 512 bytes de cada arquivo?

    
por Jimmy1969 29.02.2016 / 04:01

1 resposta

3

Você pode usar dd para canalizar apenas os primeiros 512 bytes para md5sum . No entanto, isso fará com que md5sum fique inconsciente do nome do arquivo, então, além disso, substitua - pelo nome do arquivo novamente.

find . -type f -exec sh -c "dd if={} bs=512 count=1 2>/dev/null | md5sum | sed s\|-\|{}\|" \; | sort -k 34;
    
por 29.02.2016 / 04:45