# Backups Cuestiones sobre backups, tips con rsync, etc. # Rsync sobre sistemas remotos # Introducción [rsync](https://linux.die.net/man/1/rsync) es una aplicación que ofrece un sistema de transmisión de ficheros, de forma incremental que permite la generación de sistemas de backups muy efectivos. Uno de los mejores ejemplos es [Time Machine](https://support.apple.com/es-es/HT201250) de Apple, que no es sino una interface visual de rsync Sin embargo muchos sitios expresan o ponen a disposición de los usuarios ejemplos que usados en un escenario diferente del usado en un entorno personal o corporativo, son fuente de problemas. Como norma general se usa el parámetro `-a` o `--archive` el cual es el equivalente a `-rlptgoD` lo cual supone que los parámetros de usuario y grupo, y los permisos de lectura, escritura y ejecución intentarán ser clonados, cosa que no funcionará e incluso creará problemas silenciosos en un entorno en el que los usuarios y grupos no son los mismos en origen que en destino. ## Parámetros de rsync para usar en sistemas remotos no coincidentes El escenario es el de realizar un backup de un sistema completo (disco principal) en un usuario remoto (no root) ``` # rsync --devices --specials --hard-links --one-file-system --recursive --links --times --no-perms --no-group --no-owner --itemize-changes / remote_user@remote.host:/remote/path ``` ### Parámetros con rsync-time-backup Dado que es un programa basado en rsync con sus propias normas para anular su configuración debemos usar otro camino con `--rsync-set-flags` ``` --rsync-set-flags "-D --numeric-ids --links --hard-links -rlt --no-perms --no-group --no-owner --itemize-changes" ``` ### Parámetros Deberás ajustar los parámetros a tu escenario, pero te explico los que he usado aquí. | Corto | Normal | Descripción | | :------ | :--------- | :--------------- | | -D | | El mismo que --devices -aspecials | | -l | --links | copia los enlaces simbólicos como enlaces simbólicos | | -H | --hard-links | preserva los enlaces duros | | -x | --one-file-system | No copiará los dispositivos montados. Si tu sistemas tiene particiones como /var /usr y quieres copiar algo de aqui, esta opción NO debería estar aquí | | -r | --recursive | Copiara recursivamente | | -t | --times | Necesario sobre todo si no usamos -a, ya que será parte de la marca para saber si el fichero debe o no ser transferido o actualizado | | --no-perms | | No copiara los permisos originales. De esta forma no nos encontraremos con problemas de eliminación, uso, debidos a cuestiones de propietario /permisos. Como contrapartida, nos obliga a a tener un sistema de metadatos, que sí guarde esta información. | | --no-group | | Para evitar el uso del grupo del propietario del fichero | | --no-owner | | Para evitar actualizar el propietario del fichero | ## Aviso Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com) Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/cart.php?gid=18). # rsync-time-backup: include y exclude ## Introducción [rsync-time-backup](https://github.com/laurent22/rsync-time-backup) es una buena herramienta con la salvedad de que no tiene limite por fechas de los backlups continuos basados en rsync. Es un clon de Time Machine de Mac. Si trabajamos con sistemas completos hay muchos directorios y ficheros que debemos excluir e incluir. ### Include and Exclude > Si trabajamos con sistemas remotos, deberías leer [Rsync sobre sistemas remotos](https://wiki.castris.com/books/tips-sobre-la-administracion-de-linux/page/rsync-sobre-sistemas-remotos) o tendrás problemas con los permisos y el pruning en las rotaciones de backups expirados. - **-** Excluye el directorio o fichero - **+** Añade el directorio o fichero, siendo útil cuando hemos excluido un directorio superior. Ejemplo ```bash - /backupremote2/ - /bin - /boot - /cdrom - /dev - /lib - /lib32 - /lib64 - /libx32 - /media - /mnt - /opt - /proc - /run - /sbin - /snap - /srv - /swap.img - /sys - /tmp + /usr/local/ispconfig/ - /usr/* + /var/www/ - /var/backup/ - /var/lib/ - /var/log/ - /var/spool/ - /var/vmail/ - /var/webmin/ - /var/tmp/ - *.oh-my-zsh* - *.git* - /var/www/clients/client1/web4/web/media/catalog/product/cache/* - /var/www/clients/client1/web4/web/var/* - /var/www/newsexsations.es/web/var/* - /var/www/newsexsations.es/web/media/catalog/product/cache/* - */cache/* - */usr/* ``` Una [respuesta](https://stackoverflow.com/questions/8270519/rsync-exclude-a-directory-but-include-a-subdirectory#answer-8270881) que ta ayudará a entender el [RsyncTutorial](https://web.archive.org/web/20230126121643/https://sites.google.com/site/rsync2u/home/rsync-tutorial/the-exclude-from-option) que propone el desarrollador, algo lioso. ## Aviso Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com) Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/cart.php?gid=18).