Data loss will be costly. At the very least, critical data loss will have a financial impact on companies of all sizes. In some cases, it can cost your job. I’ve seen cases where sysadmins learned this in the hard way.
There are several ways to backup a Linux system, including rsync and rsnapshot that we discussed a while back.
This article provides 6 practical examples on using dd command to backup the Linux system. dd is a powerful UNIX utility, which is used by the Linux kernel makefiles to make boot images. It can also be used to copy data. Only superuser can execute dd command.
Warning: While using dd command, if you are not careful, and if you don’t know what you are doing, you will lose your data!
Example 1. Backup Entire Harddisk
To backup an entire copy of a hard disk to another hard disk connected to the same system, execute the dd command as shown below. In this dd command example, the UNIX device name of the source hard disk is /dev/hda, and device name of the target hard disk is /dev/hdb.
# dd if=/dev/sda of=/dev/sdb
- “if” represents inputfile, and “of” represents output file. So the exact copy of /dev/sda will be available in /dev/sdb.
- If there are any errors, the above command will fail. If you give the parameter “conv=noerror” then it will continue to copy if there are read errors.
- Input file and output file should be mentioned very carefully, if you mention source device in the target and vice versa, you might loss all your data.
In the copy of hard drive to hard drive using dd command given below, sync option allows you to copy everything using synchronized I/O.
# dd if=/dev/sda of=/dev/sdb conv=noerror,sync
Example 2. Create an Image of a Hard Disk
Instead of taking a backup of the hard disk, you can create an image file of the hard disk and save it in other storage devices.There are many advantages to backing up your data to a disk image, one being the ease of use. This method is typically faster than other types of backups, enabling you to quickly restore data following an unexpected catastrophe.
# dd if=/dev/hda of=~/hdadisk.img
The above creates the image of a harddisk /dev/hda. Refer our earlier article How to view initrd.image for more details.
Example 3. Restore using Hard Disk Image
To restore a hard disk with the image file of an another hard disk, use the following dd command example.
# dd if=hdadisk.img of=/dev/hdb
The image file hdadisk.img file, is the image of a /dev/hda, so the above command will restore the image of /dev/hda to /dev/hdb.
Example 4. Creating a Floppy Image
Using dd command, you can create a copy of the floppy image very quickly. In input file, give the floppy device location, and in the output file, give the name of your floppy image file as shown below.
# dd if=/dev/fd0 of=myfloppy.img
Example 5. Backup a Partition
You can use the device name of a partition in the input file, and in the output either you can specify your target path or image file as shown in the dd command example below.
# dd if=/dev/hda1 of=~/partition1.img
Example 6. CDROM Backup
dd command allows you to create an iso file from a source file. So we can insert the CD and enter dd command to create an iso file of a CD content.
# dd if=/dev/cdrom of=tgsservice.iso bs=2048
dd command reads one block of input and process it and writes it into an output file. You can specify the block size for input and output file. In the above dd command example, the parameter “bs” specifies the block size for the both the input and output file. So dd uses 2048bytes as a block size in the above command.
Note: If CD is auto mounted, before creating an iso image using dd command, its always good if you unmount the CD device to avoid any unnecessary access to the CD ROM.
Comments on this entry are closed.
I recommend using ‘dd’ on unmounted/readonly devices only. You never know what changes in the middle of this kind of backup. Dd doesn’t lock your filesystem. It will read and write blindly and if you don’t know what you are doing, well…
Will this work with a hard drive with both Windows and
Linux on it?
You can backup a usb key with dd
Thanks for nice examples.
When and why should i use synchronized I/O?
How should i find optimal block size?
I would like to share one of many hacks to know the “status” of dd copy progress.
Send the dd command to background
# dd=if=/dev/sda of=backup.img &
 26431 <——– Process ID
