HFS+ Rescue - HfsprescueInhaltsverzeichnis1. EinleitungHFS+ (HFS Plus, Hierarchical File System Plus) ist ein von Apple® entwickeltes Dateisystem. hfsprescue kann Dateien von einer HFS+ formatierten Partition wiederherstellen. Sie können Dateien und Verzeichnisse wiederherstellen, selbst wenn das Betriebssystem nicht mehr auf die Partition zugreifen kann. Ein Nebeneffekt ist, daß ebenfalls gelöschte Dateien wieder hergestellt werden können. Das beschädigte HFS+ Dateisystem wird nur "lesend" geöffnet um keine weiteren Beschädigungen zu verursachen. Sie benötigen einen weiteren Datenträger, aufdem die geretteten Daten gespeichert werden. Die Dateien werden im aktuellen Verzeichnis, in dem hfsprescue gestartet wird, in das 'restored/' Verzeichnis gespeichert. Das Programm hat keine grafische Benutzeroberfläche. Es wird von der Kommandozeile gestartet. hfsprescue läuft unter Linux, Mac OS X und FreeBSD. hfsprescue unterstützt HFS+ compression (resource fork). Aktuelle Version: 3.6, 07/Apr/2023 2. Downloadhfsprescue-3.6.tar.gz (07/04/2023) Source code hfsprescue-3.6-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD Veraltete Versionen. Sollten nicht mehr verwendet werden. hfsprescue-3.5.tar.gz (26/04/2020) Source Codehfsprescue-3.5-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-3.4.tar.gz (16/02/2018) Source Code hfsprescue-3.4-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-3.3.tar.gz (31/07/2017) Source Code hfsprescue-3.3-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-3.2.tar.gz (29/11/2016) Source Code hfsprescue-3.2-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-3.1.tar.gz (14/09/2016) Source Code hfsprescue-3.1-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-3.0.tar.gz (26/07/2016) Source Code hfsprescue-3.0-precompiled.tar.gz Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-2.2.tar.gz (19/12/2015) Source Code hfsprescue-2.2-precompiled.tar.gz (2015/12/19) Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-2.1.tar.gz (19/11/2015) Source Code hfsprescue-2.1-precompiled.zip (19/11/2015) Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-2.0.tar.gz (01/09/2015) Source Code hfsprescue-2.0-precompiled.zip (01/09/2015) Precompiled für Linux, Mac OS X, FreeBSD hfsprescue-1.1.tar.gz (02/02/2015) hfsprescue-1.0.tar.gz (12/01/2015) hfsprescue-0.3.tar.gz (30/01/2013) hfsprescue-0.2.tar.gz (25/11/2011) hfsprescue-0.1-patched.tar.gz (05/10/2011) hfsprescue-0.1.tar.gz (30/11/2010) 3. Dateien wiederherstellenMan muß 6 Schritte zum Wiederherstellen durchführen:
Am Ende jedes Schrittes informiert hfsprescue wie der Befehl für den nächsten Schritt aussieht. Ein einfaches Beispiel für die 6 Schritte:
hfsprescue -s1 /dev/sdb2 4. Weitere Funktionenhfsprescue hat zusätzliche Funktionen um Sie zu unterstützen: • Unicode Text suchen (praktisch bei kaputter oder gelöschter Partitionstabelle). 5. Parameterhfsprescue [-h|--help] [--version]
hfsprescue -s1 <device node|image file> hfsprescue -s2 [--utf8len <value 1 to 5>] [--future-days <days>]
hfsprescue -s3 <device node|image file> hfsprescue -s4 [-d <working directory>] hfsprescue -s5 [-d <working directory>] hfsprescue -s6 [-d <working directory>] [-k]
hfsprescue --find <device node|image file> hfsprescue --list [--slash] [-d <working directory>] hfsprescue --csv <file name> [--slash] [-d <working directory>]
hfsprescue --one-file <device node|image file> <file number>
hfsprescue --find-eof
hfsprescue --extract-eof <device node|image file>
hfsprescue --find-vh
hfsprescue --find-avh
hfsprescue --extract-vh <device node|image file> <LBA sector>
hfsprescue --remove-empty-dirs Beschreibung der ParameterHilfe anzeigen
Schritt 1 '-s1'Nach Dateien scannen.
Schritt 2 '-s2'Die Datenbank mit den Dateinamen optimieren.
Schritt 3 '-s3'Dateien wiederherstellen.
Schritt 4 '-s4'Verzeichnisstruktur wiederherstellen.
Schritt 5 '-s5'Verschieben der wiederhergestellten Dateien in die richtigen Verzeichnisse.
Schritt 6 '-s6'Letzter Schritt, abschließende Arbeiten.
Unicode String und/oder Bytes einer Datei suchen '--find'Datensuche auf Sektorenebene. Siehe hier für mehr Details.
Liste Dateien '--list'Auflisten der gefundenen Dateien. Siehe hier für mehr Details.
CSV Export '--csv'Gefundene Dateien als CSV Datei exportieren. Siehe hier für Details.
Einzelne Datei wiederherstellen '--one-file'Nur eine bestimmte Datei der gefundenen wiederherstellen. Der Parameter kann erst nach dem Schritt 2 durchgeführt wurde. Siehe hier für Details.
Das Extents Overflow File suchen '--find-eof'Scanne nach möglichen Start Blocks. Siehe hier für Details.
Das Extents Overflow File speichern '--extract-eof'Siehe hier für Details.
Den HFS+ Volume Header suchen '--find-vh'Scanne nach möglichen Positionen des Volume Headers der Partition. Siehe hier für Details.
Den HFS+ Alternate Volume Header suchen '--find-avh'Scanne nach möglichen Positionen des Alternate Volume Headers. Siehe hier für Details.
Den Volume Header speichern '--extract-vh'Siehe hier für Details.
Leere Verzeichnisse entfernen '--remove-empty-dirs'Siehe hier für mehr Informationen.
Der '--alternative' ParameterBeim Wiederherstellen der Dateien kann es passieren das im Verzeichnis 2 Dateien mit dem selben Namen wiederhergestellt werden. Diese Situation entsteht wenn es eine ältere/gelöschte Version auf der Festplatte gibt. Die Standardeinstellung von hfsprescue ist, das nur die neueste Version der Datei (basierend am Datei Timestamp) wiederhergestellt wird. Sollte man allerdings auch gelöschte Versionen der Datei wiederherstellen wollen, dann kann man den '--alternative' Parameter verwenden. Mit diesem Parameter erstellt hfsprescue die Datei mit einem alternativem Namen. Dieser Name ist eine Kombination vom original Namen, der Catalog ID und falls nötig wird eine laufende Nummer hinzugefügt. Hinweis: Die älteren bzw. gelöschten Versionen der Datei sind höchst wahrscheinlich defekt. 6. Dateien auflistenMan kann alle gefundenen Dateien auflisten, nachdem Schritt 2 '-s2' abgeschlossen wurde. Felder: File Number: File Name, File Size, File RAW Time, File Date/Time, File Start Block
Hinweis: • Bei Dateien die das Extents Overflow File brauchen steht '_F_EOF_'. Der '--list' Parameter kann mit 'grep' verwendet werden um die Dateinummer (file number) zu erhalten, wenn man eine einzelne Datei wiederherstellen will.
7. CSV Export der DateilisteMan kann die Liste der gefundenen Dateien im CSV Format exportieren, nachdem Schritt 2 '-s2' abgeschlossen wurde. Die Felder sind durch Semikolons ';' getrennt. Felder: Number, File Name, Parent ID, Catalog ID, File Size, File RAW Time, File Time, Start block, HFS+ Compressed, EOF (ExtentsOverflowFile)
8. Eine einzelne Datei wiederherstellenMit hfsprescue kann man auch einzelne Dateien wiederherstellen. Allerdings muß man dazu den zweiten Schritt 2 '-s2' abgeschlossen haben. hfsprescue --one-file <device node|image file> <file number> [-b <block size>] [-o <offset in bytes>] [-d <working directory>] [--vh-file <file name>] [--eof-file <file name>] [--alternative] Man benötigt die Dateinummer (file number) um eine einzelne Datei wiederherstellen zu können. Sie erhalten die Nummer mit 'hfsprescue --list' oder aus dem CSV Export. Beispiel, wiederherstellen der Datei 'mynotes.txt':
9. Dateien mit einer Liste wiederherstellenWenn Sie nicht alle Dateien im Schritt 3 wiederherstellen wollen, dann können Sie mit '--file-list <file name>' oder '--file-list-csv <file name>' ausgewählte Dateien wiederherstellen bzw. ausschließen. Einfache Liste: --file-listDas Format der Datei ist sehr einfach. In jeder Zeile steht die Dateinummer (aus --list), abschließend mit einem Doppelpunkt. Hinter dem Doppelpunkt kann ein beliebiger Text stehen. Der Text hinter dem Doppelpunkt wird ignoriert. Beispieldatei mit 10 Dateien zum Wiederherstellen: 1003: 283: 553: 18: live.1.shadowIndexHead, 4096 bytes, 1438688946, Tue Aug 4 13:49:06 2015, Start block 589824 19: live.2.directoryStoreFile, 4096 bytes, 1438688943, Tue Aug 4 13:49:03 2015, Start block 524338 20: live.2.directoryStoreFile.shadow, 1088 bytes, 1438688947, Tue Aug 4 13:49:07 2015, Start block 524374 21: live.2.indexArrays, 4096 bytes, 1438688947, Tue Aug 4 13:49:07 2015, Start block 524322 22: live.2.indexCompactDirectory, 1024 bytes, 1438688947, Tue Aug 4 13:49:07 2015, Start block 524321 450: 451: Mit dieser Funktion kann man einfach Dateien von der Wiedherstellung ausschließen oder nur bestimmte Dateien wiederherstellen. Da im Schritt 4 die komplette Verzeichnisstruktur wiederhergestellt wird (egal ob nur ein paar Dateien ausgewählt wurden), kann man am Ende nach '-s6', die leeren Verzeichnisse mit 'hfsprescue --remove-empty-dirs' entfernen. Beispiel: Dateien ausschließenIm folgenden Beispiel wird eine Liste erstellt um Dateien mit den Endungen '.download' und '.part' nicht wieder herzustellen. hfsprescue --list | grep -v ".download, " | grep -v ".part, " > files.list
• 'grep' wird mit '-v' verwendet um den anschließenden Text bei der Textausgabe zu verhindern. Der Schritt 3 Befehl sieht dann folgendermaßen aus: hfsprescue -s3 /dev/sdb1 --file-list files.list Beispiel: Dateien von bestimmten Tagen wiederherstellenIm folgenden Beispiel wird eine Liste erstellt um Dateien mit Änderungsdatum 4., 5. und 12. August 2015 wiederherstellen.
hfsprescue --list | grep " Aug 4 " | grep " 2015, " > files.list
• 'grep' wird verwendet um nur den anschließenden Text aus der Textausgabe herauszufiltern. Der Schritt 3 Befehl sieht dann folgendermaßen aus: hfsprescue -s3 /dev/sdb1 --file-list files.list Beispiel: Dateien mit 0 Bytes ausschließenIm folgenden Beispiel wird eine Liste erstellt um Dateien mit der Größe von 0 Bytes nicht wieder herzustellen. hfsprescue --list | grep -v ", 0 bytes, " > files.list
• 'grep' wird mit '-v' verwendet um den anschließenden Text bei der Textausgabe zu verhindern. Der Schritt 3 Befehl sieht dann folgendermaßen aus: hfsprescue -s3 /dev/sdb1 --file-list files.list CSV: --file-list-csv <file name>Um komplexere Filter anzuwenden verwenden Sie ein Tabellenkalkulationsprogramm wie z.B. Excel oder das LibreOffice Spreadsheet. Exportieren Sie die Dateinamenliste mit '--csv'. Importieren Sie die CSV Datei in Ihrem Tabellenprogramm und führen Sie die gewünschten Änderungen durch. Dann exportieren/speichern Sie die Daten in eine neue CSV Datei. Das Trennzeichen muss ein Semicolon ';' sein. Die Titelzeile (erste Zeile) wird von hfsprescue ignoriert. Beispieldatei: "Number";"File Name";"Parent ID";"Catalog ID";"File Size";"File RAW Time";"File Time";"Start block";"HFS+ Compressed";"EOF" 14;"fseventsd-uuid";28;29;36;1438141708;"Wed Jul 29 05:48:28 2015";393217;"No";"No" 15;"reverseStore.updates";26;96;1;1438688947;"Tue Aug 4 13:49:07 2015";622602;"No";"No" 16;"store.updates";26;95;3;1438688947;"Tue Aug 4 13:49:07 2015";622601;"No";"No" 17;"live.1.shadowIndexGroups";26;132;6;1438688945;"Tue Aug 4 13:49:05 2015";163913;"No";"No" 18;"live.1.shadowIndexHead";26;221;4096;1438688946;"Tue Aug 4 13:49:06 2015";589824;"No";"No" 19;"live.2.directoryStoreFile";26;194;4096;1438688943;"Tue Aug 4 13:49:03 2015";524338;"No";"No" 10. Den HFS+ Volume Header oder Alternate Volume Header und den Start der Partition findenIm Volume Header und Alternate Volume Header werden wichtige Informationen zum HFS+ Dateisystem gespeichert. Beide können verwendet werden um den Start der Partition zu ermitteln. Parameter: --find-vh / --find-avh Der Volume HeaderDer Volume Header befindet sich 1024 Bytes nach dem Start der Partition und eignet sich somit gut zum Auffinden des Partitionsstartes. Weiters beinhaltet der Volume Header unter anderem die Information wo das Extents Overflow File gespeichert ist. Wenn die Partitionstabelle defekt ist, oder mit einem Festplatten Image gearbeitet wird, dann ist es notwendig den Start der Partition mit dem kaputten HFS+ Dateisystems zu kennen. Eine Möglichkeit den Startoffset der Partition zu ermitteln ist die Suche nach dem HFS+ Volume Header mit dem '--find-vh' Parameter. Ein HFS+ Dateisystem hat ein Backup vom Volume Header (den Alternate Volume Header). Daher wird hfsprescue mehrere Volume Header finden. Wenn nur eine HFS+ Partition auf der der Festplatte ist, dann sollte der erste gefundene Eintrag der Richtige sein. Man kann den Parameter '--first' verwenden wenn nur der erste Treffer angezeigt werden soll. Ein Kriterium zum Auffinden des Volume Headers ist für hfsprescue der Inhalt des 'lastMountedVersion' Feldes. Dieses Feld wird vom Betriebssystem gesetzt, das als letztes die Partition gemountet hat. Nur Mac OS X und Linux werden von hfsprescue als gültig angesehen. Wenn das Mounten ein anderes Betriebssystem durchgeführt hat, dann können Sie den '-f' Parameter verwenden um die Einschränkung zu deaktivieren. Wenn Sie zusätzliche Informationen während der Suche erhalten wollen, dann verwenden Sie den '-v' Parameter. Wenn Sie '-o <offset in bytes>' verwenden, dann beginnt die Suche beim Offset und ignoriert den Speicherplatz davor. Das Suchergebnis wird in der Datei 'hfsprescue-data/find-vh.log' abgespeichert. hfsprescue --find-vh [-o <offset in bytes>] [--first] [-f|--force] [-v|--verbose] Beispiel: Nur den Ersten gefundenen HFS+ Volume Header anzeigen.
Falls es nötig ist, können Sie den Volume Header in einer Datei speichern. Siehe hier.
Der Alternate Volume HeaderDer Alternate Volume Header ist ein Backup vom Volume Header und wird 1024 Bytes vor dem Ende der Partition gespeichert. Mit dem Wissen der Position des Alternate Volume Header, der Block Size und der Total Blocks kann man den Start der Partition errechnen. Die Suche nach dem Alternate Volume Header verläuft vom Ende der Festplatte zum Anfang. Das Suchergebnis wird in der Datei 'hfsprescue-data/find-avh.log' abgespeichert. hfsprescue --find-avh [--first] [-f|--force] [-v|--verbose] Beispiel: Nur den Ersten gefundenen HFS+ Alternate Volume Header anzeigen.
Falls es nötig ist, können Sie den Volume Header in einer Datei speichern. Siehe hier.
11. Den HFS+ Volume Header sichernMit dem Parameter '--extract-vh' können den Volume Header in eine Datei sichern. hfsprescue --extract-vh <device node|image file> <LBA sector> [--vh-file <output file>] Zusätzlich zum Device Node / Imagenamen benötigen Sie auch die LBA Sektornummer des Volume Headers. Wenn Sie die LBA Sektornummer nicht wissen, dann können Sie nach dem Volume Header suchen. Siehe dazu Den HFS+ Volume Header oder Alternate Volume Header und den Start der Partition finden. Die Volume Header Datei kann mit verschiedenen Programmmodi verwendet werden. Zum Beispiel '-s1', '-s3', '--one-file' und anderen. Die standard Outputdatei ist './restored/VolumeHeader'. Mit '--vh-file' können Sie einen eigenen Dateinamen festlegen. Beispiel Befehl: hfsprescue --extract-vh /dev/sdb 409642 12. Das Extents Overflow File findenDas Extents Overflow File wird verwendet um die Positionen von Dateifragmenten zu speichern wenn die Datei in mehr als 8 Fragmente aufgeteilt ist. Wenn der Volume Header defekt ist oder eine falsche Position des Extents Overflow Files abgespeichert hat, dann ist es nicht möglich stark fragmentierte Dateien wiederherzustellen. Mit dem Parameter --find-eof kann man eine Suche starten um mögliche Positionen des Extents Overflow Files zu finden. hfsprescue wird mögliche Start Blöcke anzeigen. Ich habe keinen Weg gefunden um das Suchergebnis besser einzugrenzen. Der korrekte Start Block sollte unter den ersten 7 Ergebnissen sein. hfsprescue --find-eof [-b <block size>] [-o <offset in bytes>] [--vh-file <file name>] Hinweis: Wenn der -o <offset in bytes> Parameter verwendet wird, dann werden die Start Block Ergebnisse relativ zum Offset ausgegeben. Hinweis: Wenn der Volume Header defekt ist und Sie ein Backup des Volume Headers in einer Datei haben, dann können Sie diese mit '--vh-file' angeben. Wenn Positionen gefunden wurden, dann kann man das Extents Overflow File in einer Datei speichern. Siehe Das Extents Overflow File sichern. Beispiel:
Info: Falls Sie stark fragmentierte Dateien haben, dann • wird beim Wiederherstellen (Schritt 3) eine entsprechende Meldung im Log ausgegeben. Suchen Sie im Log nach dem Text '_has_extents_overflows_'. 13. Das Extents Overflow File sichernDas Extents Overflow File wird beim Wiederherstellen von stark fragmentierten Dateien benötigt. Bei einem gültigen Volume Header wird das Extents Overflow File automatisch in einer Datei abgespeichert wenn man '-s3' oder '--one-file' verwendet. Mit '--extract-eof' kann man das Extents Overflow File jederzeit als Datei speichern. hfsprescue --extract-eof <device node|image file> [ [--start-block <number>] < [--last-block <number>] | [--num-blocks <number>] > ] [--eof-file <output file>] [--vh-file <file name>] Der Standarddateiname ist './restored/ExtentsOverflowFile'. Mit '--eof-file <output file>' kann man auch einen anderen Namen wählen. Hinweis: Wenn die Partition formatiert wurde, dann ist das Extents Overflow File in den meisten Fällen nicht mehr brauchbar. Gültiger Volume HeaderWenn der Volume Header in Ordnung ist, dann benötigt man für '--extract-eof' keine extra Parameter um das Extents Overflow File in eine Datei zu speichern. Beispiel: 'hfsprescue --extract-eof /dev/sdb1' Signature: 0x2b48, H+ LastMountedVersion: H+Lx, last mount by Linux. FileCount: 4362 DirCount: 144 BlockSize: 4096 TotalBlocks: 244190208 AllocationFile StartBlock: 1 ExtentsOverflowFile StartBlock: 7454 CatalogFile StartBlock: 10270 Total size: 931 GB Extracting the ExtentsOverflowFile to 'restored/ExtentsOverflowFile'. Size: 11534336 bytes, 11.00 MB Clump Size: 11534336 bytes Total Blocks: 2816 Extent 0: Start 7454, Num 2816 Extent 1: Start 0, Num 0 Extent 2: Start 0, Num 0 Extent 3: Start 0, Num 0 Extent 4: Start 0, Num 0 Extent 5: Start 0, Num 0 Extent 6: Start 0, Num 0 Extent 7: Start 0, Num 0 File created. Bei Volume Header ProblemenWenn der Volume Header nicht in Ordnung ist, dann kann man '--find-eof' verwenden um mögliche Positionen des Extents Overflow File zu finden. Mit diesen möglichen Positionen kann man das Extents Overflow File in eine Datei speichern. Wenn mit '--start-block' und '--last-block' / '--num-blocks' gearbeitet wird, dann wird nur der angegebene Bereich in die Datei gespeichert. Sollte das Extents Overflow File selbst auch fragmentiert sein, dann ist es nicht möglich ohne Volume Header das komplette Extents Overflow File zu speichern. Man kann '--vh-file <file name>' verwenden, wenn man den gültigen Volume Header in einer Datei gespeichert hat. Ein einfaches Beispiel: • Zuerst werden mögliche Positionen gesucht. hfsprescue --find-eof /dev/sdb -b 4096 *** Force block size: 4096 Signature: 0x00, (Unknown) LastMountedVersion: , last mount was not done by Mac OS X. FileCount: 0 DirCount: 0 BlockSize: 4096 TotalBlocks: 0 AllocationFile StartBlock: 0 ExtentsOverflowFile StartBlock: 0 CatalogFile StartBlock: 0 Total size: 931 GB Searching block positions of the Extents Overflow File... 1. Possible block: 7710 | File position: 0x1e1e000 2. Possible block: 10526 | File position: 0x291e000 maybe ExtentsOverflowFile or CatalogFile • Dann wird das Extents Overflow File in eine Datei gespeichert. Hier wird der erste Eintrag als Start Block verwendet und der zweite Eintrag als Last Block -1. hfsprescue --extract-eof /dev/sdb -b 4096 --start-block 7710 --last-block 10525 *** Force block size: 4096 Signature: 0x00, (Unknown) LastMountedVersion: , last mount was not done by Mac OS X. FileCount: 0 DirCount: 0 BlockSize: 4096 TotalBlocks: 0 AllocationFile StartBlock: 0 ExtentsOverflowFile StartBlock: 0 CatalogFile StartBlock: 0 Total size: 931 GB Extracting the ExtentsOverflowFile to 'restored/ExtentsOverflowFile'. *** Warning. No extents of the ExtentsOverflowFile will be restored. Extracting blocks from 7710 to 10525. 2816 blocks. File created. Nun sollte das Extents Overflow File getestet werden.
Verwenden Sie 'hfsprescue --list | grep _F_EOF_' um eine betroffene Datei zu finden. Wenn mehrere mögliche Positionen gefunden werden, dann muß man durchprobieren und testen bis man den richtigen Start und Ende des Extents Overflow File findet. 14. Leere Verzeichnisse entfernenIm Schritt 4 wird die komplette Verzeichnisstruktur wiederhergestellt. Dies geschieht auch wenn nur ein paar Dateien im Schritt 3 ausgewählt wurden. Am Ende nach Schritt 6 '-s6' hat man nun viele leere Verzeichnisse. Mit '--remove-empty-dirs' kann man die leeren Verzeichnisse leicht entfernen. hfsprescue --remove-empty-dirs [--dir <directory>] [-f|--force] Als standard Verzeichnis wird './restored' genommen. Sie können allerdings auch Verzeichnis mit '--dir' angeben. Vor dem Entfernen wird der gesamte Pfad des Startsverzeichnisses angezeigt und gefragt ob gestartet werden soll. Nach der Eingabe von 'y' wird mit der Säuberung begonnen. Die Abfrage kann mit '-f' bzw. '--force' verhindert werden. 15. Bytes einer Datei und/oder Unicode String findenMit hfsprescue können Bytes einer Datei und Unicode Strings gesucht werden. Unter anderem kann mit dieser Funktion der Partitionsstart ermittelt werden. Die Parameter -ff and -fi können gleichzeitig in einem Befehl verwendet werden. hfsprescue --find <device node|image file> [-ff <num bytes> <file1> [file2] [...]] [-fs <string>] [-o <offset in bytes>] • Finde Bytes einer oder mehreren Dateien -ff Das Auffinden der Bytes einer Datei (Inhalt) kann unter anderem verwendet werden wenn man den Startoffset einer Partition ermitteln muß. Es macht wenig Sinn nach der kompletten Datei zu suchen, weil die Datei fragmentiert sein kann und deshalb nichts gefunden wird. Die Dateigröße ist nicht limitiert, allerdings wird maximal nach einem 1MB großen Block gesucht. 1MB ist in diesem Fall sehr groß. Ich empfehle 1 Blocksize als Suchblockgröße. Das Ergebnis der Suche wird in der Datei 'hfsprescue-data/find.log' abgespeichert. Wenn Sie '-o <offset in bytes>' verwenden, dann beginnt die Suche beim Offset und ignoriert den Speicherplatz davor. Suche nach Bytes Beispiel 1:
Suche nach Bytes Beispiel 2: Mehrere Dateien
• Suche String -fs Dieser Parameter wird verwendet um Unicode Strings zu finden. Dateinamen sind als Unicode abgespeichert und können mit -fs gefunden werden. Man kann damit die Position von Verzeichniseinträgen finden. Der Parameter wird von hfsprescue automatisch in Unicode umgewandelt. Das Ergebnis der Suche wird in der Datei 'hfsprescue-data/find.log' abgespeichert. Wenn Sie '-o <offset in bytes>' verwenden, dann beginnt die Suche beim Offset und ignoriert den Speicherplatz davor. Suche nach String Beispiel:
16. Dateien & Logs von hfsprescuehfsprescue speichert seine Dateien im './hfsprescue-data/' Verzeichnis, bzw. im Verzeichnis, dass mit '-d' angegeben wird.
Hinweis: Logs werden an die bestehende Logdatei angehängt wenn eine Aktion erneut gestartet wird. Es obliegt dem Benutzer die Logdateien zurück zu setzen bzw. zu löschen. 17. Das 'restored' VerzeichnisDas 'restored' wird in dem Verzeichnis erstellt, in dem hfsprescue gestartet wird bzw. in dem Verzeichnis, dass mit dem Parameter '-d' angegeben wird. Ihre Dateien und Verzeichnisse werden in dieses Verzeichnis wiederhergestellt. Wenn Sie '--one-file' verwenden, dann wird die Datei direkt in das 'recovered' Verzeichnis wiederhergestellt. Nachdem Schritt 6 beendet wurde, befinden sich zusätzliche Dateien und Verzeichnisse im 'restored' Verzeichnis um Ihnen zu helfen den Überblick zu behalten. Verzeichnis: restored/newroot/recovered/ Dort befinden sich die wiederhergestellten Dateien. Verzeichnis: restored/newroot/x_directory_problem/ Verzeichnisse und Dateien die keinem Verzeichnis zugeordnet werden konnten befinden sich hier.
Verzeichnis: restored/newroot/x_unknown/ Es konnte kein passendes Verzeichnis gefunden werden. Möglicherweise sind die Dateien bereits gelöscht worden. Die Dateien in diesem Verzeichnis sind höchstwahrscheinlich defekt. Dateien in restored/newroot/
18. Probleme / FAQDie folgenden Artikel zeigen Gründe warum Dateien nicht richtig wiederhergestellt werden konnten und was man dagegen tun kann. Meistens ist das Problem, daß falsch auf die Partitionsdaten zugegriffen wird. Hier erfahren Sie unter anderem wie der korrekte Partitionsstart ermittelt werden kann. Übersicht: • Wiederhergestellte Dateien sind defekt, warum? 19. Wiederhergestellte Dateien sind defekt! Warum?Die Gründe für defekte Dateien können sein:
In den meisten Fällen wird ein falscher Start der Partition verwendet. Siehe Wie kann ich den Startoffset der Partition ermitteln? 20. Die Partitionstabelle ist defekt, gelöscht, unbrauchbar! Wie kann ich den Startoffset der Partition ermitteln?hfsprescue kann helfen den korrekten Startoffset der Partition zu finden wenn • man mit einer realen Festplatte arbeitet und - die Partitionstabelle wurde beschädigt.ODER • man mit einem Festplattenimage arbeitet und - die Verwendung des Programms kpartx ist nicht möglich. Wann benötige ich den Startoffset der Partition? Wenn Sie auf die Partition nicht zugreifen kann, dann kann hfsprescue nicht die Block Size und den Start Block des Extents Overflow File auslesen. Somit ist es nicht möglich Dateien erfolgreich wieder herzustellen, weil die Dateiposition relativ zum Partitionsstart im Dateisystem abgespeichert sind. Es gibt 2 Möglichkeiten um mit hfsprescue den Start einer Partition zu ermitteln.
21. Wie finde ich den richtigen Startoffset der Partition mit einer ReferenzdateiBevor Sie die Suche starten, müssen die Wiederherstellungsschritte 1 und 2 beendet werden. Wenn dies vor einiger Zeit geschehen ist und die HFS+ Rescue Dateien noch vorhanden sind, dann müssen Sie die Schritte 1 und 2 nicht erneut durchführen. Es ist notwendig die Block Size des defekten Dateisystems zu wissen. Normalerweise ist die Block Size 4096. Bei Partition die größer als 2 TB sind ist eine Block Size von 8192 üblich. Weiters benötigen Sie eine Datei die sich auf der Partition befand. Es ist egal um welche Datei es sich handelt. Es kann eine ausführbare Datei sein (kann von einem funktionierenden Computer kopiert werden) oder eine Bilddatei (vielleicht von einem Backup). Ich bevorzuge eine Bilddatei. Wichtig ist, daß die Datei möglichst selten auf der Partition gespeichert ist, damit Anzahl der möglichen Positionen reduziert wird. 1) Zuerst prüfen Sie ob die Datei bei den Schritten -s1 und -s2 gefunden wurde. Für dieses Beispiel verwende ich eine Datei mit dem Namen 'PerfectPicture.jpg'. hfsprescue --list | grep PerfectPicture.jpg Beispielausgabe: 77: PerfectPicture.jpg, 892187 bytes, Sun May 10 18:21:18 2015, Start block 131074 Großartig, die Datei 'PerfectPicture.jpg' wurde gefunden. Außerdem haben wir Glück, denn die Datei ist nur ein Mal auf der Partition ;). Wenn Sie die Datei mehrmals gefunden wurde, dann verwenden Sie entweder eine andere Datei, oder Sie müssen verschiedene Offsetwerte ausprobieren bis Sie den richtigen Wert ermittelt haben. 2) Der nächste Schritt ist eine Bytesuche nach der Datei auf dem Laufwerk. hfsprescue --find /dev/sdb -ff 4096 PerfectPicture.jpg Beispielausgabe: File bytes found at offset 746586112 + 28672 = 746614784 (0x2c800000 + 0x7000 = 0x2c807000) Großartig, die Bytes der Datei wurden gefunden. Zum Glück nur ein Mal. Wenn die Bytes mehrmals gefunden wurden, dann müssen Sie die folgende Berechnung mit allen Offsets durchführen. 3) Die Formel. offset = byte_search_result - list_start_block * block_size Mit unseren Werten Sie die Formel so aus offset = 746614784 - 131074 * 4096 Wenn Sie keinen Taschenrechner bei der Hand haben, dann können Sie die Shell (Kommandozeile) für die Berechnung verwenden. echo $((746614784 - 131074 * 4096)) Das Ergebnis ist 209735680 Mein einer einfachen Überprüfung kann festgestellt werden ob das Ergebnis gültig sein könnte. Eine Modulo Operation mit dem Wert 512 muß 0 ergeben. 4) Überprüfen ob der berechnette Offset korrekt ist. Stellen Sie eine Datei wieder her indem Sie den Parameter '--one-file' und die Dateinummer (von '--list') und den berechneten Offset verwenden. hfsprescue --one-file /dev/sdb 77 -b 4096 -o 209735680 Dieser Befehl speichert die wiederhergestellte Datei unter 'restored/PerfectPicture.jpg' ab. Nun vergleichen Sie die Referenzdatei mit der wiederhergestellten Datei. diff PerfectPicture.jpg restored/PerfectPicture.jpg Wenn 'diff' keinen Unterschied meldet, dann ist der Offsetwert für die Partition korrekt. Entfernen Sie das 'restored/' Verzeichnis und starten Sie mit Schritt 3 '-s3' und dem berechneten Startwert mit '-o'. Beispiel: hfsprescue -s3 /dev/sdb -b 4096 -o 209735680 22. Unusual block sizeDie richtige Block Size ist notwendig um Dateien wiederherstellen zu können. Die Block Size ist im HFS+ Volume Header gespeichert. Wenn dieser Header beschädigt oder nicht verfügbar ist, dann kann hfsprescue die korrekte Block Size nicht auslesen. Es gibt verschiedene Ursachen für einen fehlerhaften Header. Entweder wurde der Header mit falschen Daten überschrieben, oder auf die Partition wird nicht von deren Anfang zugegriffen (dies ist hauptsächlich der Fehler wenn mit einem Festplattenimage gearbeitet wird). Lösungen:
Normalerweise ist der Wert für die Block Size '4096'. Bei Partitionen die größer als 2 TB sind ist eine Block Size von '8192' üblich. 23. Extents Overflow File ProblemeBei stark fragmentierten Dateien wird das Extents Overflow File benötigt um die Teile der Datei zusammen zu setzen. Das Extents Overflow File ist ein Bereich auf der HFS+ Partition. Wenn dieser Bereich überschrieben wurde, dann gibt es keine Möglichkeit, die betroffenen Dateien wieder herzustellen. Mit '--find-eof' kann man mögliche Start Blöcke vom Extents Overflow File finden. Mit '--extract-eof' kann man Extents Overflow File in einder datei speichern. Diese Datei wird dann beim Wiederherstellungsvorgang verwendet. 24. Permission deniedSie benötigen root Rechte um auf den Datenträger zugreifen zu können. Verwenden Sie 'sudo'. Beispiel: sudo hfsprescue -s1 /dev/sdb2 oder wechseln Sie zum root User mit 'su'. Es kann auch zu Zugriffsproblemen kommen wenn das Dateisystem gemountet ist. In diesem Fall muß man es "unmounten" bevor man hfsprescue verwendet. Mac OS X Benutzer finden hier weitere Details. 25. sudo: hfsprescue: command not foundWenn Sie hfsprescue mit 'sudo' starten und das Programm befindet sich nicht im PATH, dann müssen Sie den Pfad angeben. Beispiel: hfsprescue befindet sich im aktuellen Verzeichnis: sudo ./hfsprescue 26. Precompiled - FATAL: kernel too oldDie x86 Linuxversionen sind mit LibC 2.11 kompiliert. Sollte Ihre Linux Distribution eine ältere LibC Version verwenden, dann erhalten Sie die Fehlermeldung 'FATAL: kernel too old'. In dem Fall müssen Sie hfsprescue auf Ihrem Computer kompilieren. Dafür wird GCC (GNU Compiler Collection) benötigt. 27. Problem mit DateinamenDies betrifft Sie nur wenn Sie mit einem anderen Betriebssystem als Mac OS X Dateien wiedeherstellen. Die Unicode zu UTF-8 Umwandlung der Dateinamen funktioniert nicht vollständig. Es gibt Probleme bei Umlauten, sowie Buchstaben mit einer Tilde usw. Problem Behebung: Die fehlerhaften Buchstaben sollten korrigiert werden, wenn Sie die wiederhergestellten Dateien auf ein HFS+ Dateisystem kopieren. Dieser Fehler wird vermutlich in einer kommenden Version behoben. 28. Asiatische DateinamenWenn Sie Dateien mit asiatischen Dateinamen gespeichert hatten, dann müssen Sie den Parameter '--utf8len 2' im Schritt 2 setzten. Beispiel: hfsprescue -s2 --utf8len 2 Wenn utf8len nicht gesetzt wird, dann werden alle Dateien mit asiatischen Dateinamen als ungültige Dateinamen herausgefiltert. Hinweis: Man muß nicht nochmals -s1 durchführen wenn man utf8len ändern will. Einfach nochmal -s2 mit der gewünschten Einstellung starten. 29. Mac OS X HinweiseWenn Sie versuchen Dateien von einem Dateisystem, das automatisch gemountet wird, wieder herzustellen, dann unmounten Sie es mit 'diskutil'. So eine Situation kann eintreten wenn Sie z.B. das Dateisystem ungewollt formatiert haben. Finden Sie den Gerätenamen mit 'mount' heraus. Beispielausgabe: /dev/disk0s2 on / (hfs, local, journaled) devfs on /dev (devfs, local, nobrowse) map -hosts on /net (autofs, nosuid, automounted, nobrowse) map auto_home on /home (autofs, automounted, nobrowse) /dev/disk6s2 on /Volumes/Untitled (hfs, local, nodev, nosuid, journaled, noowners)Die betroffene Partition ist '/dev/disk6s2 (/Volumes/Untitled)'. Unmounten Sie die Partition mit 'sudo diskutil umount /dev/disk6s2'. Nun können Sie mit hfsprescue auf die Partition zugreifen. Beispiel: sudo hfsprescue -s1 /dev/disk6s2 30. PersönlichesIch habe die erste Version des Programms für meinen Nachbar geschrieben. Es war nicht mehr möglich die HFS+ Partition zu mounten. Es kam die Fehlermeldung 'hfs: failed to load catalog file' und ein paar weitere Fehlermeldungen bezüglich B-Tree. Es war mir möglich einen Großteil der Dateien zu retten. Mittlerweile ist das Programm stark verbessert worden und hat viele Funktionen dazu bekommen. Wenn es Probleme gibt, dann kann man mich kontaktieren. © 2024 by
Elmar Hanlhofer |