Se você tem certeza absoluta de que havia blocos com preenchimento zero, o motivo pelo qual você não salvou espaço foi o buffer grande que você usou. De man dd
:
sparse
try to seek rather than write the output for NUL input blocks
Você usou bs=32M
, então você precisou de todos os 32 MiB de zeros no deslocamento correto para a opção conv=sparse
para fazer seu trabalho apenas uma vez.
A opção bs
define ibs
(tamanho do bloco de entrada) e obs
(tamanho do bloco de saída). Embora o manual mencione blocos de entrada , na verdade é o obs
que importa.
Aqui estão os resultados de alguns testes. (Como eu sou o OP, fiz os testes com o mesmo dispositivo). Cada arquivo é nomeado de acordo com o padrão <obs_used>.img
. Preste atenção na primeira coluna:
$ ls -hlst *.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 4M.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 2M.img
249M -rw-r--r-- 1 root root 250M Oct 18 22:02 1M.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 512K.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 256K.img
247M -rw-r--r-- 1 root root 250M Oct 18 22:00 128K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:57 64K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:56 32K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:55 16K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:54 8K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:53 4K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:52 2K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:51 1K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:44 512.img
A conclusão é: você não deve usar a grande opção obs
with conv=sparse
. O tamanho do setor comum é de 512 bytes, portanto, bs=512
parece correto. Seu comando deveria ter sido:
dd if=/dev/sdb of=myusb.img conv=sparse bs=512