Quando o dd é adequado para copiar dados? (ou, quando são lidas () e escritas () parciais) aponta uma ressalva importante ao usar count
: dd
pode copiar blocos parciais, então quando dado count
ele irá parar após o número dado de blocos, mesmo que alguns dos blocos estivessem incompletos. Você pode, portanto, acabar com menos de bs * count
bytes copiados, a menos que você especifique iflag=fullblock
.
O tamanho de bloco padrão para dd é de 512 bytes. count
é um limite; Como sua pergunta sugere, não é necessário copiar um dispositivo de tamanho finito e, na verdade, destina-se a copiar apenas parte de um dispositivo.
Acho que há dois aspectos a serem considerados aqui: desempenho e recuperação de dados.
No que diz respeito ao desempenho, você deseja idealmente que o tamanho do bloco seja pelo menos igual a, e um múltiplo, do tamanho do bloco físico subjacente (portanto, 2048 bytes ao ler um CD-ROM). Na verdade, hoje em dia você pode também especificar tamanhos de bloco maiores para dar aos sistemas de cache subjacentes uma chance de armazenar em buffer as coisas para você. Porém, aumentar o tamanho do bloco significa que dd
precisa usar muito mais memória, e pode ser contraproducente se você estiver copiando em uma rede devido à fragmentação de pacotes.
No que diz respeito à recuperação de dados, você pode recuperar mais dados de um disco rígido com falha se usar tamanhos de bloco menores; isto é o que programas como dd-rescue
fazem automaticamente: eles lêem blocos grandes inicialmente, mas se um bloco falhar, eles o relêem com tamanhos de bloco menores. dd
não fará isso, apenas falhará no bloco inteiro.