tar: вихід із статусом відмови через попередні помилки


78

Я написав невеликий сценарій, який зіставляє та стискає список каталогів + файлів.

Схоже, сценарій запускається успішно, оскільки після запуску сценарію створюється корисний файл .tar.gz.

Однак я отримую це дратівливе повідомлення після закінчення сценарію:

tar: вихід із статусом відмови через попередні помилки

Я не бачу жодних повідомлень про помилки, поки сценарій працює, і, як я вже сказав, створений файл може бути розпакований без попереджень / помилок. Оскільки я використовую це як частину резервного копіювання, я хочу переконатися, що я не ігнорую щось серйозне.

Які можливі причини створення цього повідомлення про помилку / попередження - і чи можу я його безпечно ігнорувати ?. Якщо я не можу проігнорувати, які кроки для діагностики та усунення помилки?

Я працюю на Ubuntu 10.0.4

Відповіді:


100

Це повідомлення ви отримаєте, якщо з будь-якої причини tar не зможе додати всі вказані файли до tar. Один, якщо найпоширеніший - це не дозвіл на читання на одному з файлів. Це може бути великою проблемою, оскільки ви використовуєте це для резервного копіювання. Якщо ви використовуєте -vпрапор, спробуйте його вимкнути. Це повинно зменшити вихід і дати вам бачити, що відбувається.


8
+1 для пропозиції (я раніше використовував варіант "багатослівний"). Я виявив, що принаймні один із файлів вийшов дозвіл. Принаймні зараз я знаю, як це вирішити. велике спасибі
марнотворний

так, використовуючи sudo виправили цю проблему
викрито

викидання прапора -v - чудова порада і допомогло мені вирішити свою проблему. 'багатослівний' затьмарює причину відмови за стіною тексту
scottyseus

22

проблема полягає в аргументі, fаргумент приймає наступний як ім'я файлу, тому він повинен бути останнім аргументом

tar cvzf output.tgz folder

або

tar -cvzf output.tgz folder

те саме, і помилки не приймаються.


Вирішив мою проблему. Я намагався tar -zcvfp давати помилку, але коли спробував tar -zxvpf, то все добре. Дякую.
Міан Асбат Ахмад

6

Іноді резервне копіювання файлів, які можуть змінюватися під час резервного копіювання, як логін, вам може бути корисна опція tar '--ignore-fail-read' (я перебуваю на Debian Linux, не впевнений, що це не gnu tar).

Стандартний вихід і помилки можна переспрямовувати у двох різних файлах із чимось на зразок:

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

Я вважаю це загалом безпечним, але будьте обережні, хоча дьоготь не зупиниться ...


5

У мене було те саме питання, і жоден із наведених відповідей не працював на мене. Однак я виявив, що працює наступна команда:

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

Помилки, на які посилалися, tar: Exiting with failure status due to previous errorsможна визначити, вимкнувши опцію -v. Після огляду помилки з’явилися в каталогах типу « /runта» /sys.

Виключаючи ці каталоги, він працює чудово. Сподіваюсь, це допоможе кожному, хто має подібне питання.


3

У мене була така ж проблема. Все, що я зробив, - це зняти тире ("-") з команди.

Замість того, щоб вводити це як

папка tar -cvfz output.tar.gz /

спробуйте ввести це як

папка tar cvfz output.tar.gz /

Мені невідомо, чому тире викликав проблеми в моєму випадку, але принаймні це спрацювало.


6
Ви, ймовірно, перевірили це за допомогою дьогтю GNU. Ваша плутанина випливає з того, що вона приймає два різні варіанти варіантів - опції "tar-style" тар без тире та "standard unix" варіанти з тире. Параметри з тире вимагають аргументу опції, щоб слідувати за параметром. Тож у цьому випадку аргумент за -fповинен бути, output.tar.gzа між ними не повинно бути z. Без повторного упорядкування варіантів було б правильно бути: tar -cvf output.tar.gz -z folder/. Старий стиль очікує, що всі варіанти в одному місці і всі аргументи випливають.
пабук

Дивіться документацію на GNU tar, а також, наприклад, сторінку Tru64 UNIX tar tar .
pabouk

@pabouk Цей коментар здавався гідним, щоб відповісти сам по собі. Будь ласка, додайте вміст цього коментаря як відповідь на це запитання, щоб кредит надійшов там, де належить кредит.
cwallenpoole

У мене також були проблеми, але це був файл з назвою -v, тому, мабуть, tar має деякі помилки щодо того, які файли він може створити для резервного копіювання ... це не повинно бути проблемою. моє вирішення, оскільки rm і mv не працюватимуть, було використовувати файловий менеджер. так що очевидно mv та rm також баггі. Я спробував mv '-v' v та rm '-v', але отримав повідомлення про помилки. tar згадував, що не може встановити файл tar. використовував -cfjv
Джим Майклс

1

Ви неправильно зрозуміли попередню відповідь. Проблема не в тому -, що fце у вашому списку аргументів.

tar cvfz target.tgz <files>

Спробуємо створити архів під назвою "z", як це текст після f. Повідомлення про помилку полягає в тому, що tar не може знайти "target.gz", який слід додати до архіву "z".

tar cvzf target.tgz <files>

Правильно створить target.tgz і додасть до нього файли. Це тому, що target.tgz - це перший текст після fаргументу.


Це слід додати як коментар до "заплутаної" відповіді. На жаль, ви зможете додавати такі коментарі лише після отримання 50 балів репутації. До теми: Ви тестували? Я перевірив його на GNU tar 1.26, і варіанти з тире і без нього дійсно відрізняються, як описано у відповіді джека. Він поводиться так, як написано у відповіді.
pabouk

0

Зазвичай ви можете ігнорувати це повідомлення. Якщо якісь зміни (наприклад, видалення файлів / створення / модифікації) базового дерева каталогів під час створення tar, воно перекине це повідомлення. Крім того, якщо існують спеціальні файли, такі як вузли пристроїв, фіфоси тощо, вони спричинить це попередження.

Ви впевнені, що не можете побачити жодних файлів винуватця? Спробуйте зtar cvfz yourtarball.tgz /your/path


0

У мене була подібна проблема, коли знімається отриманий файл. Виявляється, я не мав дозволу писати файли в архів, що належить root. За допомогою судо виправили це.


0

Однією з причин отримати ці помилки для початківців є те, що
Вони забувають виконувати операції в каталозі, де є файли
Перейдіть до цього місця та виконайте команду 
Оскільки мої файли знаходяться на робочому столі 
~ / Настільний # tar - cf done.tar abc xyz
Там, де xyz та abc - файли, і ми зберігаємо ці файли у done.tar
Якщо ми підемо і виконаємо команду в іншому місці, ми отримаємо вище помилку 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.