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 créé une cron
tâche pour copier automatiquement ces sauvegardes dans mon dossier Dropbox chaque nuit à l'aide de rsync avec l' -a
option.
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 a finalement fait son travail et a supprimé les sauvegardes les plus anciennes. Je m'attendais donc à ce que la rsync
tâche périodique supprime ultérieurement les sauvegardes les plus anciennes de mon dossier Dropbox pour qu'elles correspondent au dossier source, mais ce n'est pas le cas. J'ai donc quelques questions:
Par défaut, ajoute- t-il
rsync
uniquement les fichiers du dossier de destination ajoutés au dossier source et modifie-t-il les fichiers modifiés dans le dossier source sans supprimer les fichiers supprimés du dossier source?Si tel est le cas, quel est le meilleur moyen de le faire
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 quelques options listées dans la page de manuel pour rsync
que cela puisse faire l'affaire, mais comme je ne suis pas familier avec.
source/* dest/
ne fonctionnera pas.--delete
ou--delete-after
il ne sera pas supprimé à cause d'erreurs: "Erreur IO rencontrée - suppression de fichier ignorée". Pour résoudre cette--ignore-errors
option, ajoutez et corrigez les erreurs séparément-n, --dry-run
option, avant de l'utiliserrsync
, spécialement lorsqu'il s'agit d'options comme celles-ci (--delete
). Cela évitera tout mal de tête possible :).-a
implique-r
.La commande rsync ne supprimera aucun fichier tant que vous utiliserez 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 etfind ... rm
pour supprimer des fichiers pendant une période donnée ou de la taille des fichiers:Le bloc de code ci-dessus, effectuez une sauvegarde à partir de la source, puis supprimez tous les fichiers dont la date de dernière modification est supérieure à 2 mois.
MISE À JOUR
Comme je constate que les
delete
options ne concernent que CIBLE, si certains fichiers sont supprimés de la source,rsync --delete
supprimez-les de TARGET. Et l'delete
option byafter
etbefore
, comme mentionné dans sa page de manuel:Signifie que:
--delete-after receiver deletes after transfer, not during
Signifie que:
NOTE : la
--delete-{before/after}
machine vient juste de cibler.la source
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:
la source
rsync: Failed to exec --delete-before: No such file or directory (2)
S'il y a des erreurs au cours d' une scync rsync, rsync ne supprimera pas correctement les fichiers qu'il devrait avoir, même si vous avez utilisé
--delete
,--delete-after
ou--delete-before
.C'est pourquoi il est important de traiter les erreurs rsync.
La plupart de mes erreurs étaient dues à l'utilisation de l'
--perms
option lors de la synchronisation avec un système de fichiers non-Linux. Lorsque j'ai remplacé--perms
par--no-perms
, ces erreurs ont disparu, puis la suppression a fonctionné.--perms
est correct lorsque vous synchronisez un système de fichiers Linux vers un autre système de fichiers Linux, mais si vous synchronisez depuis Linux vers un système de fichiers non Linux (tel que NTFS, FAT),--perms
des erreurs se produisent car rsync ne peut pas définir d'autorisations Linux sur une machine. systèmes de fichiers non-linux . Encore une fois, errors = no delete.- Lors de la synchronisation à une partition non-Linux, je l' utilise
--no-perms
pour éviter les erreurs de sabotage--delete
,--delete-after
ou--delete-before
.Si vous avez toujours des erreurs après cela et que vous ne savez pas comment les résoudre, vous pouvez exécuter une commande exclusivement dédiée à la suppression des fichiers désynchronisés:
La commande ci-dessus supprimera les éléments désynchronisés, mais ne synchronisera aucun fichier. Donc, vous devriez synchroniser à nouveau après cela. Cette commande est basée sur cette réponse , si ce n'est que j'ai ajouté l'
--ignore-errors
argument également, de sorte qu'il serait supprimé même s'il y avait des erreurs.la source