Primeiro, alguns detalhes sobre o comando
dd if=/dev/zero of=jessie-arm64.img bs=1M count=0 seek=5120
Na página man do dd :
if=FILE
read from FILE instead of stdin
of=FILE
write to FILE instead of stdout
bs=BYTES
read and write up to BYTES bytes at a time
count=N
copy only N input blocks
seek=N skip N obs-sized blocks at start of output
Temos count=0
, então 0 bloco de entrada será copiado, mas temos seek=5120
, então 5120 blocos de tamanho obs
serão ignorados. obs
é o tamanho do bloco de saída, no nosso caso não é especificado obs=bs=1M
.
Se você quiser, pode até remover o if=/dev/zero
e obter o mesmo resultado.
dd of=jessie-arm64.img bs=1M count=0 seek=5120
Agora, a questão do valor ideal para bs
, observamos no código-fonte de dd que mesmo se count=0
blocos forem copiados, teremos seek=5120
( seek_records
no código-fonte) e o valor bs
( obs
, output_blocksize
int o código-fonte) será usado.
if (seek_records != 0 || seek_bytes != 0)
{
size_t bytes = seek_bytes;
uintmax_t write_records = skip (STDOUT_FILENO, output_file,
seek_records, output_blocksize, &bytes);
if (write_records != 0 || bytes != 0)
{
memset (obuf, 0, write_records ? output_blocksize : bytes);
do
{
size_t size = write_records ? output_blocksize : bytes;
if (iwrite (STDOUT_FILENO, obuf, size) != size)
{
error (0, errno, _("writing to %s"), quoteaf (output_file));
quit (EXIT_FAILURE);
}
if (write_records != 0)
write_records--;
else
bytes = 0;
}
while (write_records || bytes);
}
}
O valor ideal de bs
depende do seu hardware, aqui está um artigo explicando como medir isso. Eu não irei em explicações detalhadas aqui, porque esta resposta está se tornando muito longa.
Observações:
1) Você pode observar sua imagem em formato hexadecimal com:
cat jessie-arm64.img | xxd
2) Isto é válido para o comando dd do GNU coreutils . Se você estiver usando um comando dd
no estilo BSD, como no macOS, será necessário usar bs=1m
em vez de bs=1M
.