suprima la advertencia de rsync: algunos archivos desaparecieron antes de que pudieran transferirse


14

Recibo muchas advertencias al hacer una copia de seguridad de mis archivos de servidor Postfix y Courier en ejecución, como:

file has vanished: /var/kunden/mail/username/name@mymail.de/tmp/courier.lock

¿Cómo elimino esas advertencias rsynccuando lo ejecuto desde Cron /usr/bin/rsnapshot hourly?

¿De alguna manera puedo excluir esos directorios?

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

la tmpcarpeta también puede ser más profunda, por ejemplo:

file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/courier.lock

Respuestas:


6

Puede usar rsyncel interruptor de exclusión ( --exclude):

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

Especificado de esta manera --exclude '**/tmp/'ignorará cualquier ruta que incluya la cadena /tmp/. También puede proporcionar patrones a estos argumentos.

Ejemplo

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

Excluirá en los caminos de la forma: /path/to/*/tmp/.


entonces tengo que intentarlo rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77

@ rubo77: ignorará cualquier directorio que se incluya /tmp/en ellos tal como lo escribí. Si quieres ser más explícito, entonces sí, puedes especificarlo como lo has escrito.
slm

@ rubo77 --exclude='/tmp/'excluye solo el directorio llamado tmpen la raíz de la copia. Para excluir todos los subdirectorios llamados en tmpcualquier lugar, use --exclude='**/tmp/'.
Gilles 'SO- deja de ser malvado'

1
... o use un sistema de archivos con instantáneas ... parece problemático restaurar una copia de seguridad donde los archivos desaparecen a la mitad ... a menos que sean intrascendentes, en cuyo caso, sí, probablemente deberían excluirse ...
Erk

19

Desafortunadamente, a diferencia de lo que se describe en la solución SWdream, --ignore-missing-argsno tiene impacto en los archivos desaparecidos. Simplemente ignorará los argumentos de origen que no existen.

Ver 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.

La forma "oficial" de ignorar el archivo desaparecido es usar este script desde el repositorio de origen oficial de rsync: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- desaparecido; hb = CABEZA

que es muy similar a lo que dijeron @kenorb y @ gilles-quenot.


13

La razón es que estos archivos existían mientras rsync está creando la lista de archivos para transferir, pero se eliminan antes de la transferencia.

Es un masaje de advertencia, no un error. Sin embargo, debe intentar averiguar por qué se eliminó este archivo, tal vez sea importante.

Para ignorar esta advertencia, puede usar la opción --excluir como la pregunta anterior o usar la -ignore-missing-argsopción rsync, hace que rsync ignore los archivos desaparecidos: --ignore-missing-args ignore missing source args without error tal vez ayude.


Esto parece definitivamente mejor que buscar un código de retorno específico y anularlo a 0.
Boicot SE para Monica Cellio

Excepto en casos excepcionales, los archivos que desaparecen durante una copia de seguridad en vivo son perfectamente normales (muchas aplicaciones crean archivos temporales de corta duración). Esto es especialmente cierto en el caso de un servidor de correo, donde los archivos que contienen mensajes de correo electrónico se mueven constantemente de un directorio a otro, por lo que en mi humilde opinión, esta respuesta es más adecuada que la aceptada por OP.
MoonSweep

1
Lamentablemente, esta opción no existe en todas las versiones de rynsc. En particular, 3.0.6, que se envía con CentOS 6.
jph

3
esta opción solo afecta a los archivos nombrados en los argumentos, los que se encuentran durante la búsqueda recursiva aún se advierten.
Jasen

6

El error significa que rsyncya no puede encontrar los archivos que existían al crear la lista para transferir. Estos errores de archivos desaparecidos ocurren cuando inicialmente se encontró que un archivo estaba presente y luego ya no está allí. En algunos casos, también ocurre cuando los archivos de origen están dañados o tienen caracteres no válidos en el nombre (así fsckse aconseja).

Básicamente, esto es una advertencia, no un error, por lo que no hay nada de qué preocuparse, ya que el estado de cada archivo de destino refleja un estado que los archivos de origen correspondientes durante la ejecución.

Si está causando un problema debido a que el valor de salida no es cero, esto se puede resolver mediante el siguiente script de contenedor ( fuente ):

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

o por el siguiente script de solución ( fuente ):

#!/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 básicamente con los mismos códigos de error que rsync si falla rsync.

Esto se discute más a fondo en: Error 3653 - Reduce la necesidad de la advertencia de "archivos desaparecidos"


6

O simplemente (con moderno ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret

1
¿No suprimiría eso la advertencia de todo tipo de archivos que contienen la cadena vanishedtambién?
rubo77

Claro, publicación editada en consecuencia
Gilles Quenot

2

Mi respuesta podría ser un caso de uso especial, pero sentí que valía la pena señalarlo, por lo que las personas no pierden datos si caen en este caso.

Recibí ese mensaje para varios archivos mientras realizaba una copia de seguridad de rutina de las unidades a través de rsync.

Realicé una comprobación del sistema en el disco y resultó que hay problemas con la unidad (asignación / corrupción de archivos, etc.) y recomendé una copia de seguridad + restauración + reformateo.

Por lo tanto, antes de salir, suprimir o ignorar el mensaje directamente, puede ser aconsejable ejecutar un control de estado en su unidad solo para estar seguro.


Las fallas de la unidad no sucederían selectivamente solo en los tmpdirectorios.

0

Intente montar su disco de respaldo con nosuid,nodev,nofail,x-gvfs-showopciones.

No estoy seguro de qué sistema está utilizando, pero creo que esto está relacionado con las opciones de montaje de su disco. En Linux esto sucede si configuro las opciones de montaje en User Session Default. Se resuelve cuando lo deshabilito y rsync se completa sin ningún error.

ingrese la descripción de la imagen aquí


0

Use este parámetro:

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

poner la lista en un archivo. En el archivo exclude.ini escriba algo como:

Cache
cache2/*
*.lock
/temp

Dónde:

  1. excluye TODAS las carpetas llamadas "Caché" y su contenido;
  2. excluye el contenido de todas las carpetas con nombre "cache2" pero incluye la jerarquía de carpetas para que obtenga todas las subcarpetas pero vacías;
  3. excluye todos los archivos que terminan con .lock (por ejemplo, algunos archivos de bloqueo de Firefox y derivados);
  4. excluye el contenido de la carpeta / temp.

Recuerde que si el sistema de archivos depende de las mayúsculas y minúsculas, es posible que tenga que dar cuenta de esto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.