tar: Beenden mit Fehlerstatus aufgrund vorheriger Fehler

78

Ich habe ein kleines Skript geschrieben, das eine Liste von Verzeichnissen und Dateien tariert und komprimiert.

Das Skript scheint erfolgreich ausgeführt zu werden, da eine verwendbare .tar.gz-Datei erstellt wird, nachdem das Skript ausgeführt wurde.

Nach Abschluss des Skripts erhalte ich jedoch diese ärgerliche Meldung:

tar: Beenden mit Fehlerstatus aufgrund vorheriger Fehler

Ich sehe keine Fehlermeldungen, während das Skript arbeitet, und wie gesagt, die erzeugte Datei kann ohne Warnungen / Fehler dekomprimiert werden. Da ich dies als Teil meiner Sicherung verwende, möchte ich sicherstellen, dass ich etwas Ernstes nicht ignoriere.

Was sind die möglichen Gründe, warum diese Fehler- / Warnmeldung ausgegeben wird - und kann ich sie ignorieren? Wenn ich es nicht ignorieren kann, welche Schritte sind erforderlich, um den Fehler zu diagnostizieren und zu beheben?

Ich laufe auf Ubuntu 10.0.4

morphe
quelle

Antworten:

100

Sie erhalten diese Meldung, wenn tar aus irgendeinem Grund nicht alle angegebenen Dateien zum tar hinzufügen kann. Eine, wenn die häufigste nicht über Leserechte für eine der Dateien verfügt. Dies kann ein großes Problem sein, da Sie dies für die Sicherung verwenden. Wenn Sie die -vFlagge verwenden, lassen Sie sie aus. Dies sollte die Ausgabe reduzieren und Sie sehen lassen, was los ist.

KeithB
quelle
8
+1 für den Vorschlag (ich habe zuvor die Option 'verbose' verwendet). Ich habe festgestellt, dass bei mindestens einer der Dateien ein Berechtigungsproblem aufgetreten ist. Zumindest weiß ich jetzt, wie ich das beheben kann. Vielen Dank
morphe
yes using sudo hat das Problem
behoben
Das Abwerfen der -v Flagge ist ein guter Rat und hat mir geholfen, mein Problem zu lösen. 'verbose' verdunkelt die Ursache des Scheiterns hinter einer
Textwand
22

das problem ist das argument, fargument nimm das nächste als dateinamen, also muss es das letzte von argument sein

tar cvzf output.tgz folder

oder

tar -cvzf output.tgz folder

ist das selbe und kein take error.

Andrea Monni
quelle
Mein Problem gelöst. Ich habe versucht, tar -zcvfp Fehler zu geben, aber wenn versucht, tar -zxvpf dann alles in Ordnung. Vielen Dank.
Mian Asbat Ahmad
6

Manchmal, wenn Sie Dateien sichern, die sich während der Sicherung ändern, wie z. B. Protokolldateien, kann die tar-Option '--ignore-failed-read' nützlich sein (unter Debian Linux bin ich mir nicht sicher, ob es sich um Nicht-Gnu-Tar handelt).

Standardausgabe und Fehler können in 2 verschiedenen Dateien umgeleitet werden:

LOGDIR='/var/log/mylogdir' 
LOG=${LOGDIR}/backup.log 
ERRLOG=${LOGDIR}/backup.error.log 
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'

tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG

Ich finde das im Allgemeinen sicher, aber bitte seien Sie vorsichtig, da Teer nicht aufhört ...

Fabio Pedrazzoli
quelle
5

Ich hatte das gleiche Problem und keine der obigen Antworten hat für mich funktioniert. Ich fand jedoch, dass das Ausführen des folgenden Befehls funktioniert:

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

Die Fehler, auf die in verwiesen wurde, tar: Exiting with failure status due to previous errorskönnen durch Deaktivieren der Option -v identifiziert werden. Bei der Überprüfung kamen die Fehler aus Verzeichnissen wie /runund /sys.

Durch Ausschließen dieser Verzeichnisse funktioniert es einwandfrei. Hoffe das hilft jedem mit einem ähnlichen Problem.

DomainsFeatured
quelle
3

Ich hatte das gleiche problem Ich habe nur den Bindestrich ("-") aus dem Befehl entfernt.

Anstatt es als zu tippen

tar -cvfz output.tar.gz ordner /

versuchen Sie es als

tar cvfz output.tar.gz ordner /

Ich weiß nicht, warum der Bindestrich in meinem Fall Probleme verursachte, aber es hat zumindest funktioniert.

