В комментарии к RooTer вы упоминаете, что A) вы уменьшили первоначальный размер раздела gparted
, но dd
все равно копируете всю карту, и B) вы хотите включить оба раздела в образ.
Проблему «А» легко объяснить: вы все еще копируете всю карту, потому что это то, к чему /dev/mmcblk0
относится. Отдельные разделы есть конечно /dev/mmcblk0p1
и /dev/mmcblk0p2
. Это сложность в проблеме «B», но вы не можете просто dd
объединить каждый раздел и объединить два файла из-за таблицы разделов, в начале /dev/mmcblk0
которой указываются начало и длина каждого раздела. Без этого изображение будет непригодным для использования.
Однако вы можете получить длину каждого раздела fdisk -l
и использовать ее для определения некоторых параметров dd
. Например:
> fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 16.1 GB, 16138633216 bytes
4 heads, 16 sectors/track, 492512 cylinders, total 31520768 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
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 26746879 13312000 83 Linux
Единицы «Начало» и «Конец» являются секторами, и обратите внимание на размер сектора, 512 байт. Для /dev/mmcblk0p2
, 26746879 (последний сектор) - 122880 (первый сектор) = 26623999/2 (для 2 секторов на кБ) / 1024 (КБ на МБ) / 1024 (МБ на ГБ) = 12,69, которые я увеличил с помощью gparted до 12 ГБ, так что это выглядит правильно (на самом деле я должен использовать 1000, а не 1024 в качестве делителя с хранилищем, которое работает до 13,31 ГБ, но я подозреваю, что gparted и некоторые другие инструменты также используют 1024).
Итак, первое, что вы хотите проверить, это то, что ваш второй раздел действительно меньше установленного вами размера. Далее просто используйте эти числа с dd
; для меня это было бы:
dd if=/dev/mmcblk0 of=rpi.img bs=512 count=26746880
У меня там есть дополнительный сектор, чтобы избежать какого-либо непонимания того, как dd
работает. Есть простой способ проверить, сработало ли это:
> fdisk -l rpi.img
Disk rpi.img: 102 MB, 102400000 bytes
255 heads, 63 sectors/track, 12 cylinders, total 200000 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
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
rpi.img1 8192 122879 57344 c W95 FAT32 (LBA)
rpi.img2 122880 26746879 13312000 83 Linux
Обратите внимание, что здесь есть небольшое расхождение: сектора «Начало» и «Конец» соответствуют исходной таблице разделов, но общий размер в верхней части статистики составляет всего 102 МБ! Это потому, что я на самом деле использовал count=200000
в качестве параметра, dd
потому что я действительно не хотел беспокоиться о копии 12 ГБ (обратите внимание также «всего 200000 секторов»). Причина, по которой таблица внизу не отражает это, заключается в том, что fdisk получает свою информацию из данных раздела, скопированных дословно в начале изображения с начала SD-карты, что, как я упоминал во втором абзаце, является жизненно важным поддерживать. Если бы я (правильно) скопировал все остальное, числа были бы одинаковыми, и изображение было бы жизнеспособным.
Дайте это попробовать. :)