Ergänzendes Tool...DD: 300KB - Jul 2005 - Standalone HP: http://www.heise.de/ct/05/16/links/078.shtml DL: ftp://ftp.heise.de/pub/ct/ctsi/h2cdimage.zip H2cdimage H2cdimage -- by Harald Bögeholz / c't Magazin für Computertechnik Version 1.8, Copyright (C) 2005 Heise Zeitschriften Verlag GmbH & Co. KG ======================================================================== H2cdimage ist für die Datenrettung von beschädigten CDs oder DVDs gedacht. Es erzeugt ein sektorweises Image einer CD oder DVD in einer Datei mit der Endung .iso. In einer weiteren Datei mit der Endung .h2i merkt es sich, welche Sektoren des Datenträgers es bisher erfolgreich lesen konnte. Empfehlungen zum richtigen Einsatz von H2cdimage sowie Erklärungen zu der Frage, wie man denn anschließend die geretteten Dateien wieder aus der Image-Datei extrahiert stehen im Artikel "Silberpuzzle, Daten von beschädigten CDs und DVDs retten" in c't 16/05, S. 78. ACHTUNG: In der derzeitigen Version unterstützt H2cdimage nur Datenträger mit 2048-Byte-Sektoren. Mit Audio-CDs und (S)VCDs kann es nicht umgehen. Systemvoraussetzungen --------------------- H2cdimage ist ein Kommandozeilenprogramm für Win32 und sollte unter allen 32-bittigen Windows-Versionen laufen. Getestet wurde es hauptsächlich unter Windows XP und stichprobenartig unter Windows 98. Unter Windows XP und den anderen NT-Abkömmlingen erfordert das Programm Administratorrechte. H2cdimage greift über ASPI auf das Laufwerk zu und benötigt dazu die Datei Wnaspi32.dll. Wir liefern im Zip-Archiv von H2cdimage mit freundlicher Genehmigung der Nero AG deren Wnaspi32.dll in Version 2.0.1.74 mit. Sie muss im gleichen Verzeichnis liegen wie H2cdimage.exe und darf _nicht_ in einen Systemordner kopiert werden. Bitte beachten Sie die Nutzungsbedingungen der Nero AG unter http://www.nero.com/deu/WNASPI32.DLL.html. Das FAT-Dateisystem begrenzt Dateien auf eine Größe von 4 GByte. Um eine mit mehr als 4 GByte gefüllte DVD einzulesen, ist daher NTFS erforderlich. Aufruf ------ Rufen Sie H2cdimage auf der Kommandozeile wie folgt auf: h2cdimage <a>:<t>:<l> <filename> <-i> <filename> ersetzen Sie durch den gewünschten Dateinamen ohne Erweiterung. H2cdimage arbeitet dann mit den beiden Dateien <filename>.iso (Image) und <filename>.h2i. Beim ersten Aufruf muss die Option -i zum Anlegen dieser Dateien angegeben werden; ohne sie ergänzt H2cdimage ein bestehendes Image. Die Zahlen <a>, <t> und <l> adressieren das Laufwerk, und zwar (auch bei IDE-Laufwerken) als SCSI-Gerät: <a> steht für die Nummer des Adapters, <t> für die SCSI-ID und <l> für die LUN (Logical Unit Number, eine Unternummerierung innerhalb des Geräts; gabs mal bei CD-Wechslern). Welche Adresse richtig ist, findet man am einfachsten durch Probieren heraus. Bei einem Aufruf von H2cdimage ohne Parameter sollte zwischen Copyright-Meldung und Hilfetext eine Zeile wie ASPI geladen. Anzahl der Adapter: 3 erscheinen. Im Beispiel wurden 3 (virtuelle) SCSI-Adapter gefunden, die über die Nummern 0 bis 2 angesprochen werden. In der Regel taucht an der ASPI-Schnittstelle jeder IDE-Kanal sowie jeder SCSI-Hostadapter als ein Adapter auf. Bei IDE-Geräten hat der Master die ID 0, der Slave die ID 1, die LUN ist jeweils 0. In einem System mit zwei IDE-Kanälen und ohne SCSI-Adapter gelten damit die folgenden Adressen: 0:0:0 - Master am primären Kanal 0:1:0 - Slave am primären Kanal 1:0:0 - Master am sekundären Kanal 1:1:0 - Slave am sekundären Kanal Bei korrektem Aufruf zeigt H2cdimage den Namen des gefundenen Laufwerks im Klartext an, sodass man das richtige im Zweifelsfalle durch Probieren findet (am besten mit einer intakten CD oder DVD testen). Dateiformate ------------ H2cdimage erzeugt zwei Dateien. Die .iso-Datei enthält ein sektorweises Abbild des kompletten Datenträgers ohne irgendwelche Header oder sonstigen Verwaltungsinformationen. Sektoren, die (noch) nicht vom Medium gelesen werden konnten, sind im Image mit dem Hex-Wert 0xB0 gefüllt. Eine vollständige .iso-Datei lässt sich mit gängigen Brennprogrammen 1:1 auf ein neues Medium brennen oder mit Programmen wie den Daemon Tools als virtuelles Laufwerk ins System einbinden. Die .h2i-Datei enthält für jeden Sektor der Image-Datei ein Byte, das aussagt, ob dieser Sektor erfolgreich gelesen wurde. Byte 0 gehört zu Sektor 0 des Image, Byte 1 zu Sektor 1 und so weiter. Das Zeichen '_' bedeutet, dass der zugehörige Sektor noch nicht gelesen wurde, jedes andere Zeichen bedeutet, dass der Sektor gültige Daten enthält. In den erfolgreich gelesenen Bereichen nutzt H2cdimage die Flag-Bytes, um fortlaufend die Sektornummern im Klartext anzugeben. Eine .h2i-Datei beginnt also so: 0*********10********20********30********40********50********60** ... und ein Bereich, in dem vereinzelte Lesefehler aufgetreten sind, könnte beispielsweise so aussehen: _____7090*****27100*_***27110**_**27120***_*27130*****27140***** ... Indem man eine .h2i-Datei in einen Editor seiner Wahl lädt (von den Windows-Bordmitteln ist Wordpad zu empfehlen; Notepad stellt sich dusselig an), kann man so mit bloßem Auge die Nummern der fehlerhaften Sektoren abzählen. Im Beispiel ist (unter anderem) der Sektor 27106 fehlerhaft. WICHTIG: Die aktuelle Version unterstützt nur Datenträger mit 2048 Byte - Sektoren. Mit Audio-CDs und (S)VCDs kann es (noch) nicht umgehen. ________________________________________________________________________________________________
für Windows DD: 1.4 MB - Jul 2005 - Standalone HP: http://www.heise.de/ct/05/16/links/078.shtml DL: ftp://ftp.heise.de/pub/ct/ctsi/dares.zip Dares DAta REScueWie es arbeitet ---------------- Wie jedes Dateisystem enthält das CD- und DVD-Dateisystem ISO 9660 neben Dateien Metainformationen, die beschreiben, wo auf dem Datenträger eine Datei gespeichert ist. Sind diese Verwaltungsstrukturen beispielsweise durch einen kleinen Kratzer beschädigt, sieht das Betriebssystem keine Dateien mehr, obwohl noch alle Daten vorhanden sein können. Das ist ungefähr so, als hätte man seine Schätze im Wald vergraben und dann den Lageplan verbummelt: Weil ein kleines Stück Papier fehlt, ist alles verloren -- es sei denn, man gräbt den ganzen Wald um. Dares tut genau das und kratzt alle auffindbaren Dateien von einem beliebig kaputtem CD- oder DVD-Image oder Datenträger. Nach Verwaltungsinformationen sucht Dares gar nicht erst; stattdessen scannt es das Image systematisch von Anfang bis Ende und prüft, ob irgendwo eine Datei beginnt. Dazu bedient es sich der Magic-Library, die auch das Unix-Programm file zur Bestimmung des Dateityps nutzt. File schließt anhand des Anfangs einer Datei auf deren Inhalt und nutzt dazu so genannte "magic numbers", typische Kennbytes zu Beginn einer Datei. Zwei Eigenschaften von ISO-9660 machen das Graben nach den Daten recht erfolgversprechend. Zum einen beginnen Dateien immer am Start eines Sektors: Man muss nur alle 2048 Bytes testen, ob hier eine Datei beginnt. Zum anderen kennt ISO-9660 keine Fragmentierung: Ist eine Datei größer als die 2**KByte Sektorgröße, belegt sie entsprechend mehr aufeinanderfolgende Sektoren. Schwieriger ist es, das Ende einer Datei zu erkennen. Die naheliegende Idee, jeden weiteren Sektor darauf zu testen, ob dort eine neue Datei beginnt, führt zu vielen Fehlerkennungen (und damit unvollständigen Dateien): Bei über 1500 Dateitypen der Magic-Bibliothek ist die Wahrscheinlichkeit, mitten in einer Datei den vermeintlichen Anfang einer anderen Datei zu entdecken, gar nicht so gering. Ein MS-DOS-Programm beispielsweise ist durch ein "MZ" am Dateianfang gekennzeichnet; und diese Zeichenfolge kann durchaus auch außerhalb eines DOS-Programms vorkommen, mit ein bisschen Pech auch mal auf einem Sektoranfang. Dares prüft daher jeden einer Datei zugeordneten Sektor darauf, ob er das Ende der Datei enthalten könnte. Ausgangspunkt ist die Überlegung, dass die Größe der wenigsten Dateien ein exaktes Vielfaches von 2048 ist: Meist ist der letzte Sektor nicht vollständig belegt. Bei ISO 9660 sind diese Sektoren mit Nullen aufgefüllt. Endet ein Sektor also mit Nullen, spricht das für ein Dateiende. Das Programm unterscheidet dabei zwischen Text- und Binärdateien: In Textdateien kann kein Nullbyte vorkommen, in Binärdaten schon. Entsprechend genügt bei Textdateien eine Null, um auf das Dateiende zu erkennen, während bei einer Binärdatei mehrere Nullen am Sektorende nötig sind, wobei zudem der nächste Sektor nicht mit einem Nullbyte beginnen darf (das spricht eher dafür, dass die Sektorgrenze zufällig in einem Block von Nullbytes gelandet ist). Wie man es benutzt ------------------- Nach dem Auspacken des Archivs müssen sich die Dateien dares.exe, hs_regex.dll, magic und magic.mime alle im selben Verzeichnis befinden. Starten Sie nun dares.exe. Starten Sie das Programm von der Kommandozeile aus, versteht es die folgenden Kommandozeilenoptionen: dares -i Image -s Verzeichnis <-h2i h2i-Datei> <-a> <-m> <-l Log-Datei> -i: CD-/DVD-Image oder CD-/DVD-Device -s: Verzeichnis, in dem die geretteten Dateien gespeichert werden -h2i: h2i-Datei zum Image (erzeugt von H2cdimage) -a: alle gefundenen Dateien ohne Rückfrage speichern -m: Mime Types an Stelle einer ausführlichen Beschreibung verwenden -l: Log-Datei (Default: dares.log) Beispiel: dares -i cdrom.image -s /tmp Ansonsten erfragt Dares die nötigen Angaben in einer Dialogbox nach dem Start. Das Programm durchsucht zunächst das Image. Dieser Prozess kann je nach Größe des Image mehrere Minuten dauern; Dares gibt in dieser Zeit leider keine Fortschrittsmeldungen aus. Nach Abschluss der Suche zeigt Dares einen Baum mit allen gefundenen Dateien an, sortiert nach ihren Dateitypen. <text> oder <bin> beim Dateityp gibt an, ob es sich um Textdateien (HTML-Code, ASCII-Text, Skript und so weiter) oder um Binärdateien (JPEG-Dateien, komprimierte Archive, Programme, MS-Office-Dokumente etc.) handelt. In Klammern ist bei jedem Dateityp angegeben, wie viele (vermutlich) heile Dateien und wie viele Dateien insgesamt dieses Types gefunden wurden. Unvollständig können Dateien beispielsweise sein, wenn Teile des Datenträgers nicht gelesen werden konnten. Zudem steht bei jedem Dateityp, wie viele Byte die Dateien dieses Typs insgesamt belegen. Bei Auswahl einer Datei wird ihr Anfang im rechten Teil des Fensters angezeigt, bei binären Dateitypen als Hexdump. Die einzelnen Dateien sind sortiert nach der Nummer des 2-KByte-Blocks, auf dem sie beginnen. Über diese Blocknummer lässt sie sich auch in der Log-Datei dares.log identifizieren, die alle erkannten Dateien in der Reihenfolge nach Blocknummern sortiert enthält. Eine ausgewählte Datei lässt sich in Dares mit Strg-S oder über das Kontextmenü sichern. Es ist es möglich, mehrere Dateien geichzeitig auszuwählen und mit Strg-A zu sichern. Die Originalnamen der Dateien sind ohne Verwaltungsinformationen nicht rekonstruierbar; Dares benennt die Dateien nah dem Muster Blocknummer-Dateityp.. Strg-V ruft einen Viewer auf, an den die ausgewählte Datei übergeben wird. Dabei erscheint ein Dialog, in dem der Name des Programms einzugeben ist, beispielsweise notepad zur Anzeige von Textdateien. Strg-Q beendet das Programm. Wenn das Ergebnis nicht überzeugt ---------------------------------- Die Heuristik zum Erkennen von Dateianfang und -ende kann natürlich fehlschlagen: Auf Video-DVDs beispielsweise sind die Videostreams typischerweise in Dateien von exakt einem GByte Größe zerhackt, die somit genau auf einer Sektorgrenze enden. Dares hängt dann die einzelnen Videodateien direkt aneinander. Abspielen lassen sie sich problemlos, allerdings können sie größer als 4 GByte werden und lassen sich dann nicht mehr auf FAT-Laufwerken speichern. Umgekehrt beginnen AVI-Dateien typischerweise mit einem Header der mit Nullbytes auf eine Größe von exakt 6**KByte aufgefüllt wird. Anschließend beginnen die Videodaten, die nicht mit Null beginnnen. Resultat: Für Dares endet die AVI-Datei nach dem Header, die eigentlichen Daten ordnet es einer neuen Datei zu. In einem solchen Fall findet man in der Log-Datei, in der Dares während der Suche alle gefundenen Dateien einträgt (dares.log), welcher Datei die Videodaten zugeordnet wurden -- häufig ist es eine Datei vom Typ data oder dem Mime Type "application/octet stream". Sind beide Dateien gespeichert, lassen sie sich nach dem Speichern aneinanderhängen. Alternativ kann man anhand der Informationen in der Log-Datei die Datei in der richtigen Größe aus dem Image extrahieren. Natürlich kann es vorkommen, dass die gesuchte Datei, möglicherweise auch schon ihr Dateityp, nicht in der Liste auftaucht. In diesem Fall muss man mit der integrierten Dateivorschau und den externen Viewern in Qtdares die Liste der gefundenen Dateien durchsuchen, ob die Zieldatei vielleicht falsch erkannt wurde. Es kann sich lohnen, sowohl einen Durchlauf mit Mime Types (Option -m) als auch einen mit den ausführlichen Dateitypen zu starten: Die beiden Magic-Libraries unterscheiden sich etwas. Da die ausführlichen Beschreibungen die Dateitypen sehr viel detaillierter aufgliedern als die Mime Types (bei Bilddateien kann der Dateityp Informationen über die Größe enthalten, bei Archivdateien über den Inhalt etc.), liefern die als Default verwendeten ausführlichen Dateitypen mehr Informationen über die Dateien. Allerdings wird man gelegentlich viele ähnliche Dateitypen mit nur wenigen Dateien finden, etwa bei zahlreichen GIF-Dateien unterschiedlicher Größe, die jede einen eigenen Typ bilden. Mit Mime Types wird man daher in vielen Fällen einen übersichtlicheren Dateibaum enthalten. Weiß man, welche Dateitypen auf dem beschädigten Datenträger gespeichert waren, kann man die Dateien magic und magic.mime entsprechend anpassen und sie auf die erwarteten Dateitypen beschränken. Das vermeidet Fehlerkennungen. Dares versucht, die Signaturdatei magic<.mime> im aktuellen Verzeichnis zu lesen und gibt eine Warnung aus, wenn das nicht gelingt. In diesem Fall kommen die eingebauten Standardsignaturen zum Einsatz. ________________________________________________________________________________________________