Por que o 'dd' produz arquivos diferentes para o mesmo stick USB?

4

Acabei de salvar a restauração do Windows 8.1 em um pen drive USB; agora, venho criando a cópia baixo nível dele no meu disco rígido, executando o seguinte comando:

sudo dd if=/dev/sdf of=/disk2/Archive/windows8.1-restore.img bs=4M oflag=direct

Eu queria verificar que meu comando 'dd' estava ok, então executei novamente duas vezes, especificando bs=8M e bs=16M ; Eu verifiquei o tamanho e é exatamente o mesmo, mas md5sum dá uma saída diferente para os três arquivos:

c38a2b07b3d473d3f1876331edc2647b  windows8.1-restore.img.4M
568e382844431eef63d4ba6dc4c2c5ac  windows8.1-restore.img.8M
568e382844431eef63d4ba6dc4c2c5ac  windows8.1-restore.img.16M

Eu acredito que eu desmontei o pendrive na segunda e terceira vez.

Eu deveria estar preocupado com alguma coisa?

editar

O tamanho total do arquivo é 31024349184 bytes em todos os casos, meu entendimento de bs=xxx é apenas controlar a velocidade no caso de alguém querer despejar todo o sitck / drive USB.

    
por Emanuele 01.02.2015 / 12:29

1 resposta

8

Escrever pequenas quantidades de dados em uma unidade é lento, portanto, os buffers do sistema gravam para confirmá-los todos de uma vez mais tarde. Quando o buffer contém dados suficientes para uma operação de gravação eficiente ou quando algum processo usa sync system call , o buffer é liberado para o dispositivo.

dd executa uma cópia de baixo nível, ou seja. lê dados que estão fisicamente presentes em um dispositivo. Não leva buffers em conta.

Se a unidade foi montada quando você executou dd bs=4M , é possível que algumas gravações já estivessem armazenadas em buffer, mas não confirmadas. Você despejou a unidade sem alterações no buffer.

umount chama sync internamente para garantir a integridade dos dados. Dispositivos não montados geralmente não são acessados, a menos que você peça explicitamente algum processo para fazê-lo, então é improvável que a unidade mude após a desmontagem.

Então você executou dd duas vezes na unidade sem montá-lo no meio. É por isso que bs=8M e bs=16M chamadas produziram os mesmos resultados.

O drive foi modificado entre as chamadas bs=4M e bs=8M , portanto, o primeiro dump é diferente. bs= não importou, chamando umount did.

Você deve sempre desmontar o dispositivo antes de usar dd , caso contrário, algum outro processo poderá modificar seu conteúdo enquanto dd estiver fazendo seu trabalho e quebrar a integridade do arquivo.

    
por 01.02.2015 / 12:54

Tags