Quando o dd é adequado para copiar dados? (ou, quando são lidos () e gravados () parciais) aponta uma advertência importante ao usar count
: dd
pode copiar blocos parciais; portanto, quando fornecido, count
ele será interrompido após o número especificado de blocos, mesmo que alguns deles estejam incompletos. Portanto, você pode acabar com menos de bs * count
bytes copiados, a menos que você especifique iflag=fullblock
.
O tamanho do bloco padrão para dd é 512 bytes. count
é um limite; conforme sua pergunta sugere, não é necessário ao copiar um dispositivo de tamanho finito e realmente pretende copiar apenas parte de um dispositivo.
Eu acho que há dois aspectos a serem considerados aqui: desempenho e recuperação de dados.
No que diz respeito ao desempenho, o ideal é que o tamanho do bloco seja pelo menos igual e múltiplo ao tamanho do bloco físico subjacente (daí 2048 bytes ao ler um CD-ROM). De fato, hoje em dia, você também pode especificar tamanhos de bloco maiores para dar aos sistemas de cache subjacentes a chance de armazenar coisas em buffer para você. Porém, aumentar o tamanho do bloco significa dd
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; é isso que programas como dd-rescue
fazem automaticamente: eles leem blocos grandes inicialmente, mas se um bloco falhar, eles o relerão com tamanhos menores. dd
não fará isso, apenas falhará em todo o bloco.
dd bs=4m iflag=fullblock
vsdd bs=1111
e observe as taxas de dados substancialmente mais altas que o primeiro fornecerá. Isso ocorre porque o primeiro se alinha com o tamanho natural do bloco no cartão SD, enquanto o último requer que o controlador SD faça muita leitura, cópia e atualização para gravar blocos físicos parciais. A importância defullblock
não deve ser subestimada, a propósito, como sem ela,bs
é apenas uma leitura máxima e parcial e pode levar a desalinhamentos subsequentes persistentes.