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.