How to make a disk image and restore from it later?

Solution 1:

With dd

dd is the low level utility that you can use to accomplish this task. It's essentially a low level byte-for-byte copy utility. If you want the "UNIX" way of accomplishing this, then read on.

All references to the file system and hard disks are located locally on the virtual /dev/ filesystem. There are a multitude of "nodes" in /dev/ that are interfaces to almost all the devices on your computer. For example, /dev/hda or /dev/sda would refer to the first hard drive in your system (hda vs sda depends on the hard drive), and /dev/hda1 would refer to the first partition on your hard drive.

The most straight forward way to make a raw image of your partitions is to use dd to dump the entire partition to a single file (remember the OS access the partitions /dev/sda1 through a file interface). Make sure you are on a larger partition or on a secondary drive and perform the following command:

dd if=/dev/hda1 of=./part1.image to backup(repeat for different partitions) dd if=./part1.image of=/dev/hda1 to restore

You can use the exact same command to back up the entire hard disk (replace hda1 with hda). You can then use any compression program (gunzip, zip, bzip) to compress the file for storage. You can use this same technique to make rote copies of entire partitions to make clones of your computer.

There is one limitation though, when restoring the backup: The partition needs to be the same size (or bigger) as the partition you took the image from, so this limits your options in case of a restore. However, you can always expand the partition after you've restored the backup using gparted or parted. The picture gets even muddier when you are trying to restore entire disk copies. However, if you are restoring the backup to the same exact hard drive, you don't need to worry about this at all.

However, if you want a "friendlier" utility à la Norton Ghost then this suggestion might not be for you.

Solution 2:

It's Clonezilla Live: http://clonezilla.org/

The tutorial for Clonezilla can be found here.

Solution 3:

We have a GUI available in Ubuntu, called 'Disks' (gnome-disks) and comes default in later Ubuntu.

Or

sudo apt-get install gnome-disk-utility

Launch/search as "Disks", or run as gnome-disks.

Also needed are:

  • Gparted

  • A live Ubuntu (or derivatives) live-session usb-stick.


Prepare the partition:

Obviously, a partition cannot be copied while in use: it needs to be unmounted so it doesn't suffer changes during copying (that is self-evident). Therefore, in order to back up your system partition you have to boot in a usb live system - or, as seen in the above image, in a separate (multi-boot) system. The system partition is the one marked with a star. If you try to copy the system partition you get an error soon enough:

enter image description here

Also, one has to take notice that the back-up and the restoration of bootable partitions are both risky procedures and that a back-up of valuable/sensitive data should be first done in a different way (by copying the data instead of the entire partition, etc). - From my experience, this works with Ubuntu system partitions but not with Windows ones.

Optionally, in order to minimize the space taken by the saved image, a partition can be first shrunk (from end, that is from right) so that it would not include the empty space. Here is a post on that: create partition backup image no larger than its files.

Save the partition:

enter image description here

Restore the partition:

Following this answer: How to correctly restore system partition (iso image) with 'Disks'. See the question there. The main idea is that the image (iso) has to be restored onto an existing empty partition that is:

  • formatted

  • un-mounted

  • larger than the saved image

Prepare the restored partition for use:

See the comments under the above linked answer on the fact that Gparted reports the difference of space between the destination partition and the restored one as un-allocated space. That can be fixed with Gparted: select partition and apply "Check" action.

If the restored partition is a system partition that you want to use as the main one:

  • it needs to have enough free space: use Gparted to "Check" (claim the non-allocated space as said before) and enlarge the partition if needed and possible.

  • use grub-repair from a live session in order to install grub. I use this procedure: https://askubuntu.com/a/182863/47206, with some more detail here: https://askubuntu.com/a/326661/47206.