Cloning Disks And Mounting Disk Images With Debian
Disks can be cloned (byte for byte copy) to other disks or to files (image files) with many tools.
I prefer using the basic tools because they just work very well. Nothing beats the simplicity of some of the basic tools available out of the box with most GNU/Linux distributions.
I recently had to make a full backup of someone’s personal computer and I thought about making my notes publicly available. I have a simple 1 bay USB dock that makes it easy to plug the most common types of drives on my system.
Warning: These tools can be misused and mistakes may cause data loss. Read the manpages if you are unsure about something.
Disable Auto-Mounting
Some desktop environments will offer auto-mounting of partitions as a convenience feature. By default, partitions will be mounted with full read and write capabilities.
If you are using a non-dedicated system for cloning, you may want to disable this feature to prevent issues, especially if the disks are starting to fail. I use the MATE desktop environment so here is how:
gsettings set org.mate.media-handling automount false
Cloning Disks
In this example, we will use the drive /dev/sdc as the disk that needs to be
cloned to an image file (/path/to/my/imagefile.img). I prefer using image
files because I find it is easier to manage them after for archival.
All commands below require administrative permissions, either via sudo or by
running as root.
With DD
DD is a utility
that is part of the GNU core utilities
(coreutils package in Debian).
There is a very strong chance that it will be available on whatever system.
To clone a disk to a file with dd:
dd if=/dev/sdc of=/path/to/my/imagefile.img
More details about the options used:
if=/dev/sdc: read from/dev/sdcinstead of stdinof=/path/to/my/imagefile.img: write to/path/to/my/imagefile.imginstead of stdout
There are a few other options that may be useful, especially for larger disks:
dd if=/dev/sdc of=/path/to/my/imagefile.img bs=32M conv=sync,noerror status=progress
More details about the options used:
if=/dev/sdc: read from/dev/sdcinstead of stdin (same as above)of=/path/to/my/imagefile.img: write to/path/to/my/imagefile.imginstead of stdout (same as above)bs=32M: read and write up to BYTES bytes at a time (default: 512); overridesibsandobsconv=sync,noerror: convert the file as per the comma separated symbol listsync: pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather than NULsnoerror: continue after read errors
status=progress: The LEVEL of information to print to stderr;nonesuppresses everything but error messagesnoxfersuppresses the final transfer statisticsprogressshows periodic transfer statistics (available with coreutils version >= 8.24)
If there are errors during the transfer caused by a failing disk, it is preferable to use DDRescue instead.
With GNU DDRescue
DDRescue is
a utility that is part of the GNU data recovery tool
(gddrescue package in Debian).
This tool is more useful in the case of disks that are starting to fail since
it has a few options that can help with those situations.
ddrescue -d -r3 /dev/sdc /path/to/my/imagefile.img /path/to/my/imagefile-gddrescue.log
More details about the options used:
-d: use direct disc access for input file (short for--idirect)-r3: exit after retry passes (-1=infinity) [0]) (short for--retry-passes=<n>)
However, this can be destructive (and finish off the damaged drive) and ddrescue will rarely restore anything new after three complete passes. If the drive is seriously damaged, we may want to skip the scraping phase:
ddrescue -d -n /dev/sdc /path/to/my/imagefile.img /path/to/my/imagefile-gddrescue.log
More details about the options used:
-d: use direct disc access for input file (short for--idirect) (same as above)-n: skip the scraping phase (short for--no-scrape)
Mounting Disk Images
To mount disk image(s) and any of the partitions within it, we can use the
kpartx tool
(kpartx package part of the multipath-tools source package in Debian).
Mounting partitions without this tool is possible but you need to get the proper offsets when
mounting. kpartx will map image partitions using /dev/mapper which we can
then mount directly instead (let’s say we want to mount the second partition
from the drive we cloned):
kpartx -a /path/to/my/imagefile.img
mount -o loop /dev/mapper/loop0p2 /mnt
When we are done, we can unmount everything:
umount /mnt
kpartx -d /path/to/my/imagefile.img