DD should still send io error notices to stderr which should display for you in the same way the number of blocks copied displays. you should also get an io error in the System log in console.

without the conv, you may see something like this:

dd: /dev/disk0: Input/output error
5+0 records in
5+0 records out
5242880 bytes transferred in 41.363104 secs (126753 bytes/sec)

iirc, if you get say one io error, the records in will not count the bad block, so records in will be smaller than records out. (since it's outputting zeros) BTW, 'records' refers to dd blocks, so 1mb blocksize means each record is 1mb.

That also shows the very long delay that you get from encountering a single io error. If you conv=noerror and it runs into a pack of say, 500 bad blocks, you're in for a long wait. Not all errors take a long time to resolve, but most do.

The error in console will be the same as dd: "/dev/disk0: Input/output error"

does not necessarily mean that my partition has no bad blocks?

Yes and no. Since you didn't see any io error notices, there were no bad blocks in the area you scanned. But if you scanned a diskXsY instead of a diskX, then you skipped other partitions, drivers, partition map, and boot block, so I suppose there could be an error in the skipped space. (tho statistically unlikely)

I also consider "slow blocks" to be errors, as they almost always foretell imminent failure. If you just use the one-liner to read the entire HD, it may encounter many slow blocks on the way but will not inform you and will complete without complaint. The surface scan script intentionally scans in small chunks, timing them, and displays notice if it finds a range of blocks that took too long, making it a much better test.


I work for the Department of Redundancy Department