%20%D1%81%D1%8A%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0.png)
У меня естьSD-карта 32 ГБс такой структурой (или очень близкой):
luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 29.2 GiB, 31393316864 bytes, 61315072 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: 0xec4e4f57
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 1 125000 125000 61M c W95 FAT32 (LBA)
/dev/mmcblk0p2 125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3 33292288 61315071 28022784 13.4G 83 Linux
И япередано(с другого компьютера, поэтому устройства, где sda
и sdb
) это к (я выбрал неправильный)SD-карта 64 ГБчерез dd
( dcfldd
, на самом деле):
# dcfldd if=/dev/sda of=/dev/sdb bs=1M
Итак, моя новая SD-карта на 64 ГБ — это:
luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 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: 0xec4e4f57
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 1 125000 125000 61M c W95 FAT32 (LBA)
/dev/mmcblk0p2 125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3 33292288 61315071 28022784 13.4G 83 Linux
Ну, пока проблем нет, но теперь у меня больше нет исходной SD-карты на 32 ГБ, осталась только SD-карта на 64 ГБ, и я хотел бы снова перенести ее на какую-нибудь пустую SD-карту на 32 ГБ.
В этом случае я предполагаю, что не могу использовать dd
илиdcfldd
Что я могу сделать? Могу ли я использовать dd
или dcfldd
? Что может произойти, когда перевод прибудет вГраница 32 ГБна целевой SD-карте (проблемы с целостностью данных)?
Дополнительные примечания:
Любойдругой методклонировать SD-карты было бы нормально, но у меня есть проблема: в данном случае это загрузочный диск SD-карты дляRaspberry Pi 2, и клонирование через
partimage
илиgparted
не сработало (Raspberry не загружается). Толькоdd
кажется, что клонирование выполняется без изъянов.Похожийвопрос, но я думаю, что это не одно и то же.
Инструмент
dcfldd
имеет тот же синтаксис и поведение, что иdd
. Он просто дает больше информации (прогресс... и т.д.). Вотстраница руководства.
решение1
Предположим, что sda — это ваша исходная SD-карта на 64 ГБ, а sdb — ваша целевая SD-карта на 32 ГБ. Вы можете ограничить dd, чтобы копировать только необходимое количество секторов с помощью:
dd if=/dev/sda of=/dev/sdb bs=512 count=61315072
решение2
Я делал это с жесткими дисками много раз: вы просто dd
вставляете большой диск в маленький. Он выйдет из строя, когда достигнет 32 ГБ, но это нормально.
Если у вас все еще есть сомнения, я предлагаю вам попробовать сделать это на старой USB-флешке/жестком диске, которая у вас завалялась.
решение3
Для создания копии можно использовать любой инструмент, например cat
(dd
не имеет никаких преимуществ перед cat
, только недостатки). Он остановится, когда достигнет конца целевого диска. Недостатком этого простого подхода является то, что трудно сказать, была ли копия интересующей вас части успешной.
Чтобы гарантировать, что команда копирования вернет статус успеха, если она успешно скопирует то, что вы хотели скопировать, и выдаст ошибку в противном случае, используйте команду, которая копирует правильный объем данных. Чтобы скопировать первые N байт файла, используйте head -c
. Количество байт для копирования — это количество секторов, умноженное на размер сектора (512 байт в вашем fdisk
списке). Не забывайте, что секторы начинаются с 0 (сектор 0 содержит таблицу разделов), поэтому общее количество секторов для копирования — это наибольшее «конечное» значение плюс один.
head -c $((61315071*512+512)) /dev/sdSOURCE >/dev/sdDESTINTATION
Замените sdSOURCE
и sdDESTINATION
на соответствующие имена устройств. Выполните fdisk -l /dev/sdDESTINATION
и grep sdDESTINATION /proc/partitions
и file -s /dev/sdDESTINATION
и любую другую команду, которую вы считаете полезной, чтобы убедиться, что перезаписываемое вами устройство — это то устройство, которое вы намеревались перезаписать.