tar: выход с состоянием ошибки из-за предыдущих ошибок


78

Я написал небольшой скрипт, который копирует и сжимает список каталогов + файлов.

Сценарий, по-видимому, успешно выполняется, поскольку после запуска сценария создается пригодный для использования файл .tar.gz.

Тем не менее, я получаю это надоедливое сообщение после завершения скрипта:

tar: выход с состоянием ошибки из-за предыдущих ошибок

Я не вижу никаких сообщений об ошибках во время работы скрипта, и, как я уже сказал, созданный файл может быть распакован без предупреждений / ошибок. Поскольку я использую это как часть своей резервной копии, я хочу убедиться, что я не игнорирую что-то серьезное.

Каковы возможные причины появления этого сообщения об ошибке / предупреждения - и могу ли я смело его игнорировать? Если я не могу проигнорировать это, каковы шаги, чтобы диагностировать и устранить ошибку?

Я работаю на Ubuntu 10.0.4

Ответы:


100

Вы получите это сообщение, если по какой-либо причине tar не сможет добавить все указанные файлы в tar. Один из наиболее распространенных - отсутствие разрешения на чтение одного из файлов. Это может быть большой проблемой, так как вы используете это для резервного копирования. Если вы используете -vфлаг, попробуйте убрать его. Это должно уменьшить выход и позволить вам увидеть, что происходит.


8
+1 за предложение (ранее я использовал опцию «verbose»). Я обнаружил, что существует проблема с разрешением по крайней мере для одного из файлов. По крайней мере, теперь я знаю, как решить эту проблему. большое спасибо
morfheous

да с помощью sudo исправил проблему
whizcreed

отказ от флага -v - отличный совет, который помог мне решить мою проблему. «verbose» скрывает причину неудачи за стеной текста
scottyseus

22

проблема в аргументе, fаргумент принимает следующий как имя файла, поэтому он должен быть последним из аргумента

tar cvzf output.tgz folder

или же

tar -cvzf output.tgz folder

то же самое и не принимать ошибку.


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

6

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

Стандартный вывод и ошибка могут быть перенаправлены в 2 разных файла что-то вроде:

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

Я считаю, что это в целом безопасно, но, пожалуйста, будьте осторожны, поскольку tar не остановится ...


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 folder /

попробуйте ввести это как

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

Я не знаю, почему приборная панель вызывала проблемы в моем случае, но по крайней мере это работало.


6
Вы, наверное, проверяли это с помощью GNU tar. Ваше заблуждение происходит из-за того, что он принимает два разных стиля опций - опции tar «старого стиля» без тире и опции «стандартного unix» с тире. Параметры с дефисом требуют аргумента параметра, чтобы следовать за параметром. Таким образом, в этом случае аргумент -fдолжен быть output.tar.gzи не должно быть zмежду. Без повторного упорядочения вариантов было бы правильно быть: tar -cvf output.tar.gz -z folder/. Старый стиль предполагает, что все параметры находятся в одном месте, и все аргументы следуют.
Пабук


@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, и варианты с и без черты действительно отличаются, как описано в ответе jack. Он ведет себя так, как написано в ответе.
Пабук

0

Обычно вы можете игнорировать это сообщение. Если есть какие-либо изменения (такие как удаление / создание / изменение файлов) в базовом дереве каталогов во время создания tar, он выдаст это сообщение. Также, если есть специальные файлы, такие как узлы устройства, fifos и т. Д., Они вызовут это предупреждение.

Вы уверены, что не видите никаких файлов преступников? Попробуй сtar cvfz yourtarball.tgz /your/path


0

У меня была похожая проблема, не связанная с файлом, который я получил. Оказывается, у меня не было разрешения на запись файлов в архив, принадлежащий root. Использование sudo исправило это.


0

Одна из причин, чтобы получить эти ошибки для начинающих является то, что
Они забывают выполнять операции в каталоге, где находятся файлы
Перейдите в это место и выполните команду 
Как мои файлы находятся на рабочем столе 
~ / Рабочий стол # tar - cf done.tar abc xyz
Где xyz и abc - файлы, и мы храним эти файлы в done.tar
Если мы пойдем и выполним команду в другом месте, мы получим ошибку выше 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.