J'ai récemment installé une machine avec Ubuntu Server pour héberger des serveurs de jeux. J'ai installé un plug-in de sauvegarde pour chaque serveur de jeu, qui crée des sauvegardes fréquentes des fichiers du monde du jeu dans un dossier particulier de la machine. J'ai également établi une tâche cron
pour copier automatiquement ces sauvegardes dans mon dossier Dropbox chaque nuit à l'aide de rsync avec l'option -a
.
Après quelques mois, mon compte Dropbox a atteint sa limite de stockage et je me suis rendu compte que je ne serais pas en mesure de conserver autant de sauvegardes. J'ai donc configuré le plug-in de sauvegarde du serveur de jeu pour ne pas conserver autant de sauvegardes, puis j'ai attendu quelques jours pour voir s'il le ferait. supprimez les anciennes sauvegardes comme il est prévu de le faire toutes les semaines. Le plug-in de sauvegarde finissant par faire son travail et supprimant les anciennes sauvegardes, je m'attendais donc à ce que la tâche périodique rsync
supprime ultérieurement les anciennes sauvegardes de mon dossier Dropbox pour les faire correspondre au dossier source, mais ce n'est pas le cas. J'ai donc quelques questions:
Par défaut, rsync
uniquement ajoute-t-il des fichiers au dossier de destination qui ont été ajoutés au dossier source et changer les fichiers qui ont été modifiés dans le dossier source mais () NOT delete fichiers supprimés du dossier source?
Si tel est le cas, quelle est la meilleure façon de faire ceci avec rsync
? Je souhaite que le dossier de destination reflète parfaitement le dossier source, ce qui signifie la suppression de tous les fichiers supprimés du dossier source.
Je vois certaines options répertoriées dans la page de manuel de rsync
qui pourraient faire l'affaire, mais je ne les connais pas bien.
Pour supprimer des fichiers de la cible, ajoutez l’option --delete
à votre commande. Par exemple:
rsync -avh source/ dest/ --delete
La commande rsync ne supprimera aucun fichier si vous utilisez certaines de ses options delete
dans cette commande. Ainsi, si un fichier ou un dossier est ajouté à la source, il sera synchronisé avec la cible sans aucune suppression.
Je vous suggère d'utiliser rsync
pour effectuer une sauvegarde à partir de fichiers source et d'utiliser find ... rm
pour les fichiers de suppression par période ou par taille:
rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;
Le code ci-dessus, effectuez une sauvegarde à partir de la source, puis supprimez tous les fichiers dont la dernière modification a duré plus de 2 mois.
UPDATE
Comme je trouve que les options delete
sont uniquement destinées à TARGET que si certains fichiers sont supprimés de la source, rsync --delete
les supprime de TARGET. Et l'option delete
de after
et before
name__, comme indiqué dans sa page de manuel:
--delete-before receiver deletes before transfer, not during
Signifie que:
--delete-after receiver deletes after transfer, not during
Signifie que:
NOTE: le --delete-{before/after}
est implémenté uniquement dans TARGET.
Cette commande copie les données d’incrémentation et les maintient synchronisées avec le serveur distant.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Exemple:
rsync -avWe ssh --delete-before /data [email protected]:/backup
rsync -avW --delete-before -e ssh /data [email protected]:/backup