Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I would like to run a full, sector-by-sector, physical check on some external hard drives. As far as I know,chkdsk does not supply this option.

Is there a workaround under chkdsk, or a good replacement? I'm using Windows 7 on this machine, but Linux solutions applicable from a live CD are also welcome.


Adam Matan

share|improve this question
What OS are you running? Since you mentioned chkdsk, I assume it's Windows NT, XP, Vista, 7, Server 2003, or Server 2008. – rob Nov 6 '09 at 23:14
up vote 25 down vote accepted

In Windows NT/XP/Vista/7, you can open a CMD prompt and use

chkdsk /r x:

where x is the drive letter of your USB drive, assuming the drive is partitioned and has a drive letter assigned to it.

I'd suggest getting an Ubuntu live CD and booting into Linux, then using badblocks to scan for physical defects.

Use sudo fdisk -l to list all the drives and their partitions. For each drive:

sudo badblocks -nvs /dev/sdx

where your hard drive is /dev/sdx. This will perform a non-destructive read/write test on the disk without doing a filesystem check.

If you don't care about the data, you can do this instead, to do a more thorough scan:

sudo badblocks -wvs /dev/sdx

The -w option tells badblocks to write a known pattern, then read back the data to make sure it matches the pattern. It does this 4 times, using the patterns 0xaa, 0x55, 0xff, and 0x00 (alternating 0's and 1's, then all 1's, then all 0's). Note that this will overwrite all data on the drive and wipe out all the partitions, as well.

If you happen to have a Linux filesystem on the drive, you can check for filesystem errors and run badblocks at the same time. First, get the list of all the drives and their partitions:

sudo fdisk -l

Then for each partition:

sudo e2fsck -fcc /dev/sdx#

Again, /dev/sdx is the hard drive you want to scan. # is the number of the partition (e.g., /dev/sdb1). Specifying c twice will force fsck to run, and will use badblocks to do a non-destructive read-write test. If you just use the c option once, badblocks will do a read-only test.

I run badblocks -wvs on every new hard drive I purchase before putting it into service.

share|improve this answer
I don't think chkdsk /r really scans every runs much quicker than I'd expect for something reading every single block. Might want to note the non-destructive test option of badblocks, incase he already has data on the disks. – davr Nov 6 '09 at 23:29
@davr: Thanks; I already mentioned the badblocks non-destructive test in the fsck command, but I've added an explicit badblocks -vs to be thorough. chkdsk /r checks for bad blocks and takes quite a while when I run it, but probably isn't as thorough as badblocks -w. Are you sure you're not thinking of chkdsk /f or chkdsk /p, which will only fix filesystem errors but won't scan for bad blocks? – rob Nov 7 '09 at 0:30
@davr: I did think of one thing...chkdsk probably doesn't check the boot record or partition table. Since it only takes a volume name (i.e., drive letter, mount point, or volume name) as an argument, that suggests you can only check a logical volume for media errors, and everything outside of the specified volume (partition) is ignored. That shouldn't make much of a difference in terms of the scanning speed, though. Is that what you're talking about? – rob Nov 7 '09 at 0:45
Your use of fsck is actually a reference to e2fsck. The stock fsck doesn't include a -c command line arg. Other than, good answer. – DaveParillo Nov 7 '09 at 5:21
Right you are, Dave. Thanks; I've moved the badblocks instructions up front since he's running Windows, but fixed the e2fsck instructions and moved them to the end for anyone who runs across this and is running Linux. – rob Nov 9 '09 at 18:44

I would like to run a full, sector-by-sector, physical check on some external hard drives.

Download and run HD Tune, pick the drive you want to scan from the drop down menu, click the tab Error Scan (make sure the box Quick Scan is clear) and hit Start.

enter image description here

HD Tune is free for personal use and portable (no installation required).

share|improve this answer
Freeware?? 15-day trial! It's just HD Tune that's freeware. – Loren Pechtel Nov 6 '09 at 22:40
apologies, edited the post ... doesn't make much of a difference though because the feature i'm referring to is available in the free version, as you can tell from the screenshot. – Molly7244 Nov 7 '09 at 0:56

Many drive manufactureers like Western Digital and Seagate provide tools that will do this kind of check. Usually a Windows tool.

share|improve this answer
As far as I know, this just runs the SMART self-test, which is not a full drive scan. – endolith Dec 6 '09 at 5:15
endolith- The tests from WD semm to go beyond SMART. Free download so give it a shot if you have WD drive – Dave M Dec 7 '09 at 12:36

On Windows, I'll use the free version of HDTune to scan for bad sectors. However, the Linux program BadBlocks is much better, giving you an exact list of every bad block, and supports both read and write checking (although write is destructive).

share|improve this answer
badblocks also has a non-destructive write test. it reads the block, writes a new value, checks the new value, then writes the original block back. so it wont destroy any valid data on the disk. downside is the extra operations make it run much slower. – davr Nov 6 '09 at 23:28

Any modern drive will automatically remap unreadable/iffy blocks. An OS will normally not get a read failure for a block unless the block is really unreadable, and writing over that block will cause the drive to remap it. That will only fail if the drive is out of spare blocks, in which case it's time to replace the drive!

The upshot is that an OS marking "bad blocks" in the style of scandisk is usually pointless.

With that said, I'd use a SMART extended self test. smartmontools should work. You can also get the number of remapped blocks.

Note that in linux a plaindd if=/dev/sdx of=/dev/null , where sdx is the disk's block device, will do a full logical read of the disk. If any blocks are unreadable you'll get an error. If you don't mind clobbering data you can flip the if and the of to just overwrite the entire disk, causing the drive to remap as necessary.

share|improve this answer
Instead of using 'dd', it's better to use the linux command 'badblocks', which is specifically designed for this task. – davr Nov 6 '09 at 23:26
My point is that "this task" is as obsolete as the concept of a "bad block". – Captain Segfault Nov 7 '09 at 1:53
The hard drive doesn't fix the bad blocks until you write to them. One good way of writing to them is to use badblocks in non-destructive mode. :D – endolith Dec 6 '09 at 5:16
I wish this was true. You are confusing internal disks with USB external disks. USB drive enclosures need better firmware with SMART reporting, which most of them lack. – Nicolay77 Jul 26 '15 at 14:37

I've never been too keen on USB external drives, because they didn't really exist when some of the best tools like ScanDisk were written. I particularly like the version of ScanDisk that comes with Windows 98 SE.

So, if it is an external drive, you should probably put it into a computer and then run fsck -f on the drive from a Linux LiveCD such as the PLD Rescue CD.

share|improve this answer
ScanDisk is obsolete. fsck -f will force fsck to run, but it won't do a physical media test. – rob Nov 6 '09 at 23:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .