tar : 이전 오류로 인해 실패 상태로 종료


78

디렉토리 + 파일 목록을 압축하고 압축하는 작은 스크립트를 작성했습니다.

스크립트가 실행 된 후 사용 가능한 .tar.gz 파일이 생성되므로 스크립트가 성공적으로 실행되는 것 같습니다.

그러나 스크립트가 끝나면이 성가신 메시지가 나타납니다.

tar : 이전 오류로 인해 실패 상태로 종료

스크립트가 작동하는 동안 오류 메시지가 표시되지 않으며 앞서 말한 것처럼 생성 된 파일은 경고 / 오류없이 압축 해제 될 수 있습니다. 백업의 일부로 이것을 사용하고 있기 때문에 심각한 것을 무시하지 않기를 원합니다.

이 오류 / 경고 메시지가 생성되는 가능한 이유는 무엇이며 안전하게 무시할 수 있습니까? 무시할 수 없으면 오류를 진단하고 해결하는 단계는 무엇입니까?

우분투 10.0.4에서 실행 중입니다.

답변:


100

어떤 이유로 든 tar가 지정된 파일을 모두 tar에 추가 할 수없는 경우 해당 메시지가 표시됩니다. 가장 일반적인 파일 중 하나에 대한 읽기 권한이없는 경우입니다. 백업용으로 사용하기 때문에 큰 문제가 될 수 있습니다. -v플래그를 사용하는 경우 플래그를 그대로 두십시오. 그러면 출력이 줄어들고 무슨 일이 일어나고 있는지 알 수 있습니다.


8
제안에 +1합니다 (이전에 'verbose'옵션을 사용하고있었습니다). 파일 중 하나 이상에 권한 문제가 있음을 발견했습니다. 적어도 지금은 이것을 해결하는 방법을 알고 있습니다. 많은 감사
morpheous

예 사용 sudo는이 문제를 해결
whizcreed

-v 플래그를 버리는 것은 훌륭한 조언이며 내 문제를 해결하는 데 도움이되었습니다. 'verbose'는 텍스트 벽 뒤에서 실패의 원인을 모호하게합니다
scottyseus

22

문제는 인수이며, f인수는 파일 이름으로 다음을 취하므로 인수의 마지막이어야합니다.

tar cvzf output.tgz folder

또는

tar -cvzf output.tgz folder

동일하며 오류가 없습니다.


내 문제를 해결했다. tar -zcvfp 오류를 제공하려고했지만 tar -zxvpf를 시도하면 모두 정상적으로 작동합니다. 감사.
Mian Asbat Ahmad 10

6

로그 파일과 같이 백업 중에 변경 될 수있는 파일을 백업하는 경우 tar 옵션 '--ignore-failed-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

나는 이것이 일반적으로 안전하다는 것을 알지만 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 옵션을 해제하여 참조 된 오류를 식별 할 수 있습니다. 검토 결과 오류는 /runand와 같은 디렉토리에서 발생했습니다 /sys.

이 디렉토리를 제외하면 정상적으로 작동합니다. 이것이 비슷한 문제를 가진 사람에게 도움이되기를 바랍니다.


3

나는 같은 문제가 있었다. 내가 한 모든 명령에서 대시 ( "-")를 제거하는 것입니다.

다음과 같이 입력하는 대신

tar -cvfz output.tar.gz 폴더 /

다음과 같이 입력하십시오

tar cvfz output.tar.gz 폴더 /

대시가 내 경우에 문제를 일으키는 이유를 알지 못했지만 적어도 효과가있었습니다.


6
아마도 GNU tar로 이것을 테스트했을 것입니다. 혼동은 두 가지 스타일의 옵션 (대시가없는 "이전 스타일"tar 옵션과 대시가있는 "표준 유닉스"옵션)을 허용한다는 사실에서 비롯됩니다. 대시가있는 옵션은 옵션을 따르는 옵션의 인수가 필요합니다. 따라서이 경우에 대한 논거가 -f있어야 output.tar.gz하고 그 z사이에 있어서는 안됩니다 . 옵션의 순서를 바꾸지 않으면 올바르게됩니다 tar -cvf output.tar.gz -z folder/. 이전 스타일은 한 곳에서 모든 옵션을 기대하며 모든 인수는 다음과 같습니다.
pabouk

참고 항목 GNU 타르 문서 , 예를 들어도과 의 Tru64 UNIX 타르 맨 페이지를 .
pabouk

@pabouk 그 의견은 그 자체로 답을 얻을만한 가치가있는 것으로 보였습니다. 크레딧이 예정된 곳에서 크레딧이 사용되도록 이 질문에 대한 답변으로 해당 주석의 내용을 추가하십시오 .
cwallenpoole

나도 문제가 있었지만 이름이 -v 인 파일 이었으므로 tar는 백업 할 수있는 파일과 관련하여 몇 가지 버그가있는 것 같습니다 ... 문제가되지 않아야합니다. rm과 mv가 작동하지 않기 때문에 내 해결 방법은 파일 관리자를 사용하는 것이 었습니다. 따라서 mv와 rm도 버그가 있습니다. mv '-v'v와 rm '-v'를 시도했지만 오류 메시지가 나타납니다. tar는 tar 파일을 통계 할 수 없다고 언급했습니다. –cfjv를 사용하고있었습니다
Jim Michaels

1

이전 답변을 오해했습니다. 문제는가 아닙니다 . 인수 목록에서 -가있는 곳 f입니다.

tar cvfz target.tgz <files>

뒤에 나오는 텍스트 인 "z"라는 아카이브를 작성하려고합니다 f. tar는 "z"아카이브에 추가 할 "target.gz"를 찾을 수 없기 때문에 오류 메시지가 표시됩니다.

tar cvzf target.tgz <files>

target.tgz를 올바르게 작성하고 파일을 추가합니다. target.tgz가 f인수 다음의 첫 번째 텍스트이기 때문 입니다.


"혼란 된"회신에 주석으로 추가해야합니다. 불행히도 50 점의 평판을 얻은 후에 만 ​​그러한 의견을 추가 할 수 있습니다. 주제 : 당신은 그것을 테스트 했습니까? GNU tar 1.26으로 테스트했으며 대시가 있거나없는 변형은 jack의 응답에 설명 된 것처럼 실제로 다릅니다. 회신에 기록 된대로 동작합니다.
pabouk

0

일반적으로 해당 메시지를 무시할 수 있습니다. tar 작성 중에 기본 디렉토리 트리에 파일 삭제 / 작성 / 수정과 같은 변경 사항이 있으면 해당 메시지가 표시됩니다. 또한 장치 노드, fifo 등과 같은 특수 파일이 있으면 경고가 발생합니다.

범인 파일이 보이지 않습니까? 함께 시도tar cvfz yourtarball.tgz /your/path


0

받은 파일의 압축을 풀고 비슷한 문제가 발생했습니다. 루트 소유의 아카이브에 파일을 쓸 수있는 권한이 없었습니다. sudo를 사용하여 수정했습니다.


0

초보자 에게이 오류가 발생하는 이유 중 하나는
파일이 존재하는 디렉토리에서 작업을 수행하는 것을 잊습니다.
해당 위치로 이동하여 명령을 수행하십시오. 
파일이 데스크탑에 있으므로 
~ / Desktop # tar-cf done.tar abc xyz
xyz와 abc는 파일이며 done.tar에 파일을 저장합니다.
다른 위치에서 명령을 수행하면 오류가 발생합니다. 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.