After building my new PC, I wanted to backup the old drive to an image. This way, if I needed any files, I could mount the image and retrieve anything I needed. I connected a USB backup drive to my laptop, pulled the drive out of the old PC, and connected the old drive to my laptop with this.
After plugging everything in, you can see the output of lsblk.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 298.1G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 128M 0 part /boot └─sda3 8:3 0 298G 0 part └─VolGroup00 254:0 0 298G 0 crypt ├─VolGroup00-lvolswap 254:1 0 8G 0 lvm [SWAP] ├─VolGroup00-lvolroot 254:2 0 25G 0 lvm / └─VolGroup00-lvolhome 254:3 0 265G 0 lvm /home sdb 8:16 0 465.7G 0 disk └─sdb1 8:17 0 465.7G 0 part /run/media/logan/Passport sdc 8:32 0 232.9G 0 disk ├─sdc1 8:33 0 100M 0 part ├─sdc2 8:34 0 144.9G 0 part /run/media/logan/9E80926180923FA7 └─sdc3 8:35 0 87.9G 0 part /run/media/logan/FAMILY_DOCS sr0 11:0 1 1024M 0 rom
In this case, my laptop’s internal drive is /dev/sda, my backup drive is /dev/sdb, and my source drive (from the old PC) is /dev/sdc. Note, there are three partitions on /dev/sdc and I want to backup all of them.
I was planning on using dd, which does block-level copying. This means I can copy all the files on the drive, as well as the filesystem itself, to a single image file (similar to an ISO file for a DVD). The typical dd command looks something like below, using an input file (if) and output file (of).
sudo dd if=/dev/sdc of=/run/media/logan/Passport/20141126_old_downstairs.img
Be careful when using dd! It’s sometimes called disk destroyer, as you can easily wipe the wrong drive if you have your if and of mixed up.
Unfortunately, dd doesn’t show a progress bar or its current speed, so I’m going to be using pv as well.
sudo pacman -S pv
Now I can do something like this, and pipe dd through pv.
sudo dd if=/dev/sdc | pv | of=/run/media/logan/Passport/20141126_old_downstairs.img
However, according to the manual, pv can be used to create an image file itself (without using dd).
sudo pv -p -r -t -e -EE /dev/sdc > /run/media/logan/Passport/20141126_old_downstairs.img
-p = shows progress bar
-r = shows current transfer rate (average transfer rate is -a)
-t = shows timer
-e = shows ETA
-EE = skips errors
Below is what you’ll see when you use pv in the form above.
[logan@Arch ~]$ sudo pv -p -r -t -e -EE /dev/sdc > /run/media/logan/Passport/20141126_old_downstairs.img 00:17 [31.3MiB/s] [> ] 0% ETA 0:36:22
The downside to dd or pv is that since they’re doing block-level operations, they aren’t aware of free space. The image you make will be exactly the size of the hard drive you’re backing up. To save space, you could use gzip to compress the image.
sudo pv -p -r -t -e -EE /dev/sdc | gzip -v > /run/media/logan/Passport/20141126_old_downstairs.img.gz
To restore the image to a blank drive, we’ll simply reverse the backup command.
sudo pv -p -r -t -e -EE /run/media/logan/Passport/20141126_old_downstairs.img > /dev/sdc
Mount and browse
If you don’t want to restore the image to a disk just to retrieve a file, you can mount the image on your machine and browse through the filesystem. Since we know our image has three partitions, we need to find out where the partitions begin and end. We can do that using parted.
sudo pacman -S parted
Use parted to list all the partitions on your image file.
sudo parted /run/media/logan/Passport/20141126_old_downstairs.img unit B print
From this output, you can see where each partition begins and ends.
Model: (file) Disk /run/media/logan/Passport/20141126_old_downstairs.img: 250059350016B Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1048576B 105906175B 104857600B primary ntfs boot 2 105906176B 155685224447B 155579318272B primary ntfs 3 155686273024B 250057064447B 94370791424B primary ntfs
Now you can mount each partition based on its beginning location.
sudo mkdir /mnt/partition1 sudo mkdir /mnt/partition2 sudo mount -o loop,ro,offset=105906176 /run/media/logan/Passport/20141126_old_downstairs.img /mnt/partition1 sudo mount -o loop,ro,offset=155686273024 /run/media/logan/Passport/20141126_old_downstairs.img /mnt/partition2
Then, browse to /mnt and you should be able to access the partitions of your old drive to retrieve any files.
drwxrwxrwx 1 root root 8192 Nov 7 22:13 partition1 drwxrwxrwx 1 root root 4096 Nov 7 22:13 partition2