Могу ли я использовать dd для клонирования большей SD-карты на меньшую SD-карту, если фактические разделы подойдут?

9

У меня есть 16 ГБ SD-карта, на которой есть несколько разделов (на самом деле это карта для Raspberry Pi). У меня есть несколько других карт на 4 ГБ, к которым я хочу клонировать основную карту. 3 раздела на основной карте:

  • Загрузочный раздел Rasp, FAT, 60 МБ
  • Раздел Linux, ext2, 1 ГБ
  • Дополнительный раздел для хранения, FAT, 1 ГБ

Если я использую ddдля создания изображения карты с помощью:

dd if=/dev/sdb of=~/sd-card.bin

тогда результирующий .bin имеет размер 16GB. Есть ли способ использовать ddдля копирования только то, что на самом деле используется, то есть <4 ГБ, чтобы я мог затем ddэто на новую карту 4 ГБ? Или есть лучшее решение, которое я должен использовать?

Чарли Шлиссер
источник
Я закончил тем, что создал точное содержимое на новой карте 4 ГБ и клонировал это с ddколичеством других карт. Тем не менее, хотелось бы узнать, возможно ли решить начальную проблему.

Ответы:

9

Я полагаю, что вы используете для копирования копию Linux, или Mac, а не сам Raspberry Pi. Вам, вероятно, нужно будет добавить размер блока.

Я видел один и четыре мегабайта, используемые для дисков Raspberry pi, указав bs = 1M или bs = 4M. Я думаю, что размер блока важнее при записи на диск, поскольку большие передачи выполняются быстрее, чем меньшие. Это не устанавливает размер блока для диска, а только влияет на размер передач, используемых dd. Одной из причин установки большого размера блока является необходимость стирания вспышки перед ее записью. Это делается автоматически, но быстрее для передач, размер которых превышает минимальный размер стирания.

Вы можете ограничить общий объем данных, скопированных dd, используя «count». «количество» в единицах блоков. Если конец последнего раздела на исходном диске меньше размера места назначения, вы можете делать то, что хотите.

Нечто подобное dd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000создаст изображение размером 4000 МБ.

См. Http://en.wikipedia.org/wiki/Dd_(Unix) и http://elinux.org/RPi_Easy_SD_Card_Setup для получения дополнительной информации. Не уверен, как найти конец последнего раздела или общий размер карты. Однако, если вы отформатировали диски, вы, вероятно, знаете, как это сделать.

Уильям Дж. Бэгшоу
источник
Спасибо за информацию. Я не знал о варианте подсчета. Я попробую.
@charlie было бы интересно, если бы вы могли попробовать это с опцией подсчета и без нее и отчитаться. Обязательно проверьте, как сообщается размер диска, можно ли добавить на него файлы, и размер изменится. потому что при сбое dd, связанном с дисками разного размера, возникают такие проблемы. Вот пример, где я перепутал dd с двумя дисками разных размеров. superuser.com/questions/538583/difficulty-resizing-a-partition В конце концов, я не использовал dd, чтобы сделать клон.
Barlop
3

Разобравшись с ответом Уильяма , можно вычислить конец последнего раздела, используя 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

В конце изображения будет добавлена ​​небольшая часть бесполезной болтовни после ваших последних полезных данных, но в принципе она ничем не отличается от бесполезной болтовни, которая будет перезаписана при записи изображения обратно на носитель.

Этот метод работал для меня на дюжине или около того клонов. Если в этом методе есть какие-либо фатальные недостатки, они еще не всплыли.

Crumeniferus
источник