Error al hacer una copia con rsync: File exists (17)

Uso Linux la mayor parte del tiempo pero en ocasiones tengo que arrancar una máquina virtual con Windows para poder realizar algunas tareas.

Ya saben como es esto, empiezas con un disco duro de 10 GB, que luego resulta que no es suficiente. Aumentas el tamaño a 20 GB y para no hacer el cuento largo, actualmente uno de los discos duros virtuales es de 30 GB.

Todas las semanas hago una copia simple de los archivos .vdi a manera de respaldo con rsync, y todo estaba funcionado perfectamente hasta que me empezaron a salir una serie de errores.

Después de hacer el último ajuste de tamaño empecé a ver un problema al copiar los archivos con rsync del tipo File exists (17).

sent 134,815,726 bytes  received 6,719 bytes  1,057,430.94 bytes/sec
total size is 126,432,193,215  speedup is 937.77
sending incremental file list
10GB.vdi
 10,716,446,720 100%   11.16MB/s    0:15:15 (xfr#1, to-chk=15/18)
Windows 7 Ultimate.vdi
 32,138,960,896 100%   11.40MB/s    0:44:49 (xfr#2, to-chk=6/18)
rsync: [receiver] rename "/respaldos/virtualbox/.10GB.vdi.G0Vx0b" -> "10GB.vdi": File exists (17)
rsync: [receiver] rename "/respaldos/virtualbox/.Windows 7 Ultimate.vdi.tdPBjd" -> "Windows 7 Ultimate.vdi": File exists (17)

sent 42,865,871,109 bytes  received 350 bytes  11,659,423.76 bytes/sec
total size is 192,383,238,656  speedup is 4.49
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1287) [sender=3.2.2]

Buscando una solución

Me tomó un poco en encontrar una solución, primero por la falta de tiempo ocupado en otras tareas y segundo porque hacer una prueba se lleva su tiempo, en mi caso no es raro que se tarde más de 45 minutos en completar el respaldo.

Intenté varias opciones con poco éxito. Intenté este consejo rsync fails if it cannot stat destination file.

Esto se debe a la utilización de un directorio temporal en un sistema de archivos diferente al del archivo de destino. En este caso, rsync intenta renombrar el archivo terminado en su lugar, pero si no puede, lo copia en su lugar y luego debe terminar de actualizar los permisos, la propiedad, etc. después de la copia. Si el archivo desaparece durante esta actualización, rsync se quejará de ello.

Básicamente recomienda agregar el parámetro –temp-dir para que apunte a una carpeta en el mismo disco duro que sirve como destino de los archivos.

La instrucción quedaría más o menos así:

rsync -avuP --temp-dir=/respaldos/tmp /home/usuario/virtualbox/ /respaldos/virtualbox/

Pero no funcionó, parece que justo al finalizar la copia ocurre el error. Simplemente no puede renombrar el archivo temporal a el archivo final, por eso tuve que buscar otra opción.

Las opciones inplace y whole-file

La solución que mejor me ha funcionado es combinar los parámetros inplace y whole-file. Que ví aquí: Rsync without creating hidden file in destination.

inplace evita la creación de un archivo temporal, trabaja directamente con el archivo de destino. De esa forma evito ese problema al final de la copia durante la transición de archivo temporal a archivo definitivo.

whole-file copia todo el archivo, lo vi en un consejo sobre copias de archivos grandes. Sospecho que todo mi problema tiene algo que ver con Error al unir el archivo, un problema al copiar archivos grandes a una USB. Error que todavía me ocurre pero tengo una esperanza de solución con el kernel 5.8.

Dicho esto, la instrucción quedaría más o menos así:

rsync -avuPW --inplace /home/usuario/virtualbox/ /respaldos/virtualbox/

Con este ajuste parece que todo ha vuelto a la normalidad y el error File exists (17) ha desaparecido.

De todos modos estaré al pendiente de los resultados del script de respaldos por si aparece este u otros errores.

¡Hasta la próxima!

Respaldos en Linux, los programas que he utilizado

Llevo mucho tiempo usando Linux y hago frecuentemente respaldos de mis archivos. Siempre es una mejor política hacer respaldos que intentar recuperarlos. Para hacer respaldos en Linux he utilizado varios programas. En este artículo voy a comentar algunos de sus pros y sus contras.

Deja Dup.

Durante mucho tiempo utilicé Deja dup, venía incluido en Cinnamon y me pareció la opción natural. Es muy fácil de configurar, solo hay que responder algunas preguntas, decirle cuáles carpetas respaldar y eso es todo.

Diariamente ejecuta un respaldo de los archivos de una forma prácticamente imperceptible. Ocasionalmente me aparecía una notificación para informarme que había terminado el respaldo o me pedía que pusiera una contraseña para verificar que todo estaba bien.

Un buen día se me ofreció recuperar un archivo y ese fue el final de deja dup en mi escritorio. No pude lograr que me apareciera un archivo para restaurar. Lo intenté de varias formas pero el tiempo que invertía en la tarea no era aceptable. Y al parecer no era el único con el mismo problema: How can i fix Deja Dup hanging on restore? o Recovery search for files is very slow.

Afortunadamente no era un archivo de vida o muerte, pero no iba a esperar a caer en una situación crítica. Era tiempo de buscar otras opciones.

Duplicati.

Duplicati es similar en varios aspectos a deja-dup, solo que tiene muchas más opciones y eso no es necesariamente malo.

En Windows tiene el problema de alentar los equipos durante el respaldo. Pero eso no quiere decir que lo haga en Linux. Ya sabes lo que dicen, más vale malo por conocido que bueno por conocer. Sin embargo en Linux tuve problemas para instalarlo.

Además, estaba habituado a la configuración de la versión 1 de duplicati y los cambios que hicieron en la versión 2 fueron demasiados para mi gusto. Algunos ajustes que funcionaban para mi los ocultaron, en fin, que nadie me obliga a usarlo.

Como en gustos no hay nada escrito se los dejo tal cual. A lo mejor a alguien le gusta y lo hace su programa de respaldos.

Rsync

Un clásico que no falla. Rsync es la herramienta para copiar archivos por excelencia.

Tiene la ventaja de que es muy fácil de integrar a un script en bash y para hacer un respaldo solo se tiene que ejecutar el archivo. Opcionalmente se puede programar una tarea regularmente y ¡Voalá!, respaldos automáticos simples y confiables.

Cuando se requiere hacer copias de archivos de manera masiva rsync es la herramienta de la terminal que tienes que elegir pero, bueno siempre hay un pero.

El único problema que tiene es en el manejo de versiones. Supongamos por ejemplo que necesitas una versión de un archivo de la semana pasada. No la de ayer, no la antier, la de la semana pasada exactamente. Ahí es donde entra nuestro siguiente programa participante.

Back in Time.

Back in Time es uno de esos programas que tiene justo lo que estaba buscando. No es tan minimalista como Deja-dup ni tampoco es tan complicado como manejar las opciones de un comando en la terminal.

Back in time utiliza dos de mis herramientas favoritas en software libre, python 3 y rsync para crear lo que se llaman Instantáneas (o snapshots).

Las instantáneas tienen una fecha, de esa forma es posible regresar a versiones anteriores del mismo archivo.

El impacto en la computadora, al menos con Linux es mínimo. No me notifica nada, solo aparece un discreto icono azul en la barra de tareas. Hace lo que tiene que hacer y eso es todo, al terminar el ícono desaparece como un fantasma.

back in time trabajando
Respaldando ando…

Aprendiendo de mi experiencia con Deja-dup he recuperado algunos archivos para comprobar que funciona y así ha sido.

Configurar un respaldo requiere un poco de esfuerzo pero no es nada complicado. Afortunadamente cuenta con una buena documentación . Me recuerda un poco a duplicati, me permite establecer opciones como el encriptado, las carpetas a respaldar, cuales hay que excluir y la frecuencia de las instantáneas.

Configuración de un respaldo con Back in Time.
Configuración de un respaldo con Back in Time.

El único problema con Back in Time es que al guardar varias versiones de los mismos archivos el espacio ocupado por el respaldo tiende a crecer un poco más que al hacer una copia simple.

¿Cuál programa de respaldos utilizan? ¿Les gusta el peligro y practican la computación extrema?. Por favor comenten 🙂

Imagen de portada cortesía de Markus Spiske

Rsync y Parallel, copias de archivos realmente intensas

El otro día pasó a mejor vida un disco duro externo en el que generalmente hago mis respaldos automáticos. Mientras que consigo otro decidí hacer las copias en una carpeta privada en la computadora que funciona como NAS.

rsync parallel
Divide y vencerás.

La cantidad de datos es importante, estoy hablando de unos cientos de gigabytes y la primer copia puede durar varias horas.

Rsync y Parallel

Buscando en internet me topé con este script llamado rsync_parallel que me resultó muy interesante.

Divide y vencerás

Tiene un enfoque muy interesante, primero obtiene una lista completa de los archivos que se van a copiar y luego divide esa lista en varios archivos de una forma equilibrada.

El total de archivos corresponde al número de procesos concurrentes que queremos trabajar, por default es 10 pero se puede cambiar con un parámetro.

Una vez que tenemos nuestras listas el programa parallel inicia la copia de los archivos con rsync y le entrega una lista de los archivos a cada proceso que se ejecuta simultaneamente.

El problema es el ancho de banda.

Gráfica del tráfico por hora

El problema es que ahora tengo 10 procesos peleándose el ancho de banda, que lamentablemente es poco en mi caso. Supongo que una copia con una buena velocidad o de un disco duro a otro la copia de archivos volaría.

También pueden notar que el equipo se puede comportar un poco lento, eso depende de los recursos de su computadora. Eso se debe al uso intensivo del disco duro durante la copia de los archivos.

El uso de parallel es interesante, actualmente estoy jugando con el número de procesos a ejecutar. Si utilizo pocos, más o menos sería lo mismo que ejecutar un rsync simple. Si uso muchos, los pedazos serán más pequeños, pero el uso del disco será mayor.

copiando ando | rsync parallel
Copiando ando …

Les paso el dato por si algún día se les ofrece hacer una copia masiva de archivos.

Enlaces