suprimir aviso rsync: alguns arquivos desapareceram antes que pudessem ser transferidos

14

Recebo muitos avisos ao fazer backup dos meus arquivos de servidor Postfix e Courier em execução, como:

file has vanished: /var/kunden/mail/username/[email protected]/tmp/courier.lock

Como suprimir esses avisos rsyncao executá-lo no Cron /usr/bin/rsnapshot hourly?

De alguma forma, posso excluir esses diretórios?

/var/kunden/mail/*/*/tmp/

a tmppasta também pode ser mais profunda, por exemplo:

file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/courier.lock
rubo77
fonte

Respostas:

6

Você pode usar rsynco interruptor de exclusão ( --exclude):

$ rsync -avz --exclude '**/tmp/' source/ destination/

Especificado dessa maneira --exclude '**/tmp/'ignorará qualquer caminho que inclua a sequência /tmp/. Você também pode fornecer padrões para esses argumentos.

Exemplo

$ rsync -avz --exclude '/path/to/*/tmp/' source/ destination/

Excluirá em trajetos da forma: /path/to/*/tmp/.

slm
fonte
então eu tenho que tentar rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77
@ rubo77 - ele ignorará todos os diretórios que incluem /tmp/neles como eu escrevi. Se você quiser ser mais explícito, sim, você pode especificá-lo como você escreveu.
slm
@ rubo77 --exclude='/tmp/'exclui apenas o diretório chamado tmpna raiz da cópia. Para excluir todos os subdiretórios chamados em tmpqualquer lugar, use --exclude='**/tmp/'.
Gilles 'SO- stop be evil'
1
... ou use um sistema de arquivos com snapshots ... parece problemático restaurar um backup em que os arquivos desaparecem no meio ... a menos que sejam inconseqüentes; nesse caso, sim, eles provavelmente devem ser excluídos ...
Erk
19

Infelizmente, diferente do descrito na solução SWdream, --ignore-missing-argsnão tem impacto nos arquivos desaparecidos. Ele simplesmente ignorará os argumentos de origem que não existem.

Veja man rsync:

  --ignore-missing-args
          When rsync is first processing the explicitly  requested  source
          files  (e.g. command-line arguments or --files-from entries), it
          is normally an error if the file cannot be found.   This  option
          suppresses  that  error,  and does not try to transfer the file.
          This does not affect subsequent vanished-file errors if  a  file
          was initially found to be present and later is no longer there.

A maneira "oficial" de ignorar o arquivo desaparecido é usar este script do repositório oficial de fontes rsync: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- desapareceu; hb = CABEÇA

que é muito parecido com o que @kenorb e @ gilles-quenot disseram.

Benoit Jacquemont
fonte
13

O motivo é que esses arquivos existiam enquanto o rsync criava a lista de arquivos a serem transferidos, mas foram removidos antes da transferência.

É uma massagem de aviso, não um erro. No entanto, você deve tentar descobrir por que esses arquivos foram excluídos. Talvez isso seja importante.

Para ignorar esse aviso, você pode usar a opção --exclude como a pergunta acima ou usar a -ignore-missing-argsopção rsync, faz com que o rsync ignore os arquivos desaparecidos: --ignore-missing-args ignore missing source args without error talvez ajude.

SWdream
fonte
Isto parece definitivamente melhor do que a verificação de um código de retorno específico e substituindo-lo a 0.
Boicote SE para Monica Cellio
Exceto em casos raros, os arquivos que desaparecem durante um backup ao vivo são perfeitamente normais (muitos aplicativos criam arquivos temporários de curta duração). Isso é especialmente verdade no caso de um servidor de email, onde arquivos contendo mensagens de email são constantemente movidos de um diretório para outro, portanto, IMHO essa resposta é mais adequada do que a aceita pelo OP.
MoonSweep
1
Infelizmente, esta opção não existe em todas as versões do rynsc. Em particular, 3.0.6, que é fornecido com o CentOS 6.
jph 15/06
3
essa opção afeta apenas os arquivos nomeados nos argumentos, aqueles encontrados durante a pesquisa recursiva ainda são avisados.
Jasen
6

O erro significa que rsyncnão é mais possível encontrar os arquivos existentes ao criar a lista para transferência. Esses erros de arquivo desaparecido acontecem quando um arquivo foi encontrado inicialmente presente e mais tarde não está mais lá. Em alguns casos, isso também acontece quando os arquivos de origem estão corrompidos ou têm caracteres inválidos no nome ( fscké recomendável).

Basicamente, isso é um aviso, não um erro, portanto não há com que se preocupar, pois o estado de cada arquivo de destino reflete um estado que os arquivos de origem correspondentes durante a execução.

Se estiver causando um problema devido ao valor de saída ser diferente de zero, isso poderá ser resolvido pelo seguinte script de wrapper ( origem ):

#!/bin/bash
(rsync "$@"; if [ $? == 24 ]; then exit 0; else exit $?; fi) 2>&1 | grep -v 'vanished'

ou pelo seguinte script de solução alternativa ( origem ):

#!/bin/sh
OUT=`/usr/bin/snapback2 2>&1`
RET=$?
if [ "$RET" != "23" -a "$RET" != "0" -a "$RET" != 24 ]; then
    echo "$OUT"
    exit $RET
fi

que existe basicamente com os mesmos códigos de erro que o rsync, se o rsync falhar.

Isso será discutido em: Bug 3653 - Reduza a necessidade do aviso "arquivos desaparecidos"

kenorb
fonte
6

Ou simplesmente (com o moderno ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret
Gilles Quenot
fonte
1
Isso não suprimiria o aviso de todos os tipos de arquivos que também contêm a string vanished?
rubo77
Claro, post editado de acordo
Gilles Quenot 29/03
2

Minha resposta pode ser um caso de uso especial, mas acho que vale a pena notar, para que as pessoas não percam dados se se enquadrarem nesse caso.

Eu estava recebendo essa mensagem para vários arquivos enquanto fazia um backup de rotina das unidades via rsync.

Eu realizei uma verificação do sistema no disco e constatamos que há problemas com a unidade (alocação / corrupção de arquivos etc.) e recomendamos um backup + restauração + reformatação.

Portanto, antes de suprimir ou ignorar a mensagem, talvez seja aconselhável executar uma verificação de saúde em sua unidade apenas para garantir a segurança.

Francis
fonte
Falhas na unidade não aconteceriam seletivamente apenas nos tmpdiretórios.
0

Tente montar seu disco de backup com nosuid,nodev,nofail,x-gvfs-showopções.

Não tenho certeza de qual sistema você está usando, mas acredito que isso esteja relacionado às opções de montagem do seu disco. No Linux, isso acontece se eu definir as opções de montagem como User Session Default. Ele resolve quando eu o desabilito e o rsync é concluído sem erros.

insira a descrição da imagem aqui

Máx.
fonte
0

Use este parâmetro:

--exclude-from="./exclude.ini"

para colocar a lista em um arquivo. No arquivo exclude.ini, escreva algo como:

Cache
cache2/*
*.lock
/temp

Onde:

  1. exclui TODAS as pastas denominadas "Cache" e seu conteúdo;
  2. exclui o conteúdo de todas as pastas nomeadas "cache2", mas inclui a hierarquia de pastas para que todas as subpastas estejam vazias;
  3. exclui todos os arquivos que terminam com .lock (por exemplo, alguns arquivos de bloqueio do Firefox e derivados);
  4. exclui o conteúdo da pasta / temp.

Lembre-se de que, se o sistema de arquivos diferir entre maiúsculas e minúsculas, talvez seja necessário explicar isso.

nicolap8
fonte