Como posso copiar e verificar um arquivo enquanto faço a cópia?

1

(Ainda outra questão de "copiar e verificar" ...)

Eu tenho uma quantidade razoável de dados que desejo copiar entre vários HDDs, e quero ter absoluta certeza de que os dados serão copiados corretamente.

Minha abordagem de cópia atual tem sido bastante padronizada, copiando e depois verificando (com sha256). Eu não gosto dos passos extras e do tempo envolvido - 30 a 60 minutos para a soma de verificação é o suficiente para interromper o fluxo, e tenho que trabalhar mais para garantir que eu não tenha perdido nenhuma etapa e verificado tudo corretamente.

Por isso, estou procurando especificamente um processo de cópia e verificação de etapa única.

No entanto, não quero reler o arquivo copiado do cache de disco , pois isso invalidaria o ponto de verificação !!

Estou preparado para escrever minha própria ferramenta para o trabalho, se for absolutamente necessário, mas eu adoraria ouvir de alguém que ecoa as visões aqui e que já escreveu uma ferramenta como a que estou descrevendo.

No Linux, também sei que posso matar o cache de disco com echo 3 > /proc/sys/vm/drop_caches . Mas fazer isso a cada poucos kilobytes ou até mesmo megabytes é absolutamente certo para matar o desempenho de I / O. Essa técnica específica também não é geralmente portátil, então eu realmente não quero arquivá-la como minha solução para esse problema.

Eu sei que o fsync(file); fdatasync(file); fsync(dir); fdatasync(dir) é provavelmente um bom ponto de partida (o exagero é bom aqui), mas temo que ele mate o throughput sequencial de streaming?

Minha idéia atual é fazer a cópia de leitura / gravação enquanto eu também tenho o arquivo de destino aberto 256MB atrás de onde o read / write está pronto, então está bem fora do alcance do onboard do HDD controlador e cache de RAM e, em seguida, ler e verificar sequencialmente a partir dessa localização $ copypoint-256MB.

Eu poderia fazer um footwork sofisticado com O_SYNC | O_DIRECT e obter ambas as velocidades aceitáveis e boas garantias de que meu read-back está recebendo dados dos discos?

Ou ... o write-then-verify é apenas a melhor maneira de lidar com o status quo muito abaixo do ideal que é o sistema operacional "moderno", os controladores HDD e o design de E / S de arquivo seguro? : /

    
por i336_ 22.08.2018 / 16:06

1 resposta

0

Você poderia cat do arquivo de origem e canalizá-lo para tee para salvá-lo no destino e, simultaneamente, canalizar a saída para sha256sum . Dessa forma, você não precisa reler a fonte para calcular seu hash. Se você quiser garantir que o destino seja lido novamente no disco em vez de no cache, use dd com a opção iflag=direct .

    
por 22.08.2018 / 18:58