Search code examples
linuximagedd

How to create an .IMG image of a disc (sd card) without including free space?


In Linux, we can do

dd if=/dev/sdb of=bckup.img

but if the disk is of 32GB with only 4GB used, the 32GB image file is waste of space-time. Is there any way or tool to create images with only valid data?


Solution

  • The best thing to do is

    1. Copy all the files from all the partitions preserving meta data

      mkdir -p myimage/partition1

      mkdir myimage/partition2

      sudo cp -rf --preserve=all /media/mount_point_partition1/* myimage/partition1/

      sudo cp -rf --preserve=all /media/mount_point_partition2/* myimage/partition2/

    2. Extract the MBR

      sudo dd if=/dev/sdX of=myimage/mbr.img bs=446 count=1

      replace /dev/sdX with the corresponding device.

    3. Partition the destination disk into partitions with sizes greater than copied data and should be of the same format and same flags using gparted. Google how to partition a disk.

    4. Mount the freshly formatted and partitioned disk. On most computers, you just need to connect the disk and you can find the mounted partitions in /media folder.

    5. Copy the previously copied data to destination partitions using following commands

      sudo cp -rf --preserve=all myimage/partition1/* /media/mount_point_partition1/

      sudo cp -rf --preserve=all myimage/partition2/* /media/mount_point_partition2/

    6. Copy back the MBR

      sudo dd if=myimage/mbr.img of=/dev/sdX bs=446 count=1

    Now njoy Ur new disk!