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

morficzny
źródło

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.

KeithB
źródło
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.

Andrea Monni
źródło
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 ...

Fabio Pedrazzoli
źródło
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.

Domeny Wyróżnione
źródło
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.

Jacek
źródł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
Zobacz dokumentację tar GNU, a także na przykład stronę man tar Tru64 UNIX .
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.

Thornbury
źródło
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

Janne Pikkarainen
źródło
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.

ttwalkertt
źródło
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 

Ravi Teja Mureboina
źródło