2010-07-29 07:17:55 +0000 2010-07-29 07:17:55 +0000
84
84

alcatrão: Saída com estado de falha devido a erros anteriores

Escrevi um pequeno guião que faz alcatrão e comprime uma lista de directórios + ficheiros.

O script parece correr com sucesso, na medida em que um ficheiro .tar.gz utilizável é criado após a execução do script.

Contudo, recebo esta mensagem irritante após o script terminar:

tar: Sair com estado de falha devido a erros anteriores

Não vejo qualquer mensagem de erro enquanto o script está a funcionar, e como já disse, o ficheiro produzido pode ser descomprimido sem avisos/erros. Uma vez que estou a usar isto como parte do meu backup, quero certificar-me de que não estou a ignorar algo sério.

Quais são as possíveis razões para que esta mensagem de erro/aviso esteja a ser produzida - e posso ignorá-la em segurança? Se não puder ignorá-la, quais são os passos para diagnosticar e resolver o erro?

Estou a correr no Ubuntu 10.0.4

Respostas (9)

106
106
106
2010-07-29 11:22:18 +0000

Receberá essa mensagem se, por qualquer razão, o alcatrão não puder adicionar todos os ficheiros especificados ao alcatrão. Uma se a mais comum for não ter permissão de leitura num dos ficheiros. Isto pode ser um grande problema, uma vez que está a usar isto para backup. Se estiver a utilizar a bandeira -v, tente deixá-la de fora. Isto deverá reduzir a saída e permitir-lhe ver o que se está a passar.

23
23
23
2013-01-28 09:21:24 +0000

o problema é o argumento,f argumento tomar o próximo como o nome do ficheiro, por isso deve ser o último do argumento

tar cvzf output.tgz folder

ou

tar -cvzf output.tgz folder

é o mesmo e não há erro de tomada.

6
6
6
2014-01-17 12:24:36 +0000

Por vezes, fazer o backup de ficheiros que podem mudar durante o backup como ficheiros de registo, pode achar útil a opção de tar ‘–ignore-failed-read’ (estou em Debian Linux, não tenho a certeza para tar não gnu).

Saída e erro padrão podem ser redireccionados em 2 ficheiros diferentes com algo parecido:

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 isto é geralmente seguro, mas por favor tenha cuidado pois o alcatrão não vai parar …

5
5
5
2016-10-10 15:03:38 +0000

Eu estava a ter o mesmo problema e nenhuma das respostas acima funcionava 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 a ser referidos em tar: Exiting with failure status due to previous errors podem ser identificados desligando a opção -v. Após revisão, os erros vieram de directórios como /run e /sys.

Ao excluir estes directórios, funciona muito bem. Espero que isto ajude qualquer pessoa com um problema semelhante.

3
3
3
2011-09-10 23:06:14 +0000

Eu tinha o mesmo problema. Tudo o que fiz foi remover o traço (“-”) do comando.

Em vez de o escrever como

tar -cvfz output.tar.gz folder/

Tente escrevê-lo como

tar cvfz output.tar.gz folder/

Não sei porque é que o traço estava a causar problemas no meu caso, mas pelo menos funcionou.

2
2
2
2013-10-19 07:52:47 +0000

Percebeu mal uma resposta anterior. O problema não é o -, é onde o f está na sua lista de argumentos.

tar cvfz target.tgz <files>

Tentará criar um arquivo chamado “z”, pois esse é o texto depois do f. A mensagem de erro é porque o tar não consegue encontrar “target.gz” para adicionar ao arquivo “z”.

tar cvzf target.tgz <files>

Criará correctamente o target.tgz e adicionará ficheiros ao mesmo. Isto porque o target.tgz é o primeiro texto após o argumento f.

0
0
0
2019-10-15 15:49:46 +0000
One of the reason to get this errors for beginners is that They forget to perform operations in the directory where the files are present Go to that location and perform the command As my files are in desktop ~/Desktop# tar - cf done.tar abc xyz Where xyz and abc are files and we are storing those files in done.tar If we go and perform the command in other location we will get above error
0
0
0
2019-04-23 18:33:45 +0000

Tive um problema semelhante que não me incomodou um ficheiro que tinha recebido. Acontece que não tinha autorização para escrever os ficheiros no arquivo que era propriedade da raiz. A utilização do sudo corrigiu-o.

0
0
0
2010-07-29 07:26:01 +0000

Normalmente pode ignorar essa mensagem. Se houver quaisquer alterações (tais como eliminações/criações/modificações de ficheiros) à árvore de directório subjacente durante a criação de alcatrão, a mensagem será atirada. Também se houver ficheiros especiais como nós de dispositivos, fifos e assim por diante, eles causarão esse aviso.

Tem a certeza de que não consegue ver nenhum ficheiro de culpados? Tente com tar cvfz yourtarball.tgz /your/path&