Gzi pdatei richtigen Anfang finden

Ich habe daten mit tar -xzf backup.tar.gz * zu einem archiv mit 8,3 GB größe gepackt und dann auf einen FTp server geschoben. Dabei ist mir zweimal der kopiervorgang abgebrochen und ich habe mit dem ftp befehl „append“ die gzip datei an die nicht fertig übertragene datei angehängt (das war mir natürlich erst nachher klar).

Jetzt ist die Datei 11,4 Gb groß und nicht ohne weiteres verwendbar. Aber ich bin mir sicher, das die letzten 8,3 Gb ein korrektes gzip archiv beinhalten. Ich muß nur den Anfang der gzip datei finden.

kann man das?
wenn ja: wie mach ich das?
Bonusfrage: wenn ich weiß wo der Dateianfang ist, wie bekomme ich das als einzelne datei? ich würde mit dd herumprobieren, aber wüßte jetzt erstmal nicht wie ich das machen soll.

Jeder sachdienliche Hinweis wird mit virtuellem, starkem Kaffee belohnt!

Hallo A. Hofmann,

Ich habe daten mit tar -xzf backup.tar.gz * zu einem archiv
mit 8,3 GB größe gepackt
ich habe mit dem ftp befehl „append“ die gzip datei an die
nicht fertig übertragene datei angehängt

Aber ich bin mir sicher, das die letzten 8,3 Gb
ein korrektes gzip archiv beinhalten. Ich muß nur den Anfang
der gzip datei finden.

Normalerweise kann man ja versuchen mit

zcat \> 

von defekten gzip-Dateien wenigstens den Anfang zu retten. Da bei dir aber der defekte Teil vorn, und hinten eine ordentliche gzip-Datei dran hängt, weiss ich nicht, ob das auch funktioniert. Kannst es ja mal versuchen.
Sonst fällt mir nur noch folgender Weg ein:
Jede gzip-Datei hat am Anfang eine „magische“ Hex-Bytefolge:

\x1F\x8B\x08

http://de.wikipedia.org/wiki/Gzip
Wenn Du also mit einem geeigneten Hex-Editor von hinten diese Folge von Hex-Zahlen suchst, hättest Du den Anfang der gesuchten Datei. Vorn alles wegschneiden und schon kannst Du wieder entpacken (hoffentlich). Du kannst auch von vorn aus suchen, dann eben bis zum letzten Auftreten. Oder schreib ein kleines Programm, das die Suche und das Abschneiden automatisch durchführt. Kann sein, daß so ein Tool schon existiert, aber ich kenne im Moment keins.
Ich hab das jetzt nicht getestet, aber so müsste es gehen. Aber wie bei den Lottozahlen, ohne Gewähr :wink:

Viel Erfolg
Marvin

habe es selber ausgetüftelt…
falls es jemand interessiert:
mit
od -x kaputtedatei.tar.gz | grep „8b1f XXXX XXXX“
konnte ich herausfinden wo die anderen Dateianfänge sind.

den byteoffset gibt od in oktalwerten an.

wenn man jetzt also mit dd den richtigen teil der datei herauskopieren will, geht das so:

dd bs=YY if=kaputtedatei.tar.gz of=korrektedatei.tar.gz skip=XXX

wobei XXX für den oktalwert von od ins dezimalsystem umgerechnet geteilt durch YY ist, wobei der Teiler natürlich immer ein ganzahliges ergebnis liefern sollte. Bei mir hat 16 funktioniert.
Man kann auch einfach 1 nehmen, dann muß man nicht rumrechnen. Aber dann ist dd wesentlich langsamer.