You are on page 1of 3

H2testw -- by Harald Bögeholz / c't Magazin für Computertechnik

Data integrity test for USB sticks and other media


Version 1.4, Copyright (C) 2008 Heise Zeitschriften Verlag GmbH & Co. KG
========================================================================
H2testw was developed to test USB sticks for various kinds of errors.
It can also be used for any other storage media like memory cards,
internal and external hard drives and even network volumes.
The executable file H2testw.exe needs no installation and can be
directly run. It was developed for Windows XP and Vista. It should
also work under Windows 2000 but was only tested on XP and Vista.
Windows 9x/ME is not supported. You can use the older command line
program H2test under these operating systems.
The function of H2testw is quite simple: It fills the chosen target
directory with test data and then reads it back and verifies it.
H2testw does not overwrite or erase any existing data. It doesn't
do any low-level tricks so administrator privileges are not required.
If your hardware is working properly H2testw will not harm any
existing data.
BUT: _If_ the hardware is defective then H2testw is designed to find
that defect and might as a side effect damage existing files.
Therefore: IF YOU SUSPECT A USB STICK OR OTHER STORAGE MEDIA TO BE
DEFECTIVE, EMPTY IT AND TEST IT COMPLETELY WITH H2TESTW. Only empty
media can be fully tested with H2testw. In order to be able to
reproduce the results we recommend to format the media (quick format
will do) and then test it.
H2testw writes files of up to 1 GByte to the chosen destination and
names them 1.h2w, 2.h2w, 3.h2w and so on. If the target directory
alread contains such a set of files H2testw will offer to verify them.
If there are any other files named *.h2w it will refuse to work. In
that case please erase all files *.h2w and hit the Refresh button.
After it is done the software leaves its test files on the medium.
You can erase them if you like or verify them again -- if it's a USB
stick for instance with another PC.
The check box "endless verify" does just that: It puts the verify
routine in an endless loop that stops only if an error is found. This
is meant to be used as a long-time test to find sporadic data transfer
errors.
A remark on the estimated time remaining: For intact flash memory the
estimate should be pretty exact since it has a constant data rate.
With defective media we have seen massive drops in the transfer rate
resulting in the estimate increasing instead of decreasing. Hard
drives are slower on the inner tracks than on the outer tracks so when
testing a hard drive the estimate is never precise.
If you have any questions or suggestions for H2testw please send an
email to Harald Bögeholz <hwb@heise.de> (in German or English).

What to do in case of errors


----------------------------
If H2benchw finds errors while verifying the data it means that the
media has not returned all data exactly as it was written. It is
likely that the media is defective, but there are other possible
causes for data corruption. In case of error you should therefore
repeat the test and
* Format the media immediately before testing
* Don't use USB extension cords
* If testing USB or FireWire devices, try a different port (sometimes
USB ports at the back of the PC are better than those at the front)
* For exteral drives try another cable if possible

Error messages
--------------
When the verifying process detects any errors it outputs some
statistics differentiating the various error types:
* sectors that have been overwritten by others due to addressing
errors (see above)
* sectors that have been altered only slightly (less than 8 differing
bits per sector)
* completely corrupted sectors.
In the case of overwritten sectors H2testw tries to find out how much
real memory exists in the overwritten area and outputs that amount as
"aliased memory" (no guarantee here).
Finally it outputs the offset of the first error with regard to the
total amount of test data along with the expected and found value at
that offset.
Hint: You can copy&paste the error message, for instance to send it in
an email.

Typical errors
--------------
The test data of H2testw is made up so as to be able to discern
certain typical errors. There are three types:
* Addressing errors: When writing a sector its contents are not
written to the correct address but overwrite another sector. We have
seen this error on certain manipulated USB sticks. It also happens
if you use a hard drive larger than 128 GByte on a machine whose
BIOS or OS doesn't know about 48-bit addressing. In this case all
addresses are taken modulo 128 GByte. When crossing the 128 GByte
boundary you overwrite data at the beginning of the drive.
* Data is not saved at all. We have encountered this with defective
USB sticks. Instead of the data written to it a sector returns only
ones or zeroes when reading it. This is typical when accessing
nonexisting memory.
* Only few bits of data are changed. That might happen if the
connection between the PC and the storage media is faulty.

Technical details about the test data


-------------------------------------
H2testw writes data in chunks of 1 megabyte. So even if you choose to
completely fill the media you will end up with up to 1 megabyte of
free space. Although technically not correct H2testw uses the
Windows convention that 1 MByte equals 1024 KByte or 1,048,576 Byte.
In order to avoid problems with the 4 GByte limitation of the FAT file
system, H2testw begins a new data file after each gigabyte (1024
MByte).
Inside a data file each 512-byte sector begins with a 64-bit word (8
byte) containing the offset with regard to the whole data set. It is
stored in little-endian format, least significant byte first.
So the file 1.h2w begins with
00 00 00 00 00 00 00 00,
the next sector with
00 02 00 00 00 00 00 00,
the next with
00 04 00 00 00 00 00 00
and so on. The file 2.h2w begins with
00 00 00 40 00 00 00 00
(offset 1 GByte = 0x40000000).
The rest of each sector is filled with a pseudo random number
sequence using the offset word as a seed.

You might also like