[linux-l] kaputtes .tar-Archiv auslesen

Jan-Benedict Glaw jbglaw at lug-owl.de
Do Apr 12 14:27:07 CEST 2007


On Thu, 2007-04-12 12:37:33 +0200, Christoph Biedl <cbiedl at gmx.de> wrote:
> Volker Wegert wrote...
> > Problem: tar läßt mich das Archiv nicht auspacken. Das Archiv ist etwa
> > 15 GB groß, und nach 3 GB stolpert tar über ein "unexpected EOF" und
> > bricht ab. Ich vermute, daß das an einer der fehlerhaften Dateien liegt.
> > gzip oder bzip2 sind nicht zum Einsatz gekommen - die meisten
> > Suchergebnisse bei Guggel zeigen aber in diese Richtung und helfen mir
> > daher nicht weiter. Hat vielleicht jemand eine Idee, wie ich die Archive
> > dennoch ausgepackt bekomme?
> 
> Wenn mich meine Erinnerung nicht täuscht, ist tar blockweise (512 Bytes)
> für jede Datei. Wenn Du also nach der zerstörten Stelle den Anfang der
> nächsten Datei findest, sollte "alles davor wegschmeißen und aus dem
> Rest ein neues .tar erzeugen" funktionieren. Einen Versuch ist es
> allemal wert.

Ganz so simpel ist es nicht, aber im Prinzip funktioniert das so.

> Das Finden ist auch nicht allzu schwierig, vor der Datei steht ein
> Header mit Dateiname, Attributen etc.pp.

Ich hatte mal ein ähnliches Problem. Von einem tarball, der in mehrere
Häppchen aufgeteilt worden war, ist ein Teil verlorengegangen. Der
Rest hat sich aber recovern lassen.

Ich hab' das damals so gemacht:

  * Mir in einem der tar'schen header files mal die Struktur
    angeguckt, mit der eine neue Datei eingeleitet wird. Da gibts
    ein paar recht charakteristische Merkmale.
  * Um etwas Übung zu erhalten, sucht man so ein Ding eins, zwei Mal
    in einem heilen tarball :-D
  * Dann überschreibt man in einer Kopie des kaputten Stücks den
    Anfang bis dahin, wo wieder so eine Neue-Datei-Struktur ist, mit
    0x00. Der spannende Teil ist, die richtige Stelle zu finden. Dabei
    hilft es z.B. ungeheuer, wenn man weiß, was für Dateien vorher
    oder hinterher im Archiv kommen. Dann kann man anhand der
    Dateigrößen das Fenster, in dem man suchen muß, oft schon
    drastisch verkleinern.

(Was man jetzt gemacht hat, ist, zu sagen, daß das Archiv am Enfang zu
Ende ist:-)

Nun kann man es mit --ignore-zeros auspacken. (Damit kann man auch
tricksen und mehrere tarballs hintereinanderkleben.)

Ist also nur 'ne Sache von 'nen paar Minuten.

MfG, JBG
PS: Unexpected EOF hört sich für mich allerdings wirklich eher nach
einem Problem beim eigentlichen *Lesen* des Archives, nicht beim
Interpretieren des Inhalts. Kannst Du das Ding ohne I/O-Fehler mit
"cat" & Co. lesen?

-- 
      Jan-Benedict Glaw      jbglaw at lug-owl.de              +49-172-7608481
 Signature of:                            If it doesn't work, force it.
 the second  :                   If it breaks, it needed replacing anyway.
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20070412/07918925/attachment.sig>


Mehr Informationen über die Mailingliste linux-l