¿Es seguro usar un HDD mientras se ejecuta rsync?


27

Planeo hacer una copia de seguridad de mis HDD grandes rsyncy anticipo que tomará unos días. ¿Es seguro usar el HDD original (agregar archivos) mientras rsyncfunciona? ¿O es mejor dejar los discos duros intactos hasta que rsyncse termine?


1
Tenga en cuenta que "usar" puede ser tan simple como tener un navegador abierto sin hacer nada. Los navegadores tienden a escribir muchas cosas al azar en sus directorios de datos. En el peor de los casos, lo que obtiene es una copia de seguridad inconsistente, es decir, al restaurar, es posible que no pueda restaurar sus pestañas, sus marcadores pueden desaparecer (porque la base de datos está dañada) o algo en ese orden de magnitud.
Jonas Schäfer

Si tiene tantos datos para respaldar, puede considerar dividir la copia de seguridad en partes más pequeñas (subárboles). Luego, solo la parte que se está ejecutando actualmente debe mantenerse lo más estática posible, y puede ver qué parte es siguiendo el progreso de su script (con un registro, etc.). Como no es una gran copia de seguridad, algunas de las piezas podrían estar poco sincronizadas con las otras, pero si está ejecutando una gran copia de seguridad en un sistema en vivo, eso sucederá de todos modos.
Joe

Respuestas:


34

Como otros ya han señalado, es seguro leer desde el disco de origen, o usar el disco de destino fuera del directorio de destino, mientras se ejecuta rsync. También es seguro leer dentro del directorio de destino, especialmente si el directorio de destino está siendo poblado exclusivamente por la ejecución de rsync.

Lo que generalmente no es seguro es escribir dentro del directorio de origen mientras se ejecuta rsync. "Escribe" es todo lo que modifica el contenido del directorio de origen o cualquier subdirectorio del mismo, por lo que incluye actualizaciones de archivos, eliminaciones, creación, etc.

Hacerlo en realidad no romperá nada, pero el cambio puede o no ser recogido por rsync para copiarlo en la ubicación de destino. Eso depende del tipo de cambio, si rsync ha escaneado ese directorio en particular y si rsync ha copiado el archivo o directorio en cuestión todavía.

Sin embargo, hay una manera fácil de evitarlo: una vez que termine, ejecute rsync nuevamente, con los mismos parámetros. (A menos que tenga algún parámetro de eliminación funky; si lo tiene, tenga un poco más de cuidado). Si lo hace, volverá a escanear la fuente y transferirá las diferencias que no se detectaron durante la ejecución original.

La segunda ejecución debe transferir solo las diferencias que ocurrieron durante la ejecución anterior de rsync, y como tal se completará mucho más rápido. Por lo tanto, puede sentirse libre de usar la computadora normalmente durante la primera ejecución, pero debe evitar todo lo posible realizar cambios en la fuente durante la segunda ejecución. Si puede, considere volver a montar el sistema de archivos de origen de solo lectura antes de comenzar la segunda ejecución de rsync. (Algo así mount -o ro,remount /media/sourcedebería hacer).


77
Incluso se puede hacer una tercera carrera después de una segunda carrera: puede tomar incluso menos tiempo ... ;-)
gerlos

55
@gerlos Parece que está surgiendo un patrón. Parece que uno podría seguir ejecutando el comando rsync al final de cada sesión de uso, y dentro de unos días se haría en muy poco tiempo.
Monty Harder

55
@gerlos Si vuelve a montar solo lectura antes de ejecutar rsync por segunda vez, eso no será necesario y se garantizará que la copia de seguridad sea consistente mientras minimiza el tiempo durante el cual no puede escribir en el sistema de archivos de origen.
un CVn

1
@gerlos Por otro lado, es por eso que tengo una entrada muy parecida @reboot root find / -print &>/dev/nulla mi crontab del sistema, para llenar el caché. (La entrada real es más compleja para dar cuenta de algunos casos especiales en mi sistema en particular.) Utiliza algo de RAM y algo de tiempo de bloqueo de pared temprano después del inicio para mejorar bastante el escaneo del árbol de directorios IME.
un CVn

1
@ MichaelKjörling: idea interesante para almacenar en caché la jerarquía. Pero tal vez debería ejecutar updatedb(construir la base de datos de localizar) o slocate -u(lo mismo, si tiene pendiente) en su lugar? De esa manera, todavía almacena en caché la jerarquía, pero también construye las bases de datos de localización o pendiente, lo que le permite usar esos comandos para encontrar rápidamente muchos archivos.
Olivier Dulac

22

Esto depende del sistema de copia de seguridad que utilice, pero en general es una mala idea modificar el contenido de un dispositivo mientras realiza la copia de seguridad. Sin embargo, puede leer su contenido; Es una operación segura, incluso si ralentiza el proceso.

En su caso, rsyncconstruirá una lista de archivos y luego iniciará la copia de seguridad. Por lo tanto, no se copiará ningún archivo que agregue al disco duro de origen después de que haya comenzado la copia de seguridad .

Lo que hago es no usar ningún dispositivo durante una copia de seguridad. Esta es la forma más segura de obtener una copia de seguridad rápida y consistente.


