tar: wychodzenie ze statusem niepowodzenia z powodu poprzednich błędów


78

Napisałem mały skrypt, który przetwarza i kompresuje listę katalogów + plików.

Wydaje się, że skrypt działa poprawnie, ponieważ po uruchomieniu skryptu tworzony jest użyteczny plik .tar.gz.

Jednak ten denerwujący komunikat pojawia się po zakończeniu skryptu:

tar: wychodzenie ze statusem niepowodzenia z powodu poprzednich błędów

Nie widzę żadnych komunikatów o błędach podczas działania skryptu i, jak powiedziałem, wygenerowany plik można rozpakować bez ostrzeżeń / błędów. Ponieważ używam tego jako części kopii zapasowej, chcę się upewnić, że nie ignoruję czegoś poważnego.

Jakie są możliwe przyczyny wyświetlania tego komunikatu o błędzie / ostrzeżenia - i czy mogę go bezpiecznie zignorować ?. Jeśli nie mogę go zignorować, jakie są kroki do zdiagnozowania i rozwiązania błędu?

Korzystam z systemu Ubuntu 10.0.4

Odpowiedzi:


100

Otrzymasz tę wiadomość, jeśli z jakiegokolwiek powodu tar nie będzie mógł dodać wszystkich określonych plików do tar. Jeden, jeśli najczęściej nie ma uprawnień do odczytu jednego z plików. To może być duży problem, ponieważ używasz tego do tworzenia kopii zapasowych. Jeśli używasz -vflagi, spróbuj ją wyłączyć. Powinno to zmniejszyć wydajność i pozwolić zobaczyć, co się dzieje.


8
+1 za sugestię (wcześniej korzystałem z opcji „szczegółowe”). Odkryłem, że wystąpił problem z uprawnieniami co najmniej jednego z plików. Przynajmniej teraz wiem, jak to rozwiązać.
— wielkie

tak przy użyciu sudo naprawiono problem
— świst

porzucenie flagi -v jest świetną radą i pomogło mi rozwiązać mój problem. „verbose” przesłania przyczynę niepowodzenia za ścianą tekstu
— Szkot

22

problemem jest argument, fargument przyjmuje następny jako nazwę pliku, więc musi to być ostatni argument

tar cvzf output.tgz folder

lub

tar -cvzf output.tgz folder

jest taki sam i nie ma błędu.


Rozwiązałem mój problem. Próbowałem tar -zcvfp dając błąd, ale kiedy spróbowałem tar -zxvpf, wszystko w porządku. Dzięki.
— Mian Asbat Ahmad

6

Czasami tworzenie kopii zapasowych plików, które mogą ulec zmianie podczas tworzenia kopii zapasowej, takich jak pliki dziennika, może być przydatna opcja tar „--ignore-failed-read” (korzystam z systemu Debian Linux, nie jestem pewien, czy nie jest to program GNU tar).

Standardowe wyjście i błąd można przekierować w 2 różnych plikach za pomocą czegoś takiego:

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

Uważam, że jest to ogólnie bezpieczne, ale uważaj, ponieważ smoła się nie zatrzyma ...


5

Miałem ten sam problem i żadna z powyższych odpowiedzi nie działała dla mnie. Stwierdziłem jednak, że uruchomienie następującego polecenia działało:

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

Błędy, o których mowa, tar: Exiting with failure status due to previous errorsmożna zidentyfikować, wyłączając opcję -v. Po sprawdzeniu błędy pochodziły z katalogów takich jak /runi /sys.

Wyłączając te katalogi, działa dobrze. Mam nadzieję, że pomoże to każdemu z podobnym problemem.


3

Miałem ten sam problem. Wszystko, co zrobiłem, to usunąć myślnik („-”) z polecenia.

Zamiast wpisywać go jako

tar -cvfz folder output.tar.gz /

spróbuj wpisać to jako

tar cvfz output.tar.gz folder /

