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 cron
tarea para copiar automáticamente esas copias de seguridad a mi carpeta de Dropbox todas las noches usando rsync con la -a
opció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 rsync
tarea 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, ¿
rsync
solo 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
rsync
esto? 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 rsync
eso podría hacer el truco, pero como no estoy familiarizado.
source/* dest/
no funcionará.--delete
o--delete-after
no se eliminará debido a algunos errores: "Error de E / S encontrado - omitiendo la eliminación del archivo". Para resolver esta--ignore-errors
opción de agregar y depurar los errores por separado-n, --dry-run
opción, antes de ejecutarrsync
, especialmente cuando se trata de opciones como estas (--delete
). Evitará cualquier posible dolor de cabeza :).-a
implica-r
.El comando rsync no eliminará ningún archivo mientras use algunas de sus opciones
delete
en 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
rsync
para hacer copias de seguridad de los archivos de origen y usefind ... rm
para 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
delete
opciones son solo para TARGET que si algunos archivos se eliminan de la fuente, losrsync --delete
eliminan de TARGET. Y ladelete
opción porafter
ybefore
, como se menciona en su página de manual:Significa que:
--delete-after receiver deletes after transfer, not during
Significa 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-after
o--delete-before
.Por eso es importante abordar los errores de rsync.
La mayoría de mis errores se debieron al uso de la
--perms
opción al sincronizar con un sistema de archivos no Linux. Cuando reemplacé--perms
con--no-perms
, esos errores se fueron y borrar trabajaron.--perms
está 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),--perms
causa 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-perms
para evitar los errores que el sabotaje--delete
,--delete-after
o--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-errors
argumento, por lo que eliminaría incluso si hay errores.fuente