Ich habe einen riesigen Ordner aufgeteilt:
$ tar cvpf - somedir | split -b 50000m
… und dann habe ich die geteilten Dateien auf einen anderen Server übertragen und zusammengeführt:
$ cat x* > somedir.tar.gz
aber als ich versuchte, die Datei zu extrahieren, wurden Fehler angezeigt:
$ tar xvf somedir.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Error exit delayed from previous errors
Wie kann ich es wieder in einen Ordner übertragen/extrahieren? Danke
Antwort1
- Sie haben nicht komprimiert, also geben Sie der Zieldatei keinen Namen
somedir.tar.gz
-- nennen Sie siesomedir.tar
- das ist für Ihr Problem nicht wirklich relevant –
tar xvf
hätte trotzdem funktionieren sollen
- das ist für Ihr Problem nicht wirklich relevant –
- Überprüfen Sie noch einmal, ob es sich bei Ihrer Übertragung (insbesondere über FTP) um eine binäre Übertragung (und nicht um eine Textübertragung) handelt.
- Überprüfen Sie abschließend, ob die Dateien tatsächlich korrekt übertragen wurden
- Hierzu sollten Sie die Dateigrößen auf Quell- und Zielseite überprüfen.
- oder noch besser, gleichen Sie die MD5-Summen auf beiden Seiten ab (dadurch wird auch Punkt 2 überprüft)
Wenn Sie die obigen Punkte überprüft haben und die MD5-Summen an beiden Enden übereinstimmen, sollten Sie zunächst versuchen, Ihre Aufteilung zu überprüfen. Funktionieren also der Join und das Tar-TF auf der Quellmaschine?
Wenn Ihr somedir
Verzeichnis sehr groß ist, versuchen Sie den Workflow mit einem kleinen Verzeichnis.
Verwenden Sie es tar cvpf
, um zunächst ein einfaches Tarball zu erstellen, es aufzuteilen und nach einem erneuten Zusammenschluss zu testen.
Kopieren Sie nun die Aufteilung wie zuvor auf Ihren Zielcomputer und testen Sie dort nach einem erneuten Zusammenschluss.
Dies sollte die Lokalisierung Ihres Problems beschleunigen.
Antwort2
Geben Sie Ihrem zusammengesetzten Tarball nicht den Namen somefile.tar.gz
, da esnichtkomprimiert. Um Verwirrung tar
bei der automatischen Komprimierungserkennung zu vermeiden, müssen Sie es unbedingt benennen somefile.tar
.
Zitat aus dem tar
Infohandbuch:
Der Formaterkennungsalgorithmus basiert auf „Signaturen“, speziellen Bytefolgen am Anfang der Datei, die für bestimmte Komprimierungsformate spezifisch sind. Wenn dieser Ansatz fehlschlägt, greift „tar“ auf die Verwendung des Archivnamenssuffixes zurück, um das Format zu bestimmen ...
Was also wahrscheinlich passiert, ist, dass Ihr Tarball nicht mit einer der Signaturen bekannter Komprimierungsmethoden beginnt und daher tar
auf den Dateinamen zurückgreift, um die Komprimierung zu bestimmen. In Ihrem Fall endet der Name mit .gz
, sodass gzip
von Komprimierung ausgegangen wird. Dies führt zu den Fehlern, die Sie erhalten, da die Datei nicht wirklich komprimiert ist.
tl;dr: Benennen Sie das Tarball mit dem .tar
Suffix, nicht .tar.gz
.