Check the process ID and run the next command:
# kill -SIGUSR1 26431
This will shows the copied bytes and the copy rate.
It’s a really useful post, but I think it should be noted that dd is used just to copy files, and not to make backups, because a backup tool has a lot more functionality, like different backup levels, automation of backups and some kind of database storing related data (files saved, operator who run the backup, etc).
This is not very much related to dd, but I thought you’s like to know that your example 5 has a bash-ism that I’m not entirely sure is a bug or a feature. Most other shells won’t expand the ~ to $HOME like bash does for that particular command. Zsh has an option MAGIC_EQUAL_SUBST to let you choose either way.
Regarding example 5.
what if ~ is on /dev/hda1 🙂
Another useful tip:
In this case for copying the Master Boot Sector:
dd if=/dev/hda of=disk.mbr count=1 bs=512
It copies 1 chunk of 512 bytes which is the amount of info that the MBR of the disk takes.
and for restoring the MBR:
dd if=disk.mbr of=/dev/hda
It overwrites the first 512 bytes of your /dev/hda drive.
Just another command that I use to do afterwards for saving the partitions:
sfdisk -d /dev/hda > disk.sf
It dumps the partitions of the /dev/hda disk to a text file, which you’ll be able to recover easily.
sfdisk /dev/hda < disk.sf
Thanks a lot…..
mistake with the device names here:
In this dd command example, the UNIX device name of the source hard disk is /dev/hda, and device name of the target hard disk is /dev/hdb.
# dd if=/dev/sda of=/dev/sdb
Be VERY VERY careful about the source and destinations, if= and of=
If you make a mistake and put the wrong source/destination as if/of, you WILL lose your data and recovery becomes very annoying. Possible, but annoying, such as losing all your filenames and filesizes.
dd if=/dev/zero of=/dev/sda bs=512 count=1
Despite that is a comment about to use dd command to backup (and restore) dual boot partitions with Windows and Linux inside (I didn’t see any repply about it), may I use dd command to backup a HD with one Partition only containning a windows system 64bit and after to create two partitions, restore the windows operational system on the first partition of the HD?
I have a problem and I hope you can help me. I have to add two hard disks on a linux server. The first is the primary disk and the second is the backup disk. How to make the second hard drive to work when the first hard drive stop to work or break down? i fond a solution for windows but I need one for linux.
You have an error in your ‘dd’ example:
For syncronized IO and no halt on errors:
$ dd if=/dev/sda of=/dev/sdb iflag=noerror oflag=sync
conv=sync merely pads the output to ibs size
Nice examples. I just want to know if i can take the complete backup (Disk image). when the system is online. eg: i have 1 hdd running centos 5.8 and will insert an external HDD of same size and take the backup when the system is in production.
2. if my HDD is 250 GB and used is 150 GB will the backup size is 250 GB or 150 GB.? is it same for partition backup and HDD backup…?
I tried dd if=/dev/sda of=/dev/sdb and its keep on running from last one hour and my used space of hdd is only 8 gb. Do i need to stop it manually.
Hello, this is very important information about back
wow….now only i get more hope to study unix…. in high level thank you so much…
What about data integrity when dd on running machine ?
To backup my Linux partitions, I combine dd and gzip, e.g. to back up my Ubuntu root partition which is on /dev/sda5:
dd if=/dev/sda5 bs=4096 | gzip -c > sda5-root.img.gz
Performance of the compression can be improved by creating & deleting a file from /dev/zero before doing the backup, e.g.
dd if=/dev/zero of=zero.bin bs=4096
In the example (1), the command :
# dd if=/dev/sda of=/dev/sdb conv=noerror,sync
does not do synchronized I/O, to do this the option iflag=sync or oflag=sync should be used.
while making a general ISO of a 3-4 GB dvd disk. how much ‘bs’ to use. Please describe the use of it.
thanks nice article which help great to backup disk and then restore that data. again thanks
I want to copy segy from tape to disk using DD commands
I have multiple files on input and I want same names on output
can some one advise me please
How to copy multiple img files to single img file. For example, I have 4 virtual hard disks (a.img, b.img, c.img, d.img), if I need to copy the contents of a.img, b.img, c.img to single disk d.img. is it possible using dd, if so , please let me know
i have 5 files iso (from oracle linux 6.5 ) that i have to put or ( burn ) into one usb flash drive .
which way is correct.
#dd if = file1.iso,file2.iso,file3.iso,file4.iso,file5.iso of = /dev/sdb
or one by one ..
or ..? not possible
thanks a lots
Great Sir, it is really help information.
can i store the Image of HDD in NAS? Can i restore the same image on the other server which was having different specifications ?
To copy multiple img file into single file, i’d rather use tar .
tar -cf outfile.tar a.img b.img c.img d.img
or, to include compression as well:
tar -cjf outfile.tar.gz a.img b.img c.img d.img
Joe I think the “j” flag in tar cjf means compress as bzip2, just a heads up, anyone wanting to use gzip should use the “z” flag instead tar czf
you are the best
excellent site to learn unix commands
I wanted to save the IMG file directly on the NAS is that possible?