Клонирование SD-карты с помощью команды dd

49

Я пытаюсь клонировать SD-карту, которая может содержать несколько разделов, некоторые из которых Ubuntu не может распознать. Как правило, я хочу клонировать весь том, а не только какой-то раздел. Итак, я монтирую SD-карту и вижу что-то подобное в средстве просмотра журнала:

kernel: [  262.025221]  sdc: sdc1 sdc2

alex@u120432:~$ ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2

Поскольку я хочу скопировать весь диск, я выполняю:

dd if=/dev/sdc of=sdimage.img bs=4M

Создается файл sdimage.img, 7,9 ГБ (7 944 011 776 байт) (SD-карта 8 ГБ). Теперь я подключаю другую SD-карту и выполняю:

dd if=sdimage.img of=/dev/sdc bs=4M

Проблема в том, что вторая команда dd зависает на каком-то этапе и никогда не завершается успешно. После этого я не могу перезагрузить или выключить компьютер, и мне нужно просто выключить питание.

Это правильный подход? Может есть другой способ клонировать SD-карту?

ОС: Ubuntu 12.04 (Precise Pangolin), 32 бит.

Алекс Ф
источник
Можете ли вы смонтировать созданный файл img и посмотреть, правильно ли он создан?
Милан Тодорович
@MilanTodorovic - как я могу это сделать?
Алекс Ф
Если я правильно помню: mount -o loop sdimage.img / path / to / mount. Затем проверьте, правильно ли вы просматриваете файл img.
Милан Тодорович
@MilanTodorovic: Я попробовал sudo mount -o sdimage.img / dev / mydisk и получил: mount: не могу найти / dev / mydisk в / etc / fstab или / etc / mtab. Возможно, мне нужно создать какую-то запись для dev ранее. Можете ли вы опубликовать это как ответ с некоторыми деталями? Благодарю.
Алекс Ф
1
Вы не должны использовать dd на установленных устройствах. сначала размонтируйте все разделы, затем ваша команда должна работать.
ubfan1

Ответы:

30

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

ubfan1
источник
2
почему для меня наоборот? У меня Ubuntu 12.10, и команда работает только с подключенными разделами ...
Luca Davanzo
1
@Velthune Ты уверен в этом? Если это так, я бы предложил сделать свой вопрос.
Виртуальность
26

Вставьте оригинальную SD-карту и проверьте название устройства (обычно mmcblkXили sdcX):

sudo fdisk -l

Вы можете увидеть:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       2048  2099199  2097152    1G  c W95 FAT32 (LBA)
/dev/mmcblk0p2      2099200 31116287 29017088 13.9G 83 Linux

В моем случае SD-карта /dev/mmcblk0( *p1и *p2разделы).

Теперь вам нужно размонтировать устройство:

sudo umount /dev/mmcblk0

Теперь для создания образа устройства:

sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img

Это займет некоторое время.

После завершения вставьте пустую SD-карту. Если устройство отличается (USB или другой тип устройства чтения карт SD), проверьте его имя и обязательно отключите его:

sudo fdisk -l
sudo umount /dev/mmcblk0

Запишите изображение на устройство:

sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0

Операция записи намного медленнее, чем раньше.

Алон Флайдер
источник
4
при копировании больших объемов данных вы должны установить размер блока больше, чем по умолчанию, в противном случае вам, возможно, придется ждать очень долго. sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
xaedes
13

Я использую инструмент dd для клонирования USB-флешек с несколькими разделами, вот моя команда:

sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerror

notrunc - не
обрезать выходной файл noerror - продолжить после ошибок чтения

tommyk
источник
Разве для этого не нужны два устройства чтения SD-карт?
Питер Мортенсен
1
@PeterMortensen да, это так, многие из нас используют эти адаптеры типа 4-в-1.
Teque5
9

дд в порядке, но я предпочитаю, cat /dev/sdc/ > ~/backup.iso если вы хотите снова поставить его на SD-карту, просто запуститеcat ~/backup.iso > /dev/sdc

Vreality
источник
Оба SD имеют 8 ГБ. cat можно использовать для создания образа SD, но для создания другого SD я должен использовать dd, верно?
Алекс Ф
0

Вот шаги, которые работали для меня в Ubuntu, чтобы восстановить файл образа ( ~/raspberrypi2.imgв моем случае) обратно на новую SD-карту (в значительной степени вдохновленный ответом Алона выше):

  1. Вставьте карту micro SD через кардридер.
  2. Откройте приложение Диски.
  3. Быстрое форматирование всей карты (не конкретного раздела).
  4. Закрыть диски.
  5. Откройте терминал и выполните:

    sudo fdisk -l
    

Соответствующий вывод (который показал, что не было разделов из-за быстрого форматирования всей карты):

Disk /dev/sdb: 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: 0x6957f2f2

sudo dd if=~/raspberrypi2.img of=/dev/sdb

Этот шаг занимает несколько хороших минут (даже на USB3). Убедитесь, что не прерываете его никакими операциями, которые будут вызывать монтирование (открытие приложений «Файлы» или «Диски»).

Спасибо за ответы всех.

BoazC
источник