Разобравшись с ответом Уильяма, можно вычислить конец последнего раздела, используя fdisk
и калькулятор:
$ 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
Общее используемое пространство в байтах = конечный сектор последнего раздела X размер сектора (здесь это 3667967 x 512).
Общее использованное пространство в ГБ = общее использованное пространство в байтах / 1024 3 (здесь это 1,749023 ГБ).
Обычно нет необходимости создавать образ, который сравнивается с последним полезным битом данных, поэтому в приведенном выше примере я бы создал образ объемом 2 ГБ, используя метод, описанный Уильямом в том же предыдущем ответе:
dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048
В конце изображения будет помещена небольшая часть бесполезной болтовни после ваших последних полезных данных, но в принципе она ничем не отличается от бесполезной болтовни, которая будет перезаписана при записи изображения обратно на носитель.
Этот метод работал для меня на дюжине или около того клонов. Если в этом методе есть какие-либо фатальные недостатки, они еще не всплыли.