Script de sauvegarde Rsync à distance - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 01-04-2013 à 23:21:47
Code :
|
Pour ma part, c'est plus le comportement de tes sauvegardes qui me chagrine un peu : tu fais quoi là exactement ?
Le tout c'est d'adapter tes roulements de sauvegardes suivant l'utilisation et la durée de rétention désirée... 999 sauvegardes ça te ferait quoi, sur 3 ans en journalier ?
Sur ton NAS tu as un cron de disponible ? Si oui tu pourrais déjà largement simplifier en utilisant un appel du genre :
MAILTO="sauvegardes@hfr-mail.org" |
variable MAILTO : les données de résultat du cron seront envoyé à cette adresse.
backup_rsync_T.sh -> un script de sauvegarde total
backup_rsync_D.sh -> un script de sauvegarde différentielle par rapport au précédent total enregistré, pour savoir le dossier du jour prendre la variable ajoutée dans le cron après l'appel du script
Suivant la place (en exemple de cron, 5h du mat) :
- 1 journalière, rétention de 7 jours <- cron sait faire ! (0 5 * * *)
- 1 hebdomadaire, rétention de 3 semaines <- cron sait faire ! (0 5 1/7 * *)
- 1 mensuelle, rétention de 6 mois <- cron sait faire ! (0 5 * 1,7 *)
- 1 annuelle, rétention comme tu le veux, mais externalisée sur un autre support (bluray par exemple)
Là ton script est intéressant, mais trop complexe à mon goût. Un exemple plus simple serait pour moi ceci, avec 3 types de fichiers de conf différents (journalière, hebdo, mensuelle)
Marsh Posté le 02-04-2013 à 10:15:53
Ce que je fais c'est une sauvegarde quotidienne qui part dans un dossier qui s'appelle 000 puis tous les jours je fais une rotation du dossier (fait par la fonction rotation_sauvegarde() ligne 82)
000 -> 001, 001-> 002, etc... ce qui permet de remonter dans le passé à volonté.
Comme tu le soulignes, l'intérêt de remonter diminuant avec le temps et pour gagner de l'espace, je fait un tri : toutes les sauvegardes de 000 à 040 sont gardés puis j'en garde 1 sur 10 entre 40 et 130, puis 1 sur 30 et 1 sur 200 à partir de la 400ème. Ceci est géré par la fonction suppression_sauvegardes() ligne 113 avec les appels paramétrables en 213, 214 et 215
Ici c'est pour une sauvegarde distante via internet, j'ai donc essayer de prendre en compte toutes les contraintes : économie maximum de la bande passante, gestion du risque de déconnexion, arrêt impromptu d'une des deux machines, le tout en restant 100% automatique. Du coup ça alourdi forcément un peu.
Marsh Posté le 04-04-2013 à 15:25:51
En fait je fais une sorte de sauvegarde incrémentale mais en gardant sur la sauvegarde distante une certaine consistance puisque tous les fichiers inchangés sont remplacés par des liens durs. Cela est dicté par le fait que la bande passante en upload étant limitée je ne peux pas faire de différentielle ni me permettre de refaire régulièrement une sauvegarde totale.
J'ai réfléchi à ta proposition bardiel, si j'ai bien compris cron pourrait remplacer mes fonctions de rotation des sauvegardes et la suppression des plus ancienne selon la répartition spécifique. Le reste du script serait alors presque identique.
D'autres avis sur la méthode et la façon de coder ? J'aurais peut être du poser des questions plus spécifiques sans balancer tout le script qui fait peur en fait
Marsh Posté le 05-04-2013 à 09:46:14
ReplyMarsh Posté le 06-04-2013 à 12:09:16
Hello !
Je suis un utilisateur régulier de rsync, c'est un outil très puissant.
Si j'ai bien compris ce que tu veux faire : faire un mirror d'un NAS vers un autre ou plutôt une synchro dans les deux sens ?
Pourquoi vouloir gérer des backup temporel puisqu'avec la sync (ou le mirror) tu aura une sauvegarde distante ?
Marsh Posté le 06-04-2013 à 22:10:00
Alors en résumé : j'ai un NAS à Orléans et un disque dans le NAS d'un ami à Toulouse. Je veux faire un backup quotidien de mon NAS vers le siens.
Ce n'est ni plus ni moins qu'un miroir, sauf que je veux pouvoir conserver l'historique pour retrouver un éventuel vieux fichier supprimé ou corrompu entre temps.
Pour moi la partie "temporelle" du script : la rotation des sauvegarde et la suppression non linéaire ne m'ont pas posés de soucis.
Là où je me demande si c'est bien propre c'est plutôt sur la gestion du cas où le script de la veille n'a pas terminé la sauvegarde. J'explique : je ne peux avoir sur mon ADSL que 125ko/s en upload, je limite rsync à 100ko par exemple et déclenche par cron une sauvegarde quotidienne à minuit. S'il y a + de 6Go à transférer, le lendemain à minuit cron va relancer une autre instance du script et un autre rsync et ça colle un bazar monstre.
Du coup je gère ça avec un fichier "flag" qui sert aussi de log et qui reste en place si l'un des NAS s'est éteind au milieu de la synchronisation. Du coup ça permet de gérer le cas de la sauvegarde incomplète ou potentiellement foireuse.
roscocoltran -> Je ne connaissais pas rsnapshot, ça m'a l'air pas mal du tout. Je vais essayer de tester ça.
Je n'ai pas vu ça dans la doc mais tu sais si jamais il arrive à retrouver un fichier déplacé ou renommé par rapport à la sauvegarde n-1 et du coup à faire un hard link vers celui ci ou si il retransfère la totalité les données ?
J'utilise une version de rsync compilée avec cette modif (--detect-renammed) qui permet d'éviter de renvoyer plusieurs gigas (et donc plusieurs jours d'upload) si un utilisateur renomme le dossier "photo" en "PHOTOS".
Marsh Posté le 07-04-2013 à 00:20:45
the_matrix_has_you a écrit : Alors en résumé : j'ai un NAS à Orléans et un disque dans le NAS d'un ami à Toulouse. Je veux faire un backup quotidien de mon NAS vers le siens. |
rsnapshot n'est qu'un wrapper autour de rsync. Tu peux indiquer les chemins des binaires que rsnapshot doit utiliser. Tu peux donc lui indiquer le chemin de ta version compilée de rsync.
Marsh Posté le 14-04-2013 à 17:33:00
T'as regardé l'option --update de rsync ? Ça n'envoie que si le fichier local est plus récent que le fichier distant (ou si nouveau).
Couplé avec --delete, ça permet de faire un miroir sans abuser de la bande passante.
Et re-coupler avec --backup, les fichiers supprimés à cause du --delete sont mis dans un dossier à part.
J'ai un petit script tout simple qui me permet d'avoir un miroir distant d'un dossier, et qui conserve les fichiers supprimés au cours du temps dans des dossiers datés du jour de la backup.
Code :
|
Dans le dossier /a/b j'ai :
- mon dossier miroir
- un dossier "rsync_delete" qui contient par exemple :
- un dossier 13_04_07
- un dossier 13_04_14 qui contient tous les fichiers qui ont été supprimés entre la backup du 07 avril et celle du 14 avril
- un dossier de log avec un log par date, histoire de s'y retrouver parmi tout ce bor*** (je l'ai pas mis dans mon script, mais ptèt que je le ferai un jour)
Je sais pas si ça t'aide mais ça me semble assez proche de ce que tu veux et c'est plus simple comme ça.
Si tu veux faire une rotation, t'as qu'à supprimer à chaque sauvegarde le plus vieux des dossiers de /a/b/rsync_delete :
Code :
|
Marsh Posté le 14-04-2013 à 19:37:29
the_matrix_has_you a écrit : Alors en résumé : j'ai un NAS à Orléans et un disque dans le NAS d'un ami à Toulouse. Je veux faire un backup quotidien de mon NAS vers le siens. |
fait poser une fibre noire entre ton ami et toi
j'ai du revoir une soluce de backup pour le boulot qui tournait sur des script rsync homemade. Je trouve que tout le monde réinvente un peu la roue (le backup incremental) avec des script rsync. alors qu'en cherchant bien je pense qu'on peux trouver un truc clean et solide tout fait.
(j'ai trouvé bacula pour ma part, m'enfin ptetr un peu overkill pour ici)
Marsh Posté le 22-04-2013 à 10:02:53
J'ai mis en place ce system pour le back up dans une PME (50 utilisateurs), en interne et en externe. La limitation aujourd'hui c'est le "rm" des hardlink, ça met un temps fou ! . Si quelqu'un a une idée pour accèlérer cela. Sinon ça marche très bien depuis plusieurs années, avec un roulement sur 30 jours... Simple, gratuit et efficace, si ce n'est le "rm" à la fin du script qui prend maintenant plusieurs heures ! Sous Red Hat.
Marsh Posté le 22-04-2013 à 10:11:21
exeral a écrit : fait poser une fibre noire entre ton ami et toi |
genre un truc mentionné sur ce topic ?
Marsh Posté le 22-04-2013 à 14:27:36
exeral a écrit : j'ai du revoir une soluce de backup pour le boulot qui tournait sur des script rsync homemade. Je trouve que tout le monde réinvente un peu la roue (le backup incremental) avec des script rsync. alors qu'en cherchant bien je pense qu'on peux trouver un truc clean et solide tout fait. |
ça, ou encore rdiff-backup
exeral a écrit : (j'ai trouvé bacula pour ma part, m'enfin ptetr un peu overkill pour ici) |
Tout dépend de ce que tu recherches. Même si je réserverais bacula pour gérer la sauvegarde de plusieurs serveurs et/ou clients vers un serveur de sauvegarde.
senado a écrit : J'ai mis en place ce system pour le back up dans une PME (50 utilisateurs), en interne et en externe. La limitation aujourd'hui c'est le "rm" des hardlink, ça met un temps fou ! . Si quelqu'un a une idée pour accèlérer cela. Sinon ça marche très bien depuis plusieurs années, avec un roulement sur 30 jours... Simple, gratuit et efficace, si ce n'est le "rm" à la fin du script qui prend maintenant plusieurs heures ! Sous Red Hat. |
ça c'est le gros point faible des logiciels de sauvegarde, mais là c'est plus au niveau système de fichiers que cela se joue... avec bacula je m'y étais cassé les dents dessus, et finalement "on" a décidé de faire zéro hardlink, bacula mets ses fichiers suivant le FS utilisé pour ne pas faire perdre de temps inutilement au système.
Quand on met 4h pour faire 10Go de sauvegarde quotidienne à cause de ces conneries, autant ne plus s'enquiquiner avec. En 5 minutes c'est plié même si on prend plus de place ainsi.
On peut même s'amuser à faire de la backup "soit-disant" différentielle ainsi avec rsync et des hardlink, mais bon je ne tenterais pas ça sur un serveur de prod où j'ai du fichiers sensibles
Marsh Posté le 24-04-2013 à 20:50:32
senado a écrit : J'ai mis en place ce system pour le back up dans une PME (50 utilisateurs), en interne et en externe. La limitation aujourd'hui c'est le "rm" des hardlink, ça met un temps fou ! . Si quelqu'un a une idée pour accèlérer cela. Sinon ça marche très bien depuis plusieurs années, avec un roulement sur 30 jours... Simple, gratuit et efficace, si ce n'est le "rm" à la fin du script qui prend maintenant plusieurs heures ! Sous Red Hat. |
Supprimer les hard link etait beaucoup plus rapide sous XFS que sous ext3.
J'ai jamais essaye avec ext4 (enfin si, mais seulement chez moi) car ca fait deja quelques annees que je ne suis plus admin.
Marsh Posté le 01-04-2013 à 22:31:02
Bonjour à tous,
Je suis entrain de mettre en place un système de sauvegarde des données de mon NAS vers un NAS distant hébergé chez un ami et réciproquement pour ses données. Le tout est basé sur rsync, j'ai écrit un bout de script pour gérer le tout mais c'est un peu mon premier script. Etant donné qu'il s'agit quand même d'une application "sensible" pour l'intégrité des données, j'aimerai savoir si je me suis complètement planté ou non.
Désolé, ça va faire une grosse page de code balancée comme ça mais j'ai commenté un maximum pour m'y retrouver.
Le principe de base est en gros de faire des snapshots : je fais de l'incrémental pour récupérer les données modifiées entre 2 sauvegardes, le reste est constitué de lien en dur.
Ça fait un gros pâté , pas moyen de colorer sur le forum ?
Merci à vous en tout cas !
Edit : coloration des commentaires pour essayer de gagner en lisibilité
Message édité par the_matrix_has_you le 02-04-2013 à 10:49:10