Nie wiem, dlaczego kreska powodowała problemy w moim przypadku, ale przynajmniej zadziałało.


6
Prawdopodobnie przetestowałeś to z GNU tar. Twoje zamieszanie wynika z faktu, że akceptuje on dwa różne style opcji - opcje tar w „starym stylu” bez myślnika i opcje „standardowego unixa” z myślnikiem. Opcje z myślnikiem wymagają argumentu opcji, aby podążać za opcją. Tak więc w tym przypadku argumentem za tym -fpowinien być output.tar.gzi nie może być zpomiędzy. Bez ponownego zamawiania opcji byłoby prawidłowo być: tar -cvf output.tar.gz -z folder/. Stary styl oczekuje wszystkich opcji w jednym miejscu i następują wszystkie argumenty.
— pabouk


@pabouk Ten komentarz wydawał się wart samej odpowiedzi. Dodaj treść tego komentarza jako odpowiedź na to pytanie , aby kredyt trafiał tam, gdzie jest on należny.
— cwallenpoole

Miałem również problemy, ale był to plik o nazwie -v, więc najwyraźniej tar ma pewne błędy w odniesieniu do plików, które może wykonać kopię zapasową ... nie powinno to stanowić problemu. moim obejściem, ponieważ rm i mv nie działały, było użycie menedżera plików. więc najwyraźniej mv i rm też są wadliwe. Próbowałem mv '-v' v i rm '-v', ale dostałem komunikaty o błędach. tar wspomniał, że nie może stat pliku tar. używał -cfjv
— Jim Michaels

1

Źle zrozumiałeś wcześniejszą odpowiedź. Problem nie polega na tym -, że znajduje się na fliście argumentów.

tar cvfz target.tgz <files>

Spróbuje utworzyć archiwum o nazwie „z”, ponieważ jest to następujący po nim tekst f. Komunikat o błędzie jest spowodowany tym, że tar nie może znaleźć „target.gz” do dodania do archiwum „z”.

tar cvzf target.tgz <files>

Poprawnie utworzy target.tgz i doda do niego pliki. Wynika to z faktu, że target.tgz jest pierwszym tekstem po fargumencie.


Należy to dodać jako komentarz do „zdezorientowanej” odpowiedzi. Niestety będziesz mógł dodawać takie komentarze dopiero po zdobyciu 50 punktów reputacji. Do tematu: Testowałeś to? Testowałem to z GNU tar 1.26, a warianty z i bez myślnika są naprawdę różne, jak opisano w odpowiedzi Jacka. Zachowuje się tak, jak napisano w odpowiedzi.
— pabouk

0

Zwykle możesz zignorować tę wiadomość. Jeśli podczas tworzenia pliku tar pojawią się jakiekolwiek zmiany (takie jak usunięcie / tworzenie / modyfikacja pliku) w drzewie katalogów bazowych, wyśle ​​ten komunikat. Również jeśli pojawią się specjalne pliki, takie jak węzły urządzeń, fifos i tak dalej, spowodują to ostrzeżenie.

Czy na pewno nie widzisz żadnych sprawców? Spróbuj ztar cvfz yourtarball.tgz /your/path


0

Miałem podobny problem z rozpakowaniem otrzymanego pliku. Okazuje się, że nie miałem uprawnień do zapisywania plików w archiwum należącym do roota. Używanie sudo naprawiło to.


0

Jednym z powodów, dla których popełniają te błędy dla początkujących, jest to
Zapominają wykonywać operacje w katalogu, w którym znajdują się pliki
Idź do tej lokalizacji i wykonaj polecenie 
Ponieważ moje pliki są na pulpicie 
~ / Desktop # tar - cf done.tar abc xyz
Gdzie xyz i abc są plikami, a my przechowujemy te pliki w done.tar
Jeśli pójdziemy i wykonamy polecenie w innym miejscu, otrzymamy błąd 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.