Jack
quelle
6
Sie haben dies wahrscheinlich mit GNU tar getestet. Ihre Verwirrung ergibt sich aus der Tatsache, dass zwei verschiedene Arten von Optionen akzeptiert werden - die "alten" Teeroptionen ohne Bindestrich und die "Standard-Unix" -Optionen mit Bindestrich. Die Optionen mit Bindestrich erfordern ein Argument einer Option, um der Option zu folgen. Also in diesem Fall sollte das Argument für -fsein output.tar.gzund es darf nicht zdazwischen sein. Ohne Nachbestellung der Optionen wäre es richtig sein: tar -cvf output.tar.gz -z folder/. Der alte Stil erwartet alle Optionen an einem Ort und alle Argumente folgen.
Pabouk
Siehe die GNU tar-Dokumentation und auch die Tru64 UNIX tar-Manpage .
Pabouk
@pabouk Dieser Kommentar schien es wert zu sein, von sich aus beantwortet zu werden. Bitte fügen Sie den Inhalt dieses Kommentars als Antwort auf diese Frage hinzu, damit der Kredit dort gutgeschrieben wird, wo er fällig ist.
Cwallenpoole
Ich hatte auch Probleme, aber es war eine Datei mit dem Namen -v, also hat tar anscheinend einige Fehler in Bezug darauf, welche Dateien gesichert werden können ... dies sollte kein Problem sein. Meine Problemumgehung, da rm und mv nicht funktionieren würden, war die Verwendung eines Dateimanagers. Offensichtlich sind mv und rm auch fehlerhaft. Ich habe mv '-v' v und rm '-v' ausprobiert, aber Fehlermeldungen erhalten. tar erwähnt, dass die tar-Datei nicht gefunden werden konnte. verwendete -cfjv
Jim Michaels
1

Sie haben eine frühere Antwort falsch verstanden. Das Problem ist nicht das -, es ist, wo das fin Ihrer Argumentliste ist.

tar cvfz target.tgz <files>

Versucht, ein Archiv mit dem Namen "z" zu erstellen, da dies der nachfolgende Text ist f. Die Fehlermeldung ist, weil tar "target.gz" nicht finden kann, um es dem Archiv "z" hinzuzufügen.

tar cvzf target.tgz <files>

Erstellt die Datei target.tgz korrekt und fügt ihr Dateien hinzu. Dies liegt daran, dass target.tgz der erste Text nach dem fArgument ist.

Thornbury
quelle
Dies sollte als Kommentar zu der "verwirrten" Antwort hinzugefügt werden. Leider können Sie solche Kommentare erst hinzufügen, wenn Sie 50 Rufpunkte erreicht haben. Zum Thema: Hast du es getestet? Ich habe es mit GNU Teer 1.26 getestet und die Varianten mit und ohne Bindestrich sind wirklich unterschiedlich, wie in der Antwort von Jack beschrieben. Es verhält sich so, wie es in der Antwort steht.
Pabouk
0

Normalerweise können Sie diese Nachricht ignorieren. Wenn während der Tar-Erstellung Änderungen am zugrunde liegenden Verzeichnisbaum vorgenommen werden (z. B. Löschen / Erstellen / Ändern von Dateien), wird diese Meldung ausgegeben. Auch wenn spezielle Dateien wie Geräteknoten, Fifos usw. vorhanden sind, wird diese Warnung ausgegeben.

Sind Sie sicher, dass Sie keine Täterdateien sehen können? Versuche es mittar cvfz yourtarball.tgz /your/path

Janne Pikkarainen
quelle
0

Ich hatte ein ähnliches Problem beim Entpacken einer Datei, die ich erhalten hatte. Es stellte sich heraus, dass ich nicht berechtigt war, die Dateien in das Archiv von root zu schreiben. Mit sudo behoben.

ttwalkertt
quelle
0

Einer der Gründe für diese Fehler für Anfänger ist, dass
Sie vergessen, Vorgänge in dem Verzeichnis auszuführen, in dem sich die Dateien befinden
Gehen Sie zu diesem Speicherort und führen Sie den Befehl aus 
Da meine Dateien auf dem Desktop sind 
~ / Desktop # tar - cf done.tar abc xyz
Wobei xyz und abc Dateien sind und wir diese Dateien in done.tar speichern
Wenn wir den Befehl an einem anderen Ort ausführen, wird der obige Fehler angezeigt 

Ravi Teja Mureboina
quelle