(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? : /