Pour des raisons de sécurité, se placer sur le serveur qui contiendra les sauvegardes et se connecter à l'autre en ssh.
la copie se fait de gauche à droite:
si un fichier est modifé a gauche il est envoyé à droite.
si un fichier est supprimé a gauche il n'est pas supprimé à droite. (pour supprimer il faut ajouter --delete ou --delete-after)
ajouter --partial pour pouvoir reprendre un transfert qui a coupé
ajouter --progress pour afficher la progression du transfert
ou -P pour faire --partial et --progress d'un coup
-n pour faire des tests, car ça n'execute pas de transfert ni de delete
exemple :
rsync -az 'test_prod@test.fr:/home/sql/project_prod_*.sql' /home/test/save/
exclure
--exclude permet d'exclure un path ou un fichier
--delete-excluded permet de supprimer les fichiers qui trainerait si ils avaient déjà été transférés.
rsync -az --exclude file1.txt --exclude dir3/file4.txt test_prod@project.fr:/home/sql/ /home/test/save/
ajouter l'option --link-dest et spécifier le dossier du précédent backup pour que les hardlinks se fassent
exemple complet
mkdir /root/rsynctest cd /root/rsynctest/ # create test files to sync mkdir work head -c 100M work/a.txt # folder to store backups mkdir /root/rsynctest/backup # first full backup rsync -avzP /root/rsynctest/work/ /root/rsynctest/backup/A # the second day : full backup with hardlink generation to reduce storage usage rsync -avzP --link-dest=/root/rsynctest/backup/A /root/rsynctest/work/ /root/rsynctest/backup/B # confirm storage usage : du -hs /root/rsynctest/work /root/rsynctest/backup/* 100Mo /root/rsynctest/work 100Mo /root/rsynctest/backup/A 8K /root/rsynctest/backup/B # note that calling du on a specific backup will still print its full size (or use du -l on last command) du -hs /root/rsynctest/backup/B 100Mo
En lançant cette commande chaque jours :
Un dossier 'principal' sera tenu à jour et sera un mirroir parfait du serveur initial. (les fichiers sont mis à jour et supprimés si nécéssaire)
grace aux paramètres : --backup et --backup-dir, Un nouveau dossier "poubelle" (nommé par ex "2019-09-02") sera créé avec les fichiers modifié et/ou supprimés ce jour.
l'arborescence dans ce dossier est conservée.
rsync -aqzP -e "ssh -p 22" --backup --backup-dir=/root/savedisk/2I/backup-date +\%d/home/ --delete --delete-excluded --exclude site/web/uploads/tmp --exclude gextra_prod/logs --exclude site/log --exclude .vscode-server-insiders --exclude app/logs --exclude app/cache root@gextra.net:/home/ /root/savedisk/2I/principal/home/
copier simplement le dossier principal
copier le dossier principal, puis copier les données depuis chaque dossier 'poubelle' du plus récent au ancien.
Exemple on a fait des actions tous les jours, et aujourd'hui nous sommes le 2019-09-06 et on veut récupérer l'état dans lequel on se trouvait le 2019-09-02. Par exemple on veut retrouver le fichier A (v1)
2019-09-02 create A (v1) => A (v1) est copié dans le dossier principal
2019-09-03 update A (v2) => A (v2) est à nouveau copié dans le dossier principal, A (v1) se trouve maintenant dans la corbeille '2019-09-03'
2019-09-04 delete A => A se trouve maintenant dans la corbeille '2019-09-04' et est supprimé du dossier 'principal'
2019-09-05 create A (v3) => A (v2) se trouve toujours dans la corbeille '2019-09-04' et A (v3) se trouve dans le dossier 'principal'
En copiant les dossiers principal puis 5, puis 4, puis 3, puis 2 on retrouve bien le fichier A (v1)
PS : les fichiers qui ont été modifié/créés/supprimés après le 2019-09-02 sont présent et polluent la restoration.