tar: saindo com status de falha devido a erros anteriores

78

Eu escrevi um pequeno script que tarra e comprime uma lista de diretórios + arquivos.

O script parece ser executado com êxito, pois um arquivo .tar.gz utilizável é criado após a execução do script.

No entanto, recebo esta mensagem irritante depois que o script termina:

tar: saindo com status de falha devido a erros anteriores

Não vejo nenhuma mensagem de erro enquanto o script está funcionando e, como eu disse, o arquivo produzido pode ser descompactado sem avisos / erros. Como estou usando isso como parte do meu backup, quero ter certeza de que não estou ignorando algo sério.

Quais são os possíveis motivos pelos quais essa mensagem de erro / aviso está sendo produzida - e posso ignorá-la com segurança? Se eu não conseguir ignorá-lo, quais são as etapas para diagnosticar e resolver o erro?

Estou executando no Ubuntu 10.0.4

morfoso
fonte

Respostas:

100

Você receberá essa mensagem se, por qualquer motivo, o tar não puder adicionar todos os arquivos especificados ao tar. Um, se o mais comum não for ter permissão de leitura em um dos arquivos. Isso pode ser um grande problema, pois você está usando isso para backup. Se você estiver usando a -vbandeira, tente desativá-la. Isso deve reduzir a saída e permitir que você veja o que está acontecendo.

KeithB
fonte
8
+1 para a sugestão (eu estava usando a opção 'detalhada' anteriormente). Descobri que havia um problema de permissão em pelo menos um dos arquivos. Pelo menos agora eu sei como resolver isso. muito obrigado
morpheous
Sim, o uso do sudo corrigiu o problema
whizcreed 17/11/2015
abandonar a bandeira -v é um ótimo conselho e me ajudou a resolver meu problema. 'verbose' obscurece a causa da falha atrás de uma parede de texto
scottyseus
22

o problema é o argumento, o fargumento assume o próximo como o nome do arquivo, portanto deve ser o último argumento

tar cvzf output.tgz folder

ou

tar -cvzf output.tgz folder

é o mesmo e sem erro.

Andrea Monni
fonte
Resolveu o meu problema. Eu estava tentando tar -zcvfp dando erro, mas quando tentei tar -zxvpf, então tudo bem. Obrigado.
Mian Asbat Ahmad 27/02
6

Às vezes, fazendo backup de arquivos que podem mudar durante o backup, como arquivos de log, você pode achar útil a opção tar '--ignore-failed-read' (eu estou no Debian Linux, não tenho certeza sobre o tar não gnu).

A saída e o erro padrão podem ser redirecionados em 2 arquivos diferentes, com algo como:

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

Acho que isso geralmente é seguro, mas tenha cuidado, pois o alcatrão não para ...

Fabio Pedrazzoli
fonte
5

Eu estava tendo o mesmo problema e nenhuma das respostas acima funcionou para mim. No entanto, descobri que executar o seguinte comando funcionava:

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

Os erros que estavam sendo mencionados em tar: Exiting with failure status due to previous errorspodem ser identificados desativando a opção -v. Após a revisão, os erros vieram de diretórios como /rune /sys.

Ao excluir esses diretórios, ele funciona bem. Espero que isso ajude qualquer pessoa com um problema semelhante.

DomíniosFeatured
fonte
3

Eu tive o mesmo problema. Tudo o que fiz foi remover o traço ("-") do comando.

Em vez de digitá-lo como

pasta tar -cvfz output.tar.gz /

tente digitá-lo como

pasta tar cvfz output.tar.gz /

Não sei por que o traço estava causando problemas no meu caso, mas pelo menos funcionou.

jack
fonte
6
Você provavelmente testou isso com o tar GNU. Sua confusão vem do fato de aceitar dois estilos diferentes de opções - as opções tar "antiquadas" sem traço e as opções "unix padrão" com traço. As opções com traço requerem um argumento de uma opção para segui-la. Portanto, neste caso, o argumento a favor -fdeve ser output.tar.gze não deve haver zno meio. Sem re-ordenamento das opções seria corretamente ser: tar -cvf output.tar.gz -z folder/. O estilo antigo espera todas as opções em um só lugar e todos os argumentos a seguir.
Pabouk
Consulte a documentação tar do GNU e também, por exemplo , a página do manual tar do Tru64 UNIX .
Pabouk
@pabouk Esse comentário parecia digno de ser uma resposta por si só. Adicione o conteúdo desse comentário como resposta a esta pergunta para que o crédito chegue ao seu vencimento.
Cwallenpoole 29/05
Eu também tive problemas, mas era um arquivo com o nome -v, então aparentemente o tar possui alguns erros em relação aos arquivos que ele pode fazer backup ... isso não deve ser um problema. minha solução alternativa, já que rm e mv não funcionariam, era usar um gerenciador de arquivos. então aparentemente mv e rm também são bugs. Eu tentei mv '-v' ve rm '-v', mas recebi mensagens de erro. o tar mencionou que não pôde declarar o arquivo tar. estava usando -cfjv
Jim Michaels
1

Você entendeu mal uma resposta anterior. O problema não é o -, é onde festá na sua lista de argumentos.

tar cvfz target.tgz <files>

Tentará criar um arquivo chamado "z", como é o texto a seguir f. A mensagem de erro é porque o tar não pode encontrar "target.gz" para adicionar ao arquivo "z".

tar cvzf target.tgz <files>

Cria corretamente o target.tgz e adiciona arquivos a ele. Isso ocorre porque target.tgz é o primeiro texto após o fargumento.

Thornbury
fonte
Isso deve ser adicionado como um comentário à resposta "confusa". Infelizmente, você poderá adicionar esses comentários somente depois de ganhar 50 pontos de reputação. Para o sujeito: você testou? Eu testei com o GNU tar 1.26 e as variantes com e sem traço são realmente diferentes, conforme descrito na resposta do jack. Ele se comporta como está escrito na resposta.
Pabouk
0

Geralmente você pode ignorar essa mensagem. Se houver alguma alteração (como exclusões / criações / modificações de arquivo) na árvore de diretórios subjacente durante a criação do tar, ela emitirá essa mensagem. Além disso, se houver arquivos especiais como nós do dispositivo, fifos e assim por diante, eles causarão esse aviso.

Tem certeza de que não consegue ver nenhum arquivo culpado? Tente comtar cvfz yourtarball.tgz /your/path

Janne Pikkarainen
fonte
0

Eu tive um problema semelhante ao desarmar um arquivo que recebi. Acontece que eu não tinha permissão para gravar os arquivos no arquivo morto pertencente ao root. Usando o sudo foi corrigido.

ttwalkertt
fonte
0

Uma das razões para obter esses erros para iniciantes é que
Eles esquecem de executar operações no diretório em que os arquivos estão presentes
Vá para esse local e execute o comando 
Como meus arquivos estão na área de trabalho 
~ / Desktop # tar - cf done.tar abc xyz
Onde xyz e abc são arquivos e estamos armazenando esses arquivos em done.tar
Se executarmos o comando em outro local, ficaremos acima do erro 

Ravi Teja Mureboina
fonte