Optimize dd write performance and progress notification

Updated: October 1, 2025

The title of this article may sound extremely weird to you. Let me explain. DD, or rather, lowercase dd, is a Linux utility that lets you copy data from source to target. Simple, effective. It's great for say writing disk image files to USB media or alike. You can also use it to zero hard disks before disposal. It has many usecases. But, if you don't know how to use it, you might find it frustrating. Notably, it may appear slow, and there doesn't seem to be any progress information (by default).

Today, I'm going to show you a couple of quick tips that will help you make best use of your dd. Notably, how to improve write performance, and how to see the progress of your data writing operations. This will make the experience of dd-ing more enjoyable. So, let's begin, shall we.

Block size

The dd syntax is as follows, in its minimal form:

dd if=inputfile of=outputfile

If you specify no other information, dd will work with the default block size of 512 bytes. In practical terms, this means awful write performance. You could end up waiting long minutes, even hours for writing procedures to finish. During that time, you may also not see any progress information, and the dd command may appear stuck.

The remedy is to specify a different (bigger) block size using the bs parameter. You can go for 1M or 4M, meaning dd will write in chunks of 1 MB or 4 MB. This means fewer file descriptor open/close operations, and if you have sufficient memory, and your storage media is fast enough, you will achieve write rates close to the actual physical limits of your devices.

So, the command now becomes:

dd bs=4M if=inputfile of=outputfile

Progress notification

Newer versions of dd actually let you see how the write operation is going. It can now output an update, including how much data was written, and your transfer rate. The tool will show new information every three seconds (similar to the default top refresh time interval). The command becomes:

dd bs=4M status=progress if=inputfile of=outputfile

Practical example

Here's one. I'm writing the Kubuntu ISO to a new file.

dd bs=4M status=progress if=./kubuntu-24.04.3-desktop-amd64.iso of=./test.dest

The progress looks like this:

Progress 1

Progress 2

And the final command output will look something like this:

dd bs=4M status=progress if=./file.iso of=./test.dest
4433379328 bytes (4,4 GB, 4,1 GiB) copied, 19 s, 233 MB/s
1087+1 records in
1087+1 records out
4560015360 bytes (4,6 GB, 4,2 GiB) copied, 19,8295 s, 230 MB/s

As you can see, the command wrote 1087 records. If you multiple this number by 4M, you will get the exact size of the ISO file. Now, imagine having done that with the default block size of just 512 bytes.

Now, above, you may also note a discrepancy in the number of bytes copied on the first and the last line. Don't let that confuse you. The first line is from the final status update before the completion of the operation. The last line is from the finished copy command. In any case, you can actually compare the two files, make sure their sizes match, and possibly check their SHA256 sum, too.

More correctly, the in-progress output should look like this:

dd bs=4M status=progress if=./file.iso of=./test.dest
4433379328 bytes (4,4 GB, 4,1 GiB) copied, 19 s, 233 MB/s

And then, the final entry:

dd bs=4M status=progress if=./file.iso of=./test.dest
...
1087+1 records in
1087+1 records out
4560015360 bytes (4,6 GB, 4,2 GiB) copied, 19,8295 s, 230 MB/s

Conclusion

This is a fairly simple tutorial, but I think it has some rather important details. If you intend to write large image files to your USB drives, zero your disks or similar, then you want to do this as effectively as possible. A large block size plus the status notification will give you the speed and the control you need. As always, be extremely careful using the dd command. If you mistype the output file, you could damage your disks and destroy your data.

Hopefully, this helps. No more hours waiting for a command to finish, with no knowledge what's happening. No more blocked dd processes with low utilization. Now, you can be fast and furious. Well, that would be all, and if you have any other Linux questions, ping me, and there might be a tutorial in the making. Take care.

Cheers.