Copia y copia de seguridad de archivos y carpetas mediante la utilidad Rsync
Rsync es una herramienta rápida y versátil para copiar archivos y carpetas. La utilidad puede copiar datos tanto localmente como a otros hosts, incluido Cloud Storage de INTROSERV. Las opciones de la utilidad le permiten controlar muchos aspectos de la copia y duplicación de datos. Una función útil es la posibilidad de comprimir los datos durante la transferencia, lo que puede reducir el tráfico de red y mejorar la velocidad de transferencia cuando el ancho de banda de la red es el factor limitante. Otra ventaja es que Rsync evita transferir archivos que no necesitan actualizarse. Por defecto, compara el tamaño del archivo y la hora de modificación, transfiriendo solo los archivos que parecen haber cambiado, lo que sin duda ahorra tiempo al sincronizar directorios grandes.
¿Por qué usar el indicador -a? La opción -a (archive) es la elección más común. Habilita la copia recursiva y conserva los atributos comunes de los archivos: permisos, propietario, grupo, horas de modificación y enlaces simbólicos. Como -a ya incluye la recursividad, no es necesario añadir -r por separado.
Opciones de la utilidad
Veamos ejemplos del uso de Rsync para copiar archivos y directorios al Cloud Storage remoto de INTROSERV mediante el protocolo SSH.
Estos comandos son universales. Simplemente reemplace la dirección de destino y la ruta para sincronizar archivos con cualquier servidor remoto a través de SSH.
Veamos algunas de las principales opciones de la utilidad que se usarán con más frecuencia. Encontrará una lista más detallada de las opciones disponibles en la documentación man (comando man rsync):
-v – muestra información detallada sobre el proceso
-c – verifica las sumas de comprobación de los archivos
-q – información mínima
-a – modo de archivo
-R – rutas relativas
-y – no sobrescribir archivos más recientes
-b – crea una copia de seguridad
-l – copia enlaces simbólicos
-L – copia el contenido de los enlaces
-H – copia enlaces duros
-g – guarda el grupo
-p – conserva los permisos de archivo
-t – guarda la hora de modificación
-x – trabaja solo en este sistema de archivos
-e – usa otro protocolo de transporte (por ejemplo, ssh)
-z – comprime los archivos antes de la transferencia
--delete – elimina los archivos que no están en el origen
--exclude – excluye archivos
--recursive – enumera los directorios de forma recursiva
--no-recursive – desactiva la recursividad
--progress – muestra el progreso de la transferencia de archivos
--stat – muestra estadísticas de transferencia
--max-size – tamaño máximo de archivo para la transferencia
--bwlimit – límite de velocidad para las transferencias de archivos
Breve explicación de la sintaxis
La regla de la barra final (/). Aquí es donde la mayoría de los usuarios cometen errores: /carpeta (sin barra) copia la carpeta en sí. /carpeta/ (con barra) copia solo el contenido de la carpeta.
rsync -az --progress /home/user/test.file boxxxx@storage_ip:/remote_folder/
-a – modo de archivo: una copia recursiva que conserva los atributos de los archivos
-z – comprime los datos durante la transferencia
--progress – muestra el progreso de la transferencia
/home/user/test.file – esta es la ruta al archivo y el archivo real que debe transferirse
boxxxx@storage_ip: – este es el recurso de destino (en nuestro ejemplo es el almacenamiento en la nube, pero también puede ser un servidor remoto). boxxxx es el nombre de usuario, después del signo @ está el nombre del recurso o la dirección IP del servidor remoto
/remote_folder/ – esta es una carpeta en un recurso remoto. En nuestro ejemplo, en INTROSERV Cloud Storage.
Copiar un archivo a una carpeta en un almacenamiento remoto
rsync -az --progress /home/user/Desktop/test.file boxxxx@storage_ip:/remote_folder/
Se le pedirá una contraseña para conectarse al almacenamiento. Introduzca la contraseña y continúe; verá el progreso y la velocidad de transferencia del archivo.
Copiar una carpeta a la carpeta en un almacenamiento remoto
Preste atención a las barras en las líneas de la carpeta de origen y de destino. La ausencia de una barra en la carpeta de origen indica que queremos transferir la propia carpeta local Desktop, con todo su contenido, a la carpeta remote_folder.
rsync -az --progress /home/user/Desktop boxxxx@storage_ip:/remote_folder/
Verá cómo se transfieren el directorio y todos los archivos que contiene.
Copiar el contenido de una carpeta local a una carpeta en un almacenamiento remoto
Preste atención a la barra al final de la carpeta de origen. Su presencia indica que la utilidad debe copiar el contenido de la carpeta local a una carpeta en el almacenamiento remoto.
rsync -az --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Verá el progreso y la velocidad de copia.
Copiar una carpeta desde un almacenamiento remoto a una carpeta del servidor local
Con Rsync, puede iniciar la copia de una carpeta desde un almacenamiento remoto. El comando se ve así:
rsync -az --progress boxxxx@storage_ip:/remote_folder /home/user/Desktop/
Verá el progreso y la velocidad de copia de una carpeta remota a una carpeta en el servidor local.
Copiar el contenido de una carpeta desde un almacenamiento remoto a una carpeta del servidor local
Aquí también vale la pena prestar atención a la barra al final de la ruta de la carpeta de origen. Su presencia indica que solo es necesario copiar el contenido de la carpeta.
rsync -az --progress boxxxx@storage_ip:/remote_folder/ /home/user/Desktop/
Copiar el contenido de una carpeta excluyendo y/o incluyendo archivos
La utilidad le permite especificar explícitamente qué archivos transferir y cuáles deben excluirse. Para ello, use las opciones --include y --exclude. Las reglas se procesan en orden, por lo que una regla de inclusión debe ir antes de una regla de exclusión que, de lo contrario, coincidiría con el mismo archivo.
Pruebe con una ejecución en seco. Antes de ejecutar un comando que modifique o elimine muchos archivos, añada el indicador -n o --dry-run. Rsync le mostrará exactamente lo que haría sin mover ni eliminar nada realmente.
rsync -az --progress --include='test.file' --exclude='*' /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Este comando transfiere test.file y excluye todo lo demás en el directorio de origen. La regla --exclude='*' es la que limita la transferencia al único archivo incluido, por lo que aquí se necesitan ambas opciones juntas.
Copiar solo los archivos que sean diferentes de los archivos en la carpeta de destino
Por defecto, Rsync decide si un archivo necesita transferirse en función de su tamaño y hora de modificación. Use la opción -c cuando desee que Rsync compare el contenido de los archivos mediante suma de comprobación en su lugar. Esto es más fiable cuando no se puede confiar en las marcas de tiempo, pero es más lento, ya que ambos lados deben leer los archivos para calcular las sumas de comprobación.
rsync -azc --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Con -c, Rsync compara el contenido de los archivos de origen y destino mediante sumas de comprobación y transfiere solo los archivos cuyo contenido difiere.
Uso de Rsync a través de SSH con un puerto SSH no estándar
Para transferir archivos desde/hacia un servidor con el puerto SSH modificado, use la opción -e 'ssh -p port_number'.
El comando para copiar un archivo a un servidor en el que el puerto SSH se ha cambiado a 44 se verá así:
rsync -azc --progress -e 'ssh -p 44' /home/user/Desktop/ user@server_ip:/remote_folder/
Nota de seguridad: Cambiar el puerto SSH predeterminado puede reducir los escaneos automatizados y los intentos de conexión no deseados, pero no sustituye una seguridad SSH adecuada, como la autenticación basada en claves y las reglas de firewall. Asegúrese siempre de que su firewall permita el tráfico en el puerto que elija.