Existe um comando copiar e verificar no Ubuntu / Linux?

23

Eu faço backup de todas as minhas fotos digitais em alguns lugares. Eu tenho usado o comando cp, mas - dado o valor pessoal - comecei a me perguntar se há uma maneira mais confiável. Eu não sou estranho ao Linux, Bash, Perl, etc., então eu poderia escrever algo para copiar e comparar os hashes MD5, mas queria saber se já existe algo (reinvenção, rodas e outras coisas).

A maior parte do meu Google para copiar e (verificar | válido | verificar | hash | confirmar) aumenta o rsync. No entanto, até onde eu sei, o rsync usa apenas hashes para verificar se um arquivo precisa ser atualizado. Não realiza uma comparação de hash posteriormente.

Para esse uso, especificamente, os arquivos são binários e geralmente de 8 a 10 MB. Todas as recomendações de utilitários ou orientações para soluções de bricolage seriam muito apreciadas.

N13
fonte
Que tal uníssono ? É usado para sincronização bidirecional, mas certamente verifica a soma de verificação de um arquivo.
taper

Respostas:

19

De man rsync, na -copção:

-c, --checksum: pula com base na soma de verificação, não no tempo e tamanho da modificação

Observe que o rsync sempre verifica se cada arquivo transferido foi reconstruído corretamente no lado receptor, verificando uma soma de verificação de arquivo inteiro que é gerada à medida que o arquivo é transferido, mas essa verificação automática após a transferência não tem nada a ver com essa opção. antes da transferência "Este arquivo precisa ser atualizado?" Verifica.

icyrock.com
fonte
7
Algumas pessoas descobriram que o manual do rsync é enganoso sobre a verificação padrão de pós-cópia: unix.stackexchange.com/a/66702/148560 Parece que não existe essa verificação. Para verificar todas as cópias, você precisa fazer outro rsync com a opção --checksum, eles dizem.
Rotareti 28/01
5

Há vários anos, eu tinha as mesmas exigências que você. A solução que escolhi foi usar o ZFS por meio do driver ZFS-FUSE no meu servidor de armazenamento. Meu pensamento era que minhas fotos pessoais, documentos digitalizados e outros arquivos semelhantes eram coisas que eu só podia acessar ocasionalmente, por isso pode levar muito tempo, digamos um ano ou mais, antes de perceber que um arquivo foi corrompido devido a um erro na unidade ou algo parecido.

A essa altura, todas as cópias de segurança que possuo podem ser esta versão apodrecida em bits do (s) arquivo (s).

O ZFS possui um benefício sobre o RAID-5, pois ele pode detectar e reparar erros nos dados armazenados nos discos individuais, mesmo que as unidades não relatem um erro de leitura durante a leitura dos dados. Ele detectará, através de somas de verificação, que um dos discos retornou informações corrompidas e usará os dados de redundância para reparar esse disco.

Devido à maneira como a soma de verificação é projetada no ZFS, senti que podia confiar neles para armazenar dados usados ​​com pouca frequência por longos períodos de tempo. Toda semana eu executo um "zpool scrub" que passa e relê todos os dados e verifica as somas de verificação.

O ZFS-FUSE teve um desempenho muito bom para mim nos últimos anos.

No passado distante, para um cliente, implementei um sistema de banco de dados que armazenava informações de soma de verificação em todos os arquivos armazenados em um diretório específico. Eu tinha outro script que seria executado periodicamente e verificaria o arquivo na soma de verificação armazenada no banco de dados. Com isso, poderíamos detectar rapidamente um arquivo corrompido e restaurar a partir de backups. Basicamente, estávamos implementando o mesmo tipo de verificação que o ZFS realiza internamente.

Sean Reifschneider
fonte
Por que o voto negativo? Como nenhum comentário foi deixado, presumo que seja um "-1, discordo". :-)
Sean Reifschneider
... mas então: em que parte é discordada? Embora talvez seja um pouco estranho para a pergunta, isso parece sólido para mim. Então, espero que o voto negativo tenha sido por "não responder à pergunta", em vez de nos deixar alheios a alguma falha real no exposto acima ...
Arjan
Percebi hoje de manhã que estava assumindo que o gelo estava perguntando por causa de preocupações com a podridão dos bits, que era minha preocupação. Mas talvez seja de alguma forma diferente. Embora eu não possa imaginar qual seria o caso de uso, isso mudaria o conteúdo do arquivo legitimamente sem alterar o horário do arquivo.
Sean Reifschneider
Acho que a preocupação do OP era a corrupção de dados em trânsito. Você copia um arquivo e a cópia acaba sendo diferente do original.
Jon Bentley
btrfs? que tem somas de verificação e é nativo ...
Dmitry Kudriavtsev
1

Encontrei este utilitário (Linux e Windows) que faz exatamente o que você deseja (cópia com hash + verificação com log com hash): http://sourceforge.net/projects/quickhash/

A única desvantagem é que ela existe apenas como uma GUI (sem acesso à linha de comando)

Desde a v1.5.0, uma pasta de origem selecionada pode ser dividida em hash e, em seguida, copiada e reconstruída em uma pasta de destino onde o conteúdo é novamente dividido em hash para verificação. Desde a versão 1.5.5, as máscaras de arquivo selecionadas também podem ser usadas (* .doc; * .xls etc.).

2072
fonte
0

se você estiver copiando o arquivo localmente (como está implícito na sua referência em cpvez de scpetc), apenas cmpos arquivos de origem e de destino ... mas realisticamente, se cpnão estiver emitindo algum tipo de erro (na linha de comando ou no o valor de retorno da execução), não há motivo para acreditar que não está funcionando.

se você realmente deseja um backup legitimamente redundante, considere uma solução remota como o dropbox .

Brad Clawsie
fonte
+1. Não está claro por que essa resposta foi recusada, pois fornece (o que me parece) uma solução perfeitamente válida para o problema, embora exija dois comandos em vez de um.
Jon Bentley
Você realmente precisará escrever um script com um loop para usar esta resposta, pois ela não leva em consideração vários arquivos e pastas.
Gringo Suave