I followed these DebianEeePC HowTo InstallUsingStandardInstaller instructions at the Debian Wiki, to write a Debian ISO to my USB.

dd if=debian-*-netinst.iso of=/dev/sdX

Using sha1sum, I can check the checksums of my downloaded ISO file. How can I check the checksum of the USB stick device, to be sure that the USB stick does not have any problems and that the ISO was copied perfectly?

  • USB is universal serial bus. Surely you mean some sort of device attached to that bus (like a flashdrive, ethernet or sound card)? May 12, 2013 at 10:19
  • @StephaneChazelas, edited the question. May 12, 2013 at 13:12

4 Answers 4


You can use cmp for checking if everything was copied fine:

$ cmp -n `stat -c '%s' debian-X-netinst.iso` debian-X-netinst.iso /dev/sdX

This solution does not explicitly compute the checksum of your /dev/sdX - but you don't need to do that because you have already done this for the source of the comparison (i.e. debian-X-netinst.iso).

Doing just a dd if=/dev/sdX | sha1sum may yield a mis-matching checksum just because you get trailing blocks (/dev/sdX is most likely larger than the iso-file).

Via cmp -n you make sure that no trailing bytes on your /dev/sdX are compared.

If you are paranoid about the quality of your USB mass storage device you call blockdev --flushbufs /dev/sdX, eject it, re-insert it and then do the comparison - else all or some blocks may just come from the kernels VM (cache) - when in reality perhaps bits on the hardware are screwed up.

  • 2
    Hey there! When I do this, I receive instant mismatch at the very first line. What can be the cause?
    – SarpSTA
    Mar 24, 2018 at 22:40
  • why one should use -n switch to "compare at most LIMIT bytes"? sudo cmp a b is not enough to verify all corruption?
    – 16851556
    Dec 23, 2021 at 11:11
  • @16851556 the -n switch is necessary because your USB stick device is likely larger than the written ISO image. Thus, without it, cmp would always report a failed comparison, because it reads some trailing bytes out of /dev/sdX which aren't present in the ISO file. Dec 23, 2021 at 11:24
  • thx, and for file to file (not file to drive) comparison one can use "sync;cmp a b", "sync;md5sum a b" or "sync;diff -b a b" or maybe just run rsync with --checksum switch i assume.
    – 16851556
    Dec 25, 2021 at 9:47

Julien's answer does the job but there is a simpler and faster way to do this:

sudo head -c <image size> /dev/sdX | sha1sum
  • 2
    So, in a single line: head -c $(stat -c '%s' the.iso) /dev/sdc | sha1sum Jan 16, 2018 at 11:22

Just using dd and md5sum / sha1sum is enough, but as previously said, be carefull, your device is not of the same size than your file, so sums will differ.

Here how you still can do it

First you'll need to know the size of the file:

$ stat -c '%s' debian-live-8.2.0-amd64-lxde-desktop.iso

Then, to be cool with your syscalls, you better get this as a multiple of a nice power of two like 4096, the multiplication of the two HAVE TO yield exactly the size of the file, in other ways, you'll check too few or too many bytes, yielding a wrong checksum.

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096

I'm happy, 4096 × 244992 = 1003487232 so 4096 is good for me, (and will for you, probably) so I can use a block size of 4096 (typical) and a bloc count of 244992.

Don't forget to write the file on the USB key...

$ dd if=debian-live-8.2.0-amd64-lxde-desktop.iso of=/dev/sd? && sync

And know, using the known block size and the block count, you can read the exact number of bytes from the key and check them:

$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum

(Yes md5sum is way faster than sha1sum but that's clearly not your bottleneck here, the bottleneck is the USB thoughput, thanks for noticing).

Or, in short:

dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum
  • Thanks with $ dd if=/dev/sdb1 bs=4096 count=<filesize/4096> | md5sum I could check the md5sum of a Debian image written to a usb stick and compare it to Debian md5sums. Sep 7, 2017 at 8:31

Based on @Kyle Jones answer

diff <(md5sum debian-XYZ-netinst.iso | awk '{print $1}') <(dd if=/dev/sdX | md5sum | awk '{print $1}')

you should use md5sum because it's faster than sha1sum (this will save time when you check big file)

  • 6
    You mean md5sum is at least twice as fast? It has to be since the OP already has the sha1sum from the download site and does not have to calculate that. And reading from USB is going to be limiting factor not the sha1/md5 calculation.
    – Anthon
    May 12, 2013 at 5:20
  • 1
    I'm running ZFS with SHA-256 checksumming on a processing-power-wise mid-range system. Even during scrubs (which reads all data and verifies all checksums) on pools residing on spinning rust, the limiting factor is disk I/O throughput, not CPU. I doubt many USB memory sticks will sustain a much better throughput than that, particularly if it's connected over USB 2.0.
    – user
    Oct 29, 2013 at 8:59
  • What about sync && md5sum "/path/to/srcfile" "/path/to/dstfile" ? (sync - Synchronize cached writes to persistent storage", both resulting hash must be same, else file is not identic) then: umount /usb/drive
    – 16851556
    Dec 23, 2021 at 12:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.