14
Por lo general, dejo que se ejecute y luego hago una segunda ejecución, rsyncque terminará en unos segundos porque solo se copiarán los archivos que he cambiado durante la ejecución. Todo estará en los cachés, por lo que es mucho más fácil abstenerse de modificaciones durante ese período.
Martin Ueding

15

Es seguro leer datos de las áreas de origen mientras rsyncestá en funcionamiento, pero si actualiza algo, rsynces probable que la copia que crea / actualiza sea inconsistente:

  1. Si actualiza un archivo que rsync ya ha escaneado, no verá la actualización hasta que se ejecute en el futuro. Si actualiza un archivo que aún tiene que escanear, el cambio se respetará en el destino. Si actualiza los archivos que se han escaneado y no se han escaneado, terminará con una mezcla de versiones antiguas y nuevas en el destino.

  2. Si agrega un archivo a un directorio que ya ha sido escaneado, esta vez se perderá de la copia de destino. Si elimina un archivo de un directorio que ya ha sido escaneado, esta vez se dejará en la copia de destino. Dependiendo de cómo invoque, rsynctodo el árbol puede escanearse al inicio o puede escanearse gradualmente a medida que ocurre el proceso de sincronización.

  3. En algunas circunstancias rsyncverá la inconsistencia y le advertirá. Si elimina un archivo o subdirectorio de un directorio que ya se ha escaneado a sí mismo pero no se ha escaneado su contenido, recibirá un mensaje de error sobre la falta del objeto. En circunstancias similares, a veces puede (si el tamaño y / o la marca de tiempo ha cambiado) también advertir sobre los archivos que cambian a mitad del escaneo.

Para algunas copias de seguridad, esta inconsistencia puede no ser un problema masivo, pero para la mayoría lo será, por lo que se recomienda que no intente sincronizar una fuente que cambia activamente.

Si usa LVM para dividir su sistema de almacenamiento, podría usar una instantánea temporal para tomar una copia de seguridad en un momento determinado. Esto requiere que tenga suficiente espacio en el grupo de volúmenes para crear un volumen de instantánea lo suficientemente grande como para contener todos los cambios que sucederán durante el tiempo que se necesite la instantánea. Consulte la documentación de LVM (o uno de los muchos ejemplos en línea: busque "Copia de seguridad de instantáneas de LVM" o similar) para obtener más detalles.

Incluso sin LVM, algunos sistemas de archivos admiten instantáneas por sí mismos, por lo que también puede considerar esa opción.

Si desea hacer una copia de seguridad de grandes volúmenes activos sin un largo tiempo de inactividad y no puede usar instantáneas, puede ser suficiente ejecutar el análisis "en vivo" hasta su finalización y luego detener el acceso al volumen y ejecutar otro proceso rsync que puede llevar mucho menos tiempo (si muy poco ha cambiado, solo escaneará el árbol de directorios y luego los pocos archivos actualizados). De esta manera, la duración en la que debe evitar los cambios podría ser mucho más corta.


Me gusta su respuesta mejor porque entra en detalles sobre lo que sucede si se modifican los archivos. No solo proporciona una alternativa, sino que también aborda las inconsistencias que puede causar (falta una actualización, advertencia sobre un archivo perdido, etc.). En mi situación, usar rsync para generar una copia de seguridad larga y luego actualizarlo días después no es gran cosa, y eso también parece ser la situación del OP. No parece que él / ella requiera una copia de seguridad de nivel empresarial la primera vez, pero solo quiere usar la computadora mientras tanto. Digo que simplemente ejecute rsync por segunda vez para capturar los archivos actualizados.
ibennetch 01 de

11
  • Source HDD puede leer cualquier cosa mientras rsync.

  • Source HDD puede escribir cualquier contenido no relacionado con el contenido de rsync.

  • El HDD de destino puede leer cualquier cosa mientras rsync.

  • El HDD de destino puede escribir cualquier cosa mientras se sincroniza con la condición de tener suficiente espacio reservado para el contenido sincronizado.

Por supuesto, en cualquiera de los casos, habrá una reducción del rendimiento.


0

Todas las respuestas actuales hablan de la seguridad de los datos en términos de coherencia y suponen un hardware perfecto.

Otra cosa a considerar es la seguridad del hardware en sí. Si tiene discos duros sin copia de seguridad que podrían estar a punto de fallar (es posible que aún no lo sepa) y está haciendo una copia de seguridad integral inicial , no la use. Ni siquiera lo monte si los datos son críticos. Puede usar una herramienta como ddpara clonar el disco como un dispositivo de bloque. Lo que no desea que busque la cabeza del disco, y posiblemente escriba mientras intenta hacer una copia de seguridad. Además, dddebería ser más rápido para la copia de seguridad inicial, ya que solo copia los bits en orden (si la unidad no está llena en su mayoría, supongo que rsync también ganaría en el caso inicial).

Para copias de seguridad incrementales posteriores, rsync es una excelente opción y estoy de acuerdo con las otras respuestas al 100%.


1
Si los medios son marginales o incluso potencialmente marginales, ddno es la mejor opción. Usar en su ddrescuelugar; maneja las fallas parciales mucho mejor. Pero eso no fue una consideración en la pregunta original.
un CVn

@ MichaelKjörling Ese es un buen punto.
Zak
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.