O que 'Verificar disco' realmente faz após a gravação para verificar os dados?
O recurso "verificar disco" é ótimo para garantir que o disco recém-gravado tenha saído bem, mas como funciona exatamente? O post de perguntas e respostas do SuperUser de hoje tem a resposta para a pergunta de um curioso leitor.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
Foto cedida por cobalt123 (Flickr).
A questão
SuperUser reader user1301428 quer saber como os discos são verificados depois de serem gravados:
O que verificar disco após a gravação realmente fazer para verificar os dados? Eu imagino que é algum tipo de comparação entre os arquivos originais e os arquivos que foram gravados no disco, mas alguém sabe como é realmente feito em um nível baixo?
Quer dizer, ele cria um hash do conteúdo de origem e de destino e compara-os? Em caso afirmativo, armazena o hash do conteúdo gravado na RAM? Ou salva em um arquivo temporário no disco rígido? Existe um arquivo de log do que está acontecendo?
Apenas curioso para saber exatamente como esse recurso funciona. E estou me referindo ao Windows Image Burner.
Como funciona o processo de verificação de disco??
A resposta
Os contribuidores do SuperUser, Frank Thomas e Synetech, têm a resposta para nós. Primeiro, Frank Thomas:
Verifique estas páginas MSDN na API do Windows para a interface IBurnVerification e o enum IMAPI_BURN_VERIFICATION_LEVEL.
Para discos de dados, parece que no modo rápido ele não soma o disco inteiro, apenas uma seleção de setores. Em seguida, ele garante que as chamadas de API READ_DISC_INFO e READ_TRACK_INFO sejam bem-sucedidas no novo disco.
Para verificação completa, ele executa as verificações acima e, em seguida, faz uma soma de verificação completa na última sessão no novo disco em relação a uma soma de verificação computada no fluxo de memória que está sendo gravado. As somas de verificação devem ser armazenadas em memória RAM, mas provavelmente são valores de vida curta. Observe que a comparação é contra a imagem do disco na RAM, não a própria mídia de origem, portanto, se os dados de origem não forem lidos corretamente, eles serão gravados incorretamente. A verificação não detectará isso.
Para discos de música, ele se concentra na verificação de READ_TRACK_INFO e no índice de disco, mas não executa um cálculo de soma de verificação. Não há modo de verificação completo para música.
Seguido pela resposta da Synetech:
Frank explicou muito bem a verificação específica do Windows. Vou dar uma resposta mais geral.
- O que Verificar disco após a gravação realmente faz para verificar os dados?
- Quer dizer, ele cria um hash do conteúdo de origem e de destino e compara-os? Em caso afirmativo, armazena o hash do conteúdo gravado na RAM? Ou salva em um arquivo temporário no disco rígido? Existe um arquivo de log do que está acontecendo?
Essa é certamente uma maneira de uma comparação ser implementada: um arquivo hash (esperançosamente com uma baixa chance de ler um algoritmo de colisão suficientemente grande), repetir para o outro e comparar hashes. Se é assim que uma verificação é implementada, então você poderá ver o flash do drive-LED por algum tempo, depois o flash do CD / DVD-LED por um tempo.
Outra maneira de implementar a verificação é ler um bloco de um arquivo, depois o mesmo bloco do outro arquivo, compará-los e repetir até o final do arquivo ser atingido. Neste caso, você verá os LEDs das duas unidades alternando para frente e para trás.
É claro que, se o disco rígido e a unidade óptica não tiverem LEDs, isso não será tão óbvio. Mas você ainda pode vê-lo com algo parecido com o ProcessMonitor porque ele registra uma série de leituras de um, depois o outro, seja em uma única grande explosão ou em pequenas explosões alternadas..
- Eu imagino que é algum tipo de comparação entre os arquivos originais e os arquivos que foram gravados no disco, mas alguém sabe como é realmente feito em um nível baixo?
Na verdade, tudo o que realmente faz é liberar o cache da unidade para que a função de comparação esteja lendo os dados do disco real e não do cache de memória. Obviamente, este é um passo crítico, porque se a verificação é feita a partir do cache, então ele não representa o que está realmente no disco, então a corrupção pode facilmente passar.
Você pode ver se uma comparação é feita a partir da unidade ou do cache na RAM pela rapidez com que ocorre. Se você fizer manualmente uma comparação simples (por exemplo, com WinDiff, WinMerge ou hashing com uma ferramenta de hashing), você notará que a comparação acontece muito mais rápido do que o esperado porque está lendo os arquivos do cache de memória. Você deve liberar o cache para forçá-lo a ler a partir do disco real. Para unidades ópticas (e outras mídias removíveis como flash-drives e cartões de memória), basta ejetar a unidade é suficiente para limpar o cache, mas para discos rígidos, não é tão simples (embora geralmente isso não importa, porque nova cópia é a que você quer testar).
Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.