Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I have a disk image, it's a "whole" disk image, e.g., contains multiple partitions, and I want to clone just one of them (not the first one..) onto a partition on an external drive with multiple partitions on it (I'm also not cloning it onto the first partition of the disk...)

FDisk'ing the image gives this:

# fdisk -l 2013-02-09-wheezy-raspbian.img 

Disk 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 bytes
255 heads, 63 sectors/track, 235 cylinders, total 3788800 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: 0x00014d34

                         Device Boot      Start         End      Blocks   Id  System
2013-02-09-wheezy-raspbian.img1            8192      122879       57344    c  W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2          122880     3788799     1832960   83  Linux
#

and the block device looks like this:

# fdisk -l /dev/sdc

Disk /dev/sdc: 8014 MB, 8014266368 bytes
247 heads, 62 sectors/track, 1022 cylinders, total 15652864 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048      131071       64512    e  W95 FAT16 (LBA)
/dev/sdc2          131072    15652863     7760896   83  Linux
#

I want the second partition of the image to replace the second partition of the block device. Don't worry about the trailing corrupted free space, I'll use GParted to clean that up, and I need it for something else anyway.

share|improve this question
    
specify exactly where you want your partition to be cloned and where your image files are! –  fromnaboo Apr 21 '13 at 10:15
add comment

2 Answers

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

If --partscan doesn't work, you can also use one of:

# partx -a /dev/loop7
# kpartx /dev/loop7

or similar partition mapping solutions.

You should probably mount it first just to see if it's the right thing or what.

Of course you can also read the fdisk output and give dd the skip=131072 or whatever directly, i.e. make it skip that many blocks of input so it starts reading at where the partition is located; but it's nicer to see actual partitions with a loop device.

share|improve this answer
    
Your losetup command didn't work - it said unrecognized option --find. I removed that, it said it didn't recognize --show. Taking that off caused it to complain about --partscan, at which point I realized that command wasn't going to do anything for me anytime soon. I decided to try the others, but both partx and kpartx return "command not found". –  JamesTheAwesomeDude Apr 20 '13 at 22:45
    
I would just run dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, but that returns dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument. –  JamesTheAwesomeDude Apr 20 '13 at 22:49
1  
skip depends on bs, so if you used bs=1M (or have an alias that does this), that'd explain why it doesn't work. try with bs=512. Also, why 122880 when fdisk says 131072? Also my losetup is losetup from util-linux 2.22.2. same for partx. kpartx is from multipath-tools (used device mapper). –  frostschutz Apr 20 '13 at 23:49
    
kpartx is for LVM. partprobe will also do the job, from the parted package. –  psusi Apr 21 '13 at 2:18
    
@frostschutz That was 12280 bytes from the start of the image file. –  JamesTheAwesomeDude Apr 22 '13 at 21:30
show 1 more comment

Something like this should work:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

if= sets the image you want to clone

of= sets the target partition where you want to clone the image

share|improve this answer
1  
I got the expected error: dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory –  JamesTheAwesomeDude Apr 20 '13 at 22:31
    
did your replace /path/to/2013-02-09-wheezy-raspbian.img2 with your real path to the image file? :| –  fromnaboo Apr 21 '13 at 8:39
1  
*facepalm* Yes, I just appended the 2 to the end, like you said to. –  JamesTheAwesomeDude Apr 22 '13 at 21:28
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.