I am trying to clone an SD card which may contain a number of partitions, some of which Ubuntu cannot recognize. Generally, I want to clone the whole volume, not only some partition. So, I mount the SD card and see something like this in the Log viewer:
kernel: [ 262.025221] sdc: sdc1 sdc2
alex@u120432:~$ ls /dev/sdc*
/dev/sdc /dev/sdc1 /dev/sdc2Since I want to copy the whole disk, I execute:
dd if=/dev/sdc of=sdimage.img bs=4MFile sdimage.img, 7.9 GB (7,944,011,776 bytes) is created (SD card is 8 GB). Now I mount another SD card and execute:
dd if=sdimage.img of=/dev/sdc bs=4MThe problem is that the second dd command hangs on some stage, and never succeeds. After this, I cannot reboot or shut down computer, and I need just to switch power off.
Is this the correct approach? Maybe there is another way to clone an SD card?
OS: Ubuntu 12.04 (Precise Pangolin), 32 bit.
115 Answers
Insert the original SD card and check the name of the device (usually mmcblkX or sdcX):
sudo fdisk -lYou might see:
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 LinuxIn my case the SD card is /dev/mmcblk0 (the *p1 and *p2 are the partitions).
Now you have to unmount the device:
sudo umount /dev/mmcblk0Now to create an image of the device:
sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=1M status=progressThis will take a while.
Once it's finished, insert the empty SD card. If the device is different (USB or other type of SD card reader) verify its name and be sure to unmount it:
sudo fdisk -l
sudo umount /dev/mmcblk0Write the image to the device:
sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0 bs=1M status=progressThe write operation is much slower than before.
4You should not be using dd on mounted devices. unmount all the partitions first, then your command should work.
2I am using dd tool to clone usb sticks with multiple partitions, here is my command:
sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerrornotrunc - do not truncate the output file
noerror - continue after read errors
dd is fine, but I prefer cat /dev/sdc/ > ~/backup.isoIf you want to put it on an SD card again, just run cat ~/backup.iso > /dev/sdc
Here are the steps which worked for me on Ubuntu to restore the image file (~/raspberrypi2.img in my case) back to a new SD card (inspired heavily by Alon's reply above):
- Insert the micro SD card via the card reader.
- Open the Disks app.
- Quick format the whole card (not a specific partition).
- Close Disks.
Open terminal and execute:
sudo fdisk -l
Relevant output (which showed there were no partitions due to the quick format of the whole card):
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: 0x6957f2f2sudo dd if=~/raspberrypi2.img of=/dev/sdbThis step takes a few good minutes (even on USB3). Make sure to not interrupt it by any operation which will invoke mounting (opening the Files or Disks apps).
Thanks for everyone's answers.