Extra Steps To Speed-Up The Backup Or Restore Of Your Disk Drive Image Using dd And fdisk

Note: This page belongs with an older Knoppix such as versions 5 or 4. If you are using a more up-to-date version such as Knoppix 6, then use the updated How-To.

Using dd without additional options is fine but it can go very slowly for some versions of Linux because it has to make sure it does not try to collect more than it should, therefore a lot of unnecessary checks and tests are done to read data one byte at a time.

To dramatically speed up dd, you should tell it to use the block size option to read data in blocks of 8192 to 65536 bytes (8K to 64K) at a time but you should use a correct value so that you do not over-shoot or under-shoot the correct amount of data.

If you use the fdisk command, you can find the correct block size.


  1. First, you will want to determine the correct dimensions of the harddrive you are going to backup. If you were following the steps mentioned on the other page, your harddrive is likely "/dev/hda" or "/dev/sda".

    When you run fdisk /dev/hda you will want to type p to display the partition table information, and then type q to quit fdisk.

    root@1[mnt]# fdisk /dev/hda
    You will not be able to write the partition table.
    Note: sector size is 2048 (not 512)
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel          
    Building a new DOS disklabel. Changes will remain in memory only,
    until you decide to write them. After that, of course, the previous
    content won't be recoverable.
    Command (m for help): p
    Disk /dev/hda: 730 MB, 730177536 bytes
    255 heads, 63 sectors/track, 22 cylinders
    Units = cylinders of 16065 * 2048 = 32901120 bytes
       Device Boot      Start         End      Blocks   Id  System
    Command (m for help): q

    After running fdisk, from the above you can determine that the harddrive is 730MB in size, that there are cylinders of 16065 made up of blocks of 2048 bytes per block.

    You can keep it simple by using a block size of 2048 (which is a dramatic increase of about 2048), but you can increase the speed slightly further by using a larger block size between 8192 to 65536 bytes in size.

    Looking at the 16065, it appears you can evenly divide it by 5, so 16065 divide by 5 is "3213" which is good, therefore, you can increase the block size by 5 as well, so 2048 x 5 is equal to "10240".

    If you want to increase the speed a little further, it appears you can evenly divide 3213 by 3 to give you "1071" which is also good, therefore, you can increase the block size by 3 as well, so 10240 x 3 is equal to "30720".

    Since you are in the range of 8192 to 65536, there is no need to try improve it more because when the blocks begin to get too large, it will begin to work against you and you may begin to see the transfer speed drop.

  2. Now that you have a value of 2048, or better yet 10240, or even better 30720 (using this harddrive dimensions as an example), now we can use it to define the "block size" for dd.

    You will want to add the "block size" parameter with the value you discovered above, so if you are going to make a backup image, then you will want to include the bs option and type it this way instead:

    root@1[mnt]# dd bs=30720 if=/dev/hda | gzip -c | split -b 638m - /mnt/backup/backup.img.gz. 

    If you are going to make a restoration, then you will want to include the bs option and type it this way instead:

    root@1[mnt]# cat /mnt/backup/backup.img.gz.* | gzip -dc | dd bs=30720 of=/dev/hda