Informationen über Dateien
lima-city → Forum → Heim-PC → Software
attribut
aufbau
aussehen
byte
datei
file
header
http
information
informieren
kopieren
programm
sache
stehen
tabelle
teil
typ
url
windows
wissen
-
Jetzt isset passiert: Mitten im Transport von ein paar zigtausend Dateien schmiert das Programm ab. Das ursprüngliche Wurzelverzeichnis ist gelöscht, aber nur ein Bruchteil am Zielort angekommen.
Schreibzugriffe auf die Platte sofort eingestellt und ein Recovery-Programm installiert.
Das arbeitet aber nicht zu meiner Zufriedenheit.
Da ich selbst programmiere, dachte ich , an eine individuelle Lösung. Dabei ergeben sich für mich allerdings zwei Probleme:
Ich weiß, daß es einen Dateiheader gibt, in dem im Prinzip alle benötigten Informationen drin stehen. Mir fehlt nur die Information, wie diese Header bei welchem Datei-Typ aussehen müssen.
Ausserdem, müßte ich wissen, woran man das Ende der jeweiligen Datei erkennt.
Wenn jemand entsprechende Informationen für mich hat, wäre ich sehr dankbar.
Gruß, Cwllch
ps.: Ich wußte nicht, wo ich das hinpacken sollte. Ggf. bitte an geeigneteren Ort verschieben. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Moin,
ich glaube eine individuelle Lösung ist schwierig. Aber irgendwie schon machbar.
Ich würde folgende Herangehensweise empfehlen:
- Welche Partitionen hat deine Platte?
--> findest du raus über die Paritionstabelle des MBR (Master Boot Record, ersten 512 Byte deiner Festplatte)
--> über den Aufbau des MBR informieren: MBR bei Wiki
--> über den Aufbau der Paritionstabelle innerhalb des MBR informieren: Paritionstabelle bei Wiki
- Welche Dateisysteme haben deine Paritionen?
--> über den Aufbau der verwendeten Dateisysteme informieren: z.B. NTFS bei Wiki
Und dann kannst du dich der ursprünglichen Fragestellung widmen: Wo sind meine Dateien geblieben und wie finde ich diese auf meiner Terabyte-Platte?
Dann musst du jede Partition einzeln betrachten, denn wie die Dateien dort abgelegt sind hängt vom Dateisystem ab. Um welches Dateisystem es sich jeweils handelt, findest du in der Paritionstabelle heraus (anhand vorderfinierter Bytekennungen).
Dann musst du dir anschauen, wie ein Dateisystem die Dateien ablegt und verwaltet. Dein Programm muss dies auf jeden Fall wissen, da du sonst nicht an die Dateien herankommst.
NTFS zum Beispiel verwendet eine Tabelle (Master File Table), in der alle bekannten Dateien aufgelistet werden. Dort stehen dann solche Sachen wie: Dateiname, Pfad, Startbyte, Länge, Endung, Attribute, usw. jeder einzelnen Datei und Ordner.
Wenn du verschiedene Dateisysteme für deine Partitionen verwendet hast, dann musst du für jedes Dateisystem neue Routinen entwickeln, da sich der Aufbau unterscheidet. Wenn du Glück hast, hast du nur NTFS verwendet, und musst nur eine Routine schreiben:-) Wenn du Pech hast, dann ist evtl. die Master File Table deines NTFS (oder sonst ein Dateisystem das du benutzt) beschädigt. Dann kannst du auf deine Dateien nicht mehr zugreifen, denn du kennst die benötigten Informationen nicht, um auf die Bytes zuzugreifen. Evtl. hat dein abgestürztes Programm da etwas verändert und die Tabelle zerstört. Wenn du die Tabelle irgendwie wiederherstellen kannst, dann brauchst du kein eigenes Programm mehr schreiben, denn dann erkennt dein Betriebssystem diese Dateien wieder. Aber frag mich nicht wie das gehen soll, da muss man ganz tief in die Thematik reinschauen. Befürchte aber, dass es u.U. keine allgemeine Lösung dafür gibt, sodass man die Tabelle manuell umschreiben muss...
cwllch schrieb: Ich weiß, daß es einen Dateiheader gibt, in dem im Prinzip alle benötigten Informationen drin stehen. Mir fehlt nur die Information, wie diese Header bei welchem Datei-Typ aussehen müssen.
Ich weiß nicht, ob ich dich richtig verstanden habe, aber: Wenn du die Dateien nur kopieren willst, dann brauchst du weder irgendeine Dateiendung noch andere Informationen über den Inhalt der Datei. Denn dort steht nur drin wie die Datei in sich aufgebaut ist, sodass bestimmte Programme was mit dieser Datei anfangen können. Du willst ja nicht wissen wie jetzt z.B. eine BMP-Datei aufgebaut ist, um diese lesen und anzeigen zu können, sondern nur um alle Byte, die zu dieser Datei gehören, sicherzustellen. Sonst müsste ein Betriebssystem ja schon alle Dateiformate kennen die es gibt, um z.B. eine Datei zu löschen oder zu kopieren...^^ Oder was meinst du mit deinem Satz?
Ausserdem, müßte ich wissen, woran man das Ende der jeweiligen Datei erkennt.
Ich finde solche Sachen immer interessant, auch wenn es schon Programme dafür gibt, macht es doch Spaß sich da was auszudenken... :-) Viel Erfolg
-
Hi und Danke für die Antwort !
Alle Informationen liegen so weit vor... Festplatte, Partition, Dateisystem usw.
Was fehlt ist lediglich die Information, wie die Header von einzelnen Dateitypen aussehen. .bmp ist auch hier bekannt. Aber mir fehlen noch andere Dateitypen von .txt bis .mp4 etwa.
An dem verwendeten Rescue-Programm stört mich, daß es erstens von einer festen (und m.E. willkürlich festgelegten) Dateilänge ausgeht und den Platz dazwischen beim Suchen ausspart. Ausserdem legt es ein Verzeichnis an, in dem es die gefundenen Dateien auflistet, statt diese gleich auf eine andere Platte zu verschieben. Schließlich verpasst es den gefundenen Dateien wieder eine feste und willkürliche Länge (1.4GB pro Datei), so daß ich Dateien nur in kleinen Gruppen kopieren kann, weil Windows mir sonst erzählt, daß auf der Ziel-Platte nicht genug Platz ist.
Für großartig schwierig halte ich die Sache nicht:
Das zu erstellende Programm müßte sich auf der zu untersuchenden Platte halt auf die Suche nach Datei-Anfangskennzeichnungen machen und diese entsprechend zuordnen. Danach kann man aus der zugehörigen Header-Struktur alle erforderlichen Daten auslesen und die Datei rekonstruieren.
Werden gefundene Dateien gleich auf eine andere Platte gesichert, kann man damit einen ggf. vorhandenen Zweitrechner beauftragen und das ganze unbeaufsichtigt ablaufen lassen.
Wenn die Masterfile-Table noch steht, kann man ggf. sogar die Namen wieder zuordnen.
Eigentlich benötige ich nur eine Liste mit dem Headeraufbau aller wichtigen Datei-Typen (also keine Exoten), dann könnte ich mit der Umsetzung anfangen. -
Weißt du denn ganz ganz sicher, dass deine Master File Table beschädigt ist? Bzw. evtl. ist diese nur Teilbeschädigt, und du kannst wenigsten einen Teil deiner Dateien mit den Infos aus der Tabelle retten.
Wie gesagt, egal welcher Dateityp: die Infos aus der MFT reichen aus, um die Dateien zu finden.
Ich würde dir davon abraten, nach "Headern" von verschiedenen Dateitypen zu suchen...
Eine "txt-Datei" hat keinen Header. Wie lang diese Datei ist, das steht in der MFT. Somit hättest du schonmal kein sicheres Verfahren, um eine txt-Datei aus einer Menge von vielen, vielen Bytes zu bekommen. Vielleicht wird es dir deutlicher, wenn ich folgendes hier zitiere:
Wikipedia sagt: Aus Sicht des Dateisystems – darin folgt NTFS dem Dateisystem-Konzept von Unix – ist alles Teil einer Datei, auch die Informationen des Systems. Die Hauptdatei ist die Master File Table kurz MFT. In dieser Datei befinden sich die Einträge, welche Blöcke zu welcher Datei gehören, die Zugriffsberechtigungen und die Attribute. Zu den Eigenschaften (Attributen) einer Datei gehören unter NTFS Dateigröße, Datum, Dateierstellung, Datum der letzten Änderung, Freigabe, Dateityp und auch der eigentliche Dateiinhalt.
Sehr kleine Dateien und Verzeichnisse werden in der MFT direkt abgespeichert. Größere Dateien werden dann als Attribut in einem Datenlauf gespeichert.
Beim Formatieren der Festplatte wird für die MFT ein fester Platz reserviert, der nicht von anderen Dateien belegt werden kann. Wenn dieser voll ist, beginnt das Dateisystem freien Speicher vom Datenträger zu benutzen, wodurch es zu einer Fragmentierung der MFT kommen kann. Standardmäßig wird ein reservierter Bereich von 12,5 % der Partitionsgröße angenommen.
Es gibt soweit ich weiß, keine "Datei-Anfangskennzeichen", die besagen um welche Datei es sich handelt. Macht auch keinen Sinn:
Eine Datei belegt meistens mehrere Byte-Blöcke (welche das sind, steht in der MFT^^). Wenn du nun jeden einzelnen Byte-Block deiner Partition durchgehst, weist du ja nicht, welcher von den Byte-Blöcken der Anfang einer Datei ist und welcher nicht. (evtl. könnte dir so etwas wie Fragmentierung Probleme bereiten).
Da Dateien immer eine Anzahl (ganze Zahl!) an Byte-Blöcken belegen, findest du in den Eigenschaften von Dateien immer die Angabe: a) Größe b) Größe auf Datenträger (ist größer als a))
Wie gesagt, ich bin der Meinung über die MFT geht es ziemlich einfach. So wie ich dich verstanden habe, wie du es machen würdest, geht es einfach nicht.
Achso, zu deinem Tool: such dir ein anderes! :-) Müsste zig solcher Tools geben, ich denke mal das ist die schnellste und einfachste Lösung. Evtl. reicht auch der allzu bekannte Checkdisk-Befehl (CHKDSK) aus, um alles wieder herzurichten (da müssten noch irgendwelche Prüfsummen gespeichert sein, die zur wiederherstellung der Master File Table dienen können).
Also, einfach mal folgendes in der Windows Konsole eingeben:
> chkdsk /?
Müsste dann irgendwie mit dem Parameter /f aufgerufen werden, glaube ich^^
Beitrag zuletzt geändert: 21.12.2010 20:06:07 von tangoal -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage