Wie debugge ich das? Dieses Problem ist in den letzten Tagen plötzlich aufgetreten. Alle Backups einer Website sind beschädigt.
Wenn das Backup nur so belassen wird tar
, gibt es keine Probleme, aber sobald der Teer komprimiert ist gz
oder xz
ich sie nicht mehr dekomprimieren kann.
Es gibt viel freie Festplatte
Local disk space 2.68 TB total / 2.26 TB free / 432.46 GB used
Error
tar: Skipping to next header[===============================> ] 39% ETA 0:01:14
tar: A lone zero block at 2291466===============================> ] 44% ETA 0:01:13
tar: Exiting with failure status due to previous errors
878MiB 0:00:58 [15.1MiB/s] [===================================> ] 44%
Und warum heißt es Skipping to next header
? Das hat es noch nie gemacht. Bei einigen Dateien stimmt etwas nicht.
In den Verzeichnissen befinden sich ca. 15.000 PDF-, JPG- oder PNG-Dateien.
Befehl
pv $backup_file | tar -izxf - -C $import_dir
Es müssen einige Daten vorhanden sein, die die Komprimierung beschädigen.
Ich habe auch versucht, den Zustand der Festplatte folgendermaßen zu überprüfen:
# getting the drives
lsblk -dpno name
smartctl -H /dev/sda
smartctl -H /dev/sdb
Auf beiden Laufwerken bekomme ich folgendes:
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Wie kann ich herausfinden, welche Dateien tar.gz beschädigen? Ich möchte sie nur löschen.
aktualisieren
Habe jetzt alle Dateien auf einen anderen Server kopiert und ich habe genau das gleiche Problem. Ich kann alles tarieren und ohne Probleme extrahieren, aber sobald ich die Dateien komprimieren möchte, kann ich sie nicht dekomprimieren (gz / xz).
quelle
tar -cf xxx.tar ...
ohne Komprimierung ausgeführt werdengzip xxx.tar
? Extrahiert dieser Tarball sauber? Istpv
Probleme verursacht? Was passiert , wenn Sie die Drop -pv ... | ...
Leitungen und nur direkt laufentar -cvzf xxx.tar.gz ...
danntar -xvzf xxx.tar ...
?pv
.Antworten:
Ihre Datei ist entweder abgeschnitten oder beschädigt, sodass
xz
das Ende der Daten nicht erreicht werden kann.tar
beschwert sich, weil das Archiv in der Mitte stoppt, was logisch ist, daxz
es nicht gelungen ist, die gesamten Daten zu lesen.Führen Sie die folgenden Befehle aus, um zu überprüfen, wo das Problem liegt:
Wenn Sie sich
cat
beschweren, ist die Datei auf der Festplatte beschädigt und das Betriebssystem hat die Beschädigung festgestellt. Überprüfen Sie die Kernel-Protokolle auf weitere Informationen. Normalerweise muss die Festplatte an dieser Stelle ausgetauscht werden. Wenn Sie sich nurxz
beschweren, hat das Betriebssystem keine Beschädigung festgestellt, die Datei ist jedoch ungültig (entweder beschädigt oder abgeschnitten). In beiden Fällen können Sie diese Datei nicht wiederherstellen. Sie müssen es von Ihren Offline-Backups zurückholen.quelle
cat
oder irgendetwas anderem würde gemeldet, dass ein Teil der Datei nicht lesbar ist). Die Dateien wurden möglicherweise abgeschnitten (z. B. weil die Festplatte beim Schreiben voll wurde).cat
undxzcat
geben keine Fehler zurück.Ich sehe keine Erwähnung, wie die kaputten TAR-Dateien erstellt werden.
Sie sagen, es handelt sich um Backups von einer Website, aber die Probleme, die Sie anzeigen, treten alle beim Wiederherstellen / Entpacken auf. Dort (in der Quelle) müssen Sie also die Fehlerbehebung durchführen.
Wenn die Dateien nach dem Verschieben der Sicherung auf einen anderen Computer / Speicherort nicht dekomprimiert werden können, müssen sie entweder fehlerhaft erstellt oder beim Transport beschädigt werden.
So lokalisieren Sie die Fehlerquelle:
pv
und ohne-i
)pv
und ohne-i
)Wenn bisher keine Probleme gefunden wurden:
pv
und ohne-i
)Wenn bisher keine Probleme gefunden wurden, erstellt das Sicherungsskript das Archiv nicht auf die gleiche Weise wie bei der manuellen Ausführung (und sollte wahrscheinlich so geändert werden, dass es manuell ausgeführt wird).
Stellen Sie außerdem sicher, dass Sie die absoluten Pfade aller beteiligten Befehle verwenden. Wenn Sie eine fehlerhafte
$PATH
und / oder$LD_LIBRARY_PATH
Variable und einen Eindringling im System haben, verwenden Sie möglicherweise Trojaner-Binärdateien, die unbeabsichtigte Nebenwirkungen verursachen können.Es können natürlich auch inkompatible
tar
Versionen beteiligt sein, es sei denn, beide Systeme sind Debian-Systeme. Sie können versuchen, den POSIX- Modus auf beiden Seiten zu erzwingen .quelle
Sie verwenden die Flagge
-i
, die in ihrer langen Form ist--ignore-zeros
. Aus diesem Grund beschwert sich tar nicht über die beschädigten Dateien. Wenn Sie also Ihre TAR-Datei debuggen möchten, entfernen-i
Sie einfach die Option, und Sie erhalten eine Liste der beschädigten Dateien.Es gibt auch zwei andere Möglichkeiten, um beschädigte Dateien unter Unix zu finden (im Allgemeinen). Ich zitiere eine Antwort in einer anderen Frage.
Als Referenz: Beschädigte Dateien finden
quelle
Die Argumentation von @MattBianco ist die, der ich methodisch folgen würde, um dieses spezielle Problem zu lösen .
Null-Blöcke geben EOF an, dies hängt jedoch vom Blockierungsfaktor ab (der Standardwert ist eine kompilierte Konstante, normalerweise 20). Teers
--compare
|--diff
scheinen implizit mit--ignore-zeros
(-i
) auszuführen .In Anbetracht der zusätzliche Komplikation
pv
, ich vermute ,tar -i
verursachen Probleme fürxz
, bei der Suche tar Mann auf Faktor blockiert Ich würde vorschlagen , zuerst zu entfernen-i
Wenn das nicht hilft, ersetzen Sie durch:
Wenn Sie dies gerade lesen, nachdem Sie "tar: A lone zero block at N" gegoogelt haben und nichts weiterleiten , versuchen Sie es
--ignore-zeros
.quelle