H2testw -- by Harald Bgeholz / c't magazine voor computer techniek
Integriteitstest voor usb-sticks en andere gegevensdragers
Versie 1.4, copyright (C) 2008 Heise Zeitschriften Verlag GmbH & Co. KG
========================================================================

H2testw is gemaakt om de goede werking van usb-sticks te controleren. 
Daarnaast is de tool geschikt voor andere gegevensdragers als 
geheugenkaarten, interne en externe harde schijven en zelfs 
netwerkschijven.

De Duits-/Engelstalige toepassing H2testw.exe, dat oorspronkelijk werd
ontwikkeld voor Windows XP en Vista, werkt direct zonder te hoeven worden
genstalleerd. Het werkt simpel: de geselecteerde locatie wordt 
volgeschreven met testbestanden, die daarna weer worden gelezen. 
Daarbij wordt gecontroleerd of de gelezen bestanden overeenkomen 
met degene die ervoor werden geschreven. 

In principe overschrijft of verwijdert H2testw geen bestaande bestanden. 
Ook worden er geen ingrijpende wijzigingen in het systeem aangebracht.
Het maakt bestanden op dezelfde manier aan als een gewoon programma; 
administratorrechten zijn niet nodig. Als de hardware in orde is, 
zal H2testw voor bestaande gegevens dus geen gevaar vormen. 

MAAR: in geval van een hardwarefout kan H2testw deze tonen en 
daarmee eventueel ook bestaande gegevens beschadigen. 
Ons advies dus: ALS JE DENKT DAT EEN BEPAALDE USB-STICK OF ANDERE
GEGEVENSDRAGER NIET IN ORDE IS, MAAK DIE DAN EERST LEEG EN TEST
DIE DAARNA VOLLEDIG MET H2TESTW. H2testw kan een gegevensdrager 
alleen volledig testen als die leeg is. Voor reproduceerbare 
resultaten kun je de hardware het best compleet formatteren 
(snel formatteren is al goed) en dan testen. 

H2testw schrijft telkens bestanden van 1 GB naar de locatie met de doorlopende 
namen 1.h2w, 2.h2w, 3.h2w enz.
Als op de locatie al zulke bestanden staan, vraagt H2testw die te controleren; 
staan er andere bestanden met *.h2w als naam, dan doet de tool niets. Wis in 
dit geval alle bestanden met *.h2w en druk op Vernieuwen.

Na gedane arbeid blijven de testbestanden op de schijf staan. 
Je kunt ze dan verwijderen of -- in geval van bijvoorbeeld een usb-stick 
op een andere pc -- nog een keer controleren. 

De checkbox 'endless verify' zet H2testw in een eindeloze lus.  
De bestanden worden daarbij telkens gelezen en gecontroleerd tot er 
een fout optreedt. Deze optie dient voor het opsporen van sporadisch 
optredende fouten. 

Een opmerking over het inschatten van de resterende tijd: bij intacte 
flash-media moet de tijd vanwege de contante snelheid nagenoeg kloppen. 
Bij defecte media hebben we sterke afwijkingen in de overdrachts-
snelheid geconstateerd. De schatting wordt daarbij telkens naar boven 
afgerond. Harde schijven halen in de binnenste zone een lagere 
snelheid dan bij de buitenste; hierdoor is de schatting niet nauwkeurig.


Een fout. En nu? 
----------------

Als H2testw bij het controleren aangeeft dat er fouten zijn, houdt 
dat in dat het geheugenmedium niet alle gegevens heeft teruggeleverd, 
zoals ze werden geschreven. Waarschijnlijk betreft het dan een defect 
geheugenmedium, maar er kunnen ook andere oorzaken zijn.
Herhaal de test dus en houd met het volgende rekening:

* Formatteer het medium 

* Gebruik geen usb-verlengkabel of -hub

* Probeer usb- of FireWire-apparatuur op een andere aansluiting uit
  (de usb-poorten op de ATX-shield zijn soms beter dan die aan de
  voorkant).

* Probeer bij externe harde schijven (indien mogelijk) een andere kabel


Foutmeldingen
--------------

Als tijdens de controle fouten optreden, deelt H2testw het aantal
foute sectoren in als volgt:

* sectoren die door andere werden overschreven (zie boven bij
  adresseringsfout),

* sectoren die maar een beetje beschadiging hebben opgelopen (minder dan 8 afwijkende
  bits per sector)

* compleet foute sector of met meer beschadiging.

In geval van overschreven sectoren probeert H2testw te achterhalen
hoeveel opslag echt in het getroffende deel aanwezig is; deze wordt
aangeduid als zijnde meervoudig gebruikt. 

Voor de eerst gevonden fout toont het programma uiteindelijk de
offset binnen de data, de daar verwachte en de daadwerkelijk 
gevonden waarde.

Tip: je kunt de tekst van de foutmelding selecteren en er met copy/paste 
bijvoorbeeld op googelen. 


Typische fouten
---------------

De testdata van H2testw zijn zo geconstrueerd dat je typische fouten
van elkaar kunt onderscheiden. Ze zijn in drie categorien te verdelen:

* Adresseringsfouten: tijdens het schrijven van een sector komt de 
  inhoud niet op het gewenste adres, maar op een ander en overschrijft
  dus een andere sector. Deze fout treedt op bij enkele gemanipuleerde
  usb-sticks. Ander prominent voorbeeld:
  een harde schijf groter dan 128 GB op een computer waarvan het BIOS
  en/of besturingssysteem nog niet de benodigde adressering ondersteunt.
  alle benaderingen vinden dan modulo 128 GB plaats: data die bij de grens
  van 128 GB worden geschreven, overschrijven dus weer het begin van de 
  harde schijf.

* Data worden helemaal niet opgeslagen: we zagen deze fout in combinatie 
  met usb-sticks die niet goed waren geconfigureerd. Een sector geeft 
  dan geen geschreven data terug maar bij lezen alleen nullen of enen 
  -- typisch in het geval er niet-bezet geheugen werd benaderd. 

* Afzonderlijke bits worden beschadigd: dat duidt op overdrachtsfouten
  in het signaal tussen de processor en de hardware. 
  In theorie is ook denkbaar dat een bit in een flashgeheugen zou kunnen
  'omvallen'.


Technische details over de data
-------------------------------

H2testw schrijft en leest de testdata per megabyte. Ook als je de optie
selecteert om de schijf compleet vol te schrijven, blijft er dus 
uiteindelijk hooguit 1 MB over; met 1 MB wordt 1048576 byte bedoeld (1024 kB). 
Om ook met FAT-bestandsystemen te werken houdt H2testw een respectvolle 
afstand aan ten opzichte van de 4GB-grens en begint telkens na een 
gigabyte (1024 MB) een nieuwe bestand.

Binnen een bestand begint elke 512-byte-sector met een
64-bit-woord (8 byte). Daarin is de offset binnen alle 
testdata opgeslagen (en dus niet alleen binnen het bestand) - 
en dat typisch voor Intel in het formaat Little-Endian.

Het bestand 1.h2w begint kortom met

00 00 00 00 00 00 00 00,

de volgende sector met

00 02 00 00 00 00 00 00,

de volgende met 

00 04 00 00 00 00 00 00

enz. Het bestand 2.h2w begint met

00 00 00 40 00 00 00 00

(Offset 1 GB = 0x40000000).

De rest van elke sector staat vol met een pseudo-random reeks. 
