Expandindo a resposta de William , é possível calcular o final da última partição usando fdisk
e uma calculadora:
$ fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 186367 184320 90M c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 3481600 1.7G 5 Extended
/dev/mmcblk0p5 188416 3667967 3479552 1.7G 83 Linux
Espaço total usado em bytes = setor final do tamanho da última partição X setor (aqui são 3667967 x 512).
Espaço total usado em GB = espaço total usado em bytes / 1024 3 (aqui é 1,749023 GB).
Normalmente, não é vital criar uma imagem que seja reduzida até o último bit de dados útil, portanto, no exemplo acima, eu criaria uma imagem de 2 GB usando o método descrito por William na mesma resposta anterior :
dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048
No final da imagem, será incluída uma pequena parte do lixo inútil após seus últimos dados úteis, mas isso não difere em princípio do que o lixo inútil que será substituído quando você gravar a imagem novamente na mídia.
Esse método está funcionando para mim em uma dúzia de clones. Se houver falhas fatais nesse método, elas ainda não foram encontradas.
dd
uma quantidade de outros cartões. Ainda assim, gostaria de saber se é possível resolver o problema inicial.