Recientemente configuré una máquina con Ubuntu Server para alojar servidores de juegos. Instalé un complemento de copia de seguridad para cada servidor de juegos que crea copias de seguridad frecuentes de los archivos del mundo del juego en una carpeta particular en la máquina. También establecí una crontarea para copiar automáticamente esas copias de seguridad a mi carpeta de Dropbox todas las noches usando rsync con la -aopción.
Después de unos meses, mi cuenta de Dropbox alcanzó su límite de almacenamiento y me di cuenta de que no podría mantener tantas copias de seguridad, así que configuré el complemento de copia de seguridad del servidor del juego para no retener tantas copias de seguridad, luego esperé unos días para ver si lo haría. elimine las copias de seguridad anteriores como está programado para hacerlo semanalmente. El complemento de copia de seguridad finalmente hizo su trabajo y eliminó las copias de seguridad más antiguas, por lo que esperaba que la rsynctarea cron eliminara posteriormente las copias de seguridad más antiguas de mi carpeta de Dropbox para que coincida con la carpeta de origen, pero no lo ha hecho. Entonces tengo un par de preguntas:
Por defecto, ¿
rsyncsolo agrega archivos a la carpeta de destino que se han agregado a la carpeta de origen y cambia los archivos que se han cambiado en la carpeta de origen pero NO elimina los archivos que se eliminaron de la carpeta de origen?Si ese es el caso, ¿cuál es la mejor manera de hacer
rsyncesto? Quiero que la carpeta de destino refleje perfectamente la carpeta de origen, y eso significa eliminar cualquier archivo que se haya eliminado de la carpeta de origen.
Veo algunas opciones enumeradas en la página del manual para rsynceso podría hacer el truco, pero como no estoy familiarizado.

source/* dest/no funcionará.--deleteo--delete-afterno se eliminará debido a algunos errores: "Error de E / S encontrado - omitiendo la eliminación del archivo". Para resolver esta--ignore-errorsopción de agregar y depurar los errores por separado-n, --dry-runopción, antes de ejecutarrsync, especialmente cuando se trata de opciones como estas (--delete). Evitará cualquier posible dolor de cabeza :).-aimplica-r.El comando rsync no eliminará ningún archivo mientras use algunas de sus opciones
deleteen ese comando. Entonces, si se agrega algún archivo o carpeta en la fuente, se sincronizará con el destino sin ninguna eliminación.Le sugiero que use
rsyncpara hacer copias de seguridad de los archivos de origen y usefind ... rmpara eliminar archivos por un período de tiempo o tamaño de archivos:El bloque de código anterior, haga una copia de seguridad desde la fuente y luego elimine todos los archivos cuya última modificación es de más de 2 meses.
ACTUALIZAR
Como encuentro que las
deleteopciones son solo para TARGET que si algunos archivos se eliminan de la fuente, losrsync --deleteeliminan de TARGET. Y ladeleteopción porafterybefore, como se menciona en su página de manual:Significa que:
--delete-after receiver deletes after transfer, not duringSignifica que:
NOTA : el
--delete-{before/after}implemento solo en TARGET.fuente
Este comando copiará los datos incrementales y los mantendrá sincronizados con el servidor remoto.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)Ejemplo:
fuente
rsync: Failed to exec --delete-before: No such file or directory (2)Si hay algún error durante una scync rsync, rsync no va a eliminar correctamente los archivos que debe tener, incluso si se ha utilizado
--delete,--delete-aftero--delete-before.Por eso es importante abordar los errores de rsync.
La mayoría de mis errores se debieron al uso de la
--permsopción al sincronizar con un sistema de archivos no Linux. Cuando reemplacé--permscon--no-perms, esos errores se fueron y borrar trabajaron.--permsestá bien cuando está sincronizando desde un sistema de archivos Linux a otro sistema de archivos Linux, pero si está sincronizando desde Linux a un sistema de archivos no Linux (como NTFS, FAT),--permscausa errores porque rsync no puede establecer permisos de Linux en un sistemas de archivos no linux . De nuevo, errores = no eliminar.- Al sincronizar en una partición no-Linux, yo uso
--no-permspara evitar los errores que el sabotaje--delete,--delete-aftero--delete-before.Si aún recibe errores después de eso, y no puede descubrir cómo hacer que esos errores funcionen, puede ejecutar un comando dedicado exclusivamente a eliminar los archivos no sincronizados:
El comando anterior eliminará cosas que no están sincronizadas, pero no sincronizará ningún archivo. Entonces, debes sincronizar nuevamente después de esto. Ese comando se basa en esta respuesta , excepto que también agregué el
--ignore-errorsargumento, por lo que eliminaría incluso si hay errores.fuente