Faire ses sauvegardes soi-même
Le 10 novembre 2008, à 17:3 par Ulhume...

Un domaine doté d'un nombre impressionnant d'outils libres est celui de la sauvegarde. Et pourtant, lorsque l'on fait tourner sa petite toutouille perso, des monstres comme Amanda font l'effet de massues à écraser les mouches. L'objectif de ce billet est donc le même que ça précèdent version : permettre de faire nos sauvegardes en tout simplicité, en mettant en oeuvre des concepts professionnels (synchronisation distante, mirroring, historisation) mais simplement armé des outils basiques que sont rsync et ssh.

Historique (tout afficher)
  • v4 - Un pas en avant, deux pas en arrière, retour à la bonne vieille méthode des hard links, autrement plus fiable que rdiff-backup... (2008-11-23 14:25)
  • v3 - Migration vers perl, exports evolution & postgres (2008-11-10 19:43)

avant-propos

Ce type de sauvegarde ne convient qu'au contexte d'une architecture domestique ou approchant (TPME, Indépendant, etc.). Pour tous les autres, il existe des outils tout faits et même dans certains cas plus ergonomiques (typiquement pour la sauvegarde de son seul poste de travail).

Je devance donc un peu certains commentaires : ce n'est pas la peine de me dire qu'il existe des outils faisant tout cela très bien car le but ici est justement de faire le sien aux petits oignons, adapté au plus prés de nos besoins. L'avantage est qu'un outil que l'on connaît est plus facile à mettre au point qu'une usine à Gaz qui change à chaque version. De plus il vous sera possible d'ajouter des petits détails propres à votre installation qu'un système de sauvegarde trop simple ne saura pas gérer.

Principe de l'historisation

Le principe d'historisation est repris de cet article. Je ne reviens donc pas dessus. Cependant la manière d'utiliser ici les hardlinks est un peu différente. L'idée est d'avoir dans notre dossier de stockage, deux sous dossiers current et history. A chaque rotation, le dossier current, qui contient les dernières données sauvegardées est hardlinké de manière récursive dans un sous-dossier de history portant comme nom la date et l'heure de la rotation. Ensuite on ne va garder que les N dossiers les plus récents en détruisant les plus anciens.

Ainsi, si vous lancez une sauvegarde toutes les 15 minutes et que l'on garde, disons 100 rotations, vous disposez de la possibilité de remonter en arrière dans le temps de 50 heures par tranches de 15 minutes.

Dans la précédente version de ce tutoriel, j'avais utilisé rdiff-backup pour effectuer ce travail. L'expérience m'a prouvé qu'utilisé massivement, cet outil n'est juste pas fiable. A deux reprises je me suis retrouvé avec des deltas corrompus et l'impossibilité de revenir en arrière dans le temps. De plus le système par hard-links permet de récupérer très simplement un snapshot en faisant un rsync. Avec rdiff-backup, on doit passer par divers paramètres pour arriver d'une utilisation beaucoup moins évidente, même s'il s'agit là d'une question d'habitude.

Sauvegarder pour quoi faire ?

Le meilleur moment dans la vie pour prendre conscience de l'intérêt d'une sauvegarde est celui où notre disque se met à crépiter tel un joyeux feu de la Beltane. Un tera gavé à bloc des photos et vidéos du petit dernier qui n'est alors plus qu'une brique aussi fumante que votre compagne qui vous interroge de cet air redoutablement inquiet : T'as bien une copie quelque part, dis.... A ce stade, on se fait généralement la remarque qu'une sauvegarde automatisée aurait été bien utile... Car c'est reconnu par une utilisation quelque peu foireuse de la loi de Murphy : la sauvegarde automatique est réputée pour éloigner le mauvais oeil et allonger la durée de vie des disques durs...

Sauvegarder quoi ?

La bonne réponse est tout !!!. Du moins tout ce qui n'est pas installable : documents de travail, photos, vidéos, configurations, etc. Mais il est possible de distinguer trois catégories dans ce "tout"

  • Les données qui changent régulièrement : documents de travail, configuration de machines, etc...
  • Les bases de données au sens large : courriels d'un serveur IMAP, base mySql ou PostgreSQL, gestionnaire de version (CVS, Subversion, etc.).
  • Les données lourdes qui changent peu mais qui augmentent en de grandes portions : vidéos, photos, ressources en tout genre.

Les deux derniers cas, s'accommodent généralement assez bien d'une sauvegarde journalière simple, sans historisation. En revanche pour la première catégorie, il nous faut quelque chose de plus régulier avec la possibilité de remonter dans le temps. Cela permet de tordre le cou au cas classique de l'effacement accidentel du dossier BétaDur que vous étiez sur le point de livrer au client, ou celui de la mise à jour pour laquelle les mainteneurs de la Mandriva ont décidés pour dieu sait quelle raison que la configuration de votre PostFix était toute pourrie et qu'il fallait impérativement vous la pourrir plus encore plus...

L'approche Perl

La précédente version de ce tuto utilisait bash (elle est encore disponible en révision). Le problème de bash c'est que l'on est vite gêné aux entournures, obligé à faire de terribles jonglages à coup de tubes, awk et autres sed. Perl est donc devenu peu à peu mon langage de script favoris. Sa syntaxe permet d'écrire à peu prés aussi rapidement qu'en bash avec plus de rigueur, et donc moins d'effets de bord. Enfin ses librairies sont tellement nombreuses qu'il est rare de ne pas en trouver une qui colle parfaitement à un besoin.

Notre but est donc de fabriquer une librairies Perl très simple que nos scripts de sauvegarde utiliseront. Pour ce faire nous allons utiliser quelques concepts clef qui convient de bien comprendre :

  • Utilisation de SSH pour aller chercher les données à sauvegarder sur les autres machines que celle qui fait physiquement la sauvegarde. Pour cela nous "lions" les machines les unes aux autres grâce à des clefs publiques/privées. Notre librairie n'aura donc besoin d'aucun mot de passe car elle sera utilisée par "root". Si le serveur SSH utilise un port non standard, ce qui est conseillé pour une machine accessible du réseau publique, le fichier /etc/ssh_config sera paramétré pour que l'accès se fasse sans avoir à spécifier le port. Si vous ne vous sentez pas à l'aise avec tout cela, allez faire un tout ici
  • Le transport des fichiers d'une machine à l'autre utilise rsync selon que l'historisation est nécessaire ou pas. Ces deux outils permettent de synchroniser via SSH deux dossiers (local et distant) en ne faisant circuler sur le réseau que ce qui est différent. Faites un petit coup de man rsync pour avoir plus d'idée sur le sujet.

Maintenant, histoire de savoir où l'on avance, nous allons commencer par la fin, avec ce à quoi ressemblerait un script de sauvegarde "live", c'est à dire celui correspondant à notre première catégorie de choses à sauvegarder : les données qui changent souvent.

#! /usr/bin/perl

# import de notre librairie
unshift(@INC,"/usr/share/tools/libraries/perl");
require "backup.pm";

# définition de la destination des backups
use_storage("/backups");


# définition du serveur (local car c'est aussi lui qui lance les sauvegardes, pas besoin de ssh)
if (check_host(
      name=>"serveur_interne",
      fs=>"local")) {

  # ajout d'un dossier distant à sauvegarder localement, ici /etc en utilisant
  # les exclusions de type "etc".  
  add_folder("/etc", "etc");
}

# définition d'un poste de travail
if (check_host(name=>"poste_travail")) {
  add_folder("/etc", "etc");
  add_folder("/home", "homes");
}

# définition du serveur publique
if (check_host(name=>"serveur_publique")) {
  add_folder("/etc", "etc");
}

# définition d'une machine windows
if (check_host(
    name=>"machine_windows",
    fs=>"cifs",
    root=>"C")) {
  add_folder("/Users/gaston", "windows");
}

release_storage();

Pas si compliqué n'est-ce pas ? Voyons un peu comment tout cela se goupille.

La librairie

L'idée n'est pas ici de donner un cours de perl, je ne vais donc pas coller le code de la dizaine de procédure que la librairie contient mais plutôt en expliquer l'utilisation. Les sources sont dans tous les cas disponibles ici.

Préparation et libération du stockage

use_storage("/backups");

...

release_storage();

La fonction use_storage et release_storage ne font rien d'extraordinaire. La première va juste créer du dossier cible et surtout y coller un fichier vide, lock pour éviter que la procédure soit ré-entrante. Ainsi si un autre programme travaille sur notre dossier de stockage, la procédure user_storage va nous bloquer jusqu'à ce que le précédent programme ait terminé. release_storage détruit donc ce lock.

Définition des machines

if (check_host(
        name=>"machine_windows",
        fs=>"cifs",
        root=>"C")) {
  ...
}

Une fois le stockage définit, l'idée est de vérifier que la machine que l'on cherche à backuper est bien présente sur le réseau. Pour cela nous utilisons la fonction check_host qui exploite la libraire Net::Ping. La seule astuce est de régler le protocole à icmp. En effet par défaut cette librairie fait un ping via tcp, ce qui n'est pas compatible avec une machine ayant un firewall qui restera du coup invisible à la sauvegarde.

L'autre objectif de la fonction check_host est de définir la machine source tout d'abord par son nom usuel (name) puis optionnellement par son adresse IP (address). Si l'adresse IP est mise, c'est le nom de la machine qui est utilisé.

Dans tous les cas un sous-dossier du nom de cette machine va être créé sous celui défini dans use_storage. C'est là que ce feront toutes les sauvegarde. Lorsque la sauvegarde se fera, la structure complète du dossier à sauvegardé sera créé en dessous de se sous-dossier. Le paramètre root permet quant à lui de tronquer une partie du début du chemin en indiquant une racine distante de sauvegarde. Ainsi dans le cas d'une sauvegarde CIFS (windows), la racine indique de ne pas prendre en compte le C mais de commencer directement avec le début du chemin à sauvegarder.

La paramètre fs permet de nuancer la manière dont est vue la machine. Par défaut c'est ssh, signifiant que ssh sera utilisé pour se lier à la machine distante. La méthode local indique quant à elle que nul n'est besoin de SSH, qu'il faut faire une copie local. Enfin nous avons la méthode cifs qui va consister à monter le dossier windows avant de sauvegarder et ftp qui va utiliser wget plutôt que rsync-backup.

Lors de l'utilisation de CIFS, les autorisations sont directement recherchées dans le dossier /etc/backup/nom_machine.credentials et utilise la syntaxe de mount.cifs.

Enfin le paramètre method définit l'outil utilisé pour la synchronisation. Il peut s'agir rsync (par défaut).

Synchronisation

...
add_folder("/home", "homes");
...

La définition de la machine faire par la commande check_host permet de simplifier au maximum la syntaxe des dossier à sauvegarder. La librairie sait en effet déjà quelle est l'adresse de la machine, la destination de sauvegarde, le type de système de fichier (local, ssh, ftp ou cifs) et l'outil de synchronisation à utiliser (rsync). Il ne reste plus donc qu'à donner les dossiers à sauvegarder par la commande add_folder.

add_folder prend en premier paramètre le chemin local sur la machine à sauvegarder et en second, optionnellement, un nom de fichier d'exclusions. Ce fichier utilise le format natif de la commande de synchronisation utilisé (rsync) et doit se trouve dans le dossier /etc/backup, dans un fichier nommé nom_exclusion.exclusions. Les exclusions portent ici assez mal leur nom car ces fichiers permettent aussi de force la sauvegarde d'un fichier. Par exemple pour un dossier home, cela donne :

- **/.purple/icons
+ **/.purple
+ **/.evolution/calendar/local/system/calendar.ics
+ **/.evolution/addressbook/local/system/addressbook.db
+ **/.gconf
+ **/.liferea_*/feedlist.opml
- **
/etc/backup/homes.exclusion

Mirroring

Comme nous l'avons vu en introduction, nous allons avoir deux types de sauvegardes. Celles effectuées très souvent, contenant les dossiers qui changent régulièrement. Et celles que l'on fait chaque nuits, contenant les bases de données (mail, postgresql, etc.) et les données lourdes (photos, vidéo, etc.).

Chacune de ces deux sauvegardes va donner lieu à un script en perl comme celui montré plus haut. Celui de la sauvegarde régulière va être très simple et demande à peu prés aucune adaptation. Celui de la sauvegarde journalière est un peu différent car nous allons rsync car historiser les changements sur des photos ou des bases de données n'a que peu d'intérêt (à vous de voir ceci dit).

Ensuite la sauvegarde n'est pas faite en local, mais sur un disque USB. Cette approche permet de limiter les risques électriques entres le serveur et le disque dur externe. Ceci dit ce n'est pas encore le top, et le mieux serait un petit montage qui allume physiquement le disque au moment de la sauvegarde, un électronicien avec une idée simple à mettre en oeuvre ?

Dernier aspect, cette grosse sauvegarde va comprendre nos bases, nos fichiers lourds mais aussi notre précédent dossier de sauvegarde régulière. Ainsi nos fichiers qui changent souvent sont non seulement historisés en local, mais aussi recopiés sur le disque USB pour plus de sécurité.

 #! /usr/bin/perl

use File::Path;
unshift(@INC,"/usr/share/tools/libraries/perl");
require "backup.pm";

# montage du disque de sauvegarde en lecture-écriture
my $mount_point="/mnt/backup";
`mount /dev/disk/by-label/backup $mount_point -o remount,rw`;

# ouverture du stockage pour notre sauvegarde
use_storage("$mount_point/mirroring");

# comme d'habitude, définition de la machine distante, mais cette fois utilisant "rsync"
if (check_host(name=>"serveur_distant", method=>"rsync")) {
  # sauvegarde des bases de données (postgresq, subversion, imap, etc)
  add_folder("/databases");

  # sauvegarde des fichiers "lourds"
  add_folder("/videos");

  # sauvegarde de nos "sauvegardes régulières"
  add_folder("/backups");
}
release_storage();

# remontage du disque en lecture seule
`mount $mount_point -o remount,ro`;      
script lancé toutes les nuits

CRON

Dernière étape une fois que nos deux scripts sont écrits et testés, les mettre en musique en passant par un planning cron :

# toutes les 15 minutes...
*/15 * * * * root /usr/bin/backup-live

# Tous les matins, à l'heure des voleurs...
4 4 * * * root /usr/bin/backup-daily

Conclusion

La librairie de backup fait en 150 lignes tout ce que je lui demande, sans broncher, et sans prendre plus de ressources que nécessaires avec une adaptation à un besoin particulier très rapide à mettre en oeuvre.

Commentaires

AP , le 5 August, 2008 - 06:31

Côté sauvegardes, je conseille à tous de regarder du côté de rdiff-backup (qu'on fera passer, comme rsync, au travers de ssh). C'est la puissance de rsync, combinée à un mécanisme qui gère automatiquement l'historique. En gros, côté sauvegarde, on a un miroir correspondant à la dernière sauvegarde et à la racine de ce miroir, un dossier spécial contenant tous les "deltas" permettant de revenir en arrière de x versions. En outre, rdiff-backup ne consigne que les portions de fichiers qui changent, ce qui le rend particulièrement efficace et économe en espace disque.

Quelques exemples d'invocation de la commande rdiff-backup :

Pour interroger le serveur de backup avec rdiff-backup :

rdiff-backup --list-increments utilisateur@monserveur::/home/Backup
rdiff-backup --list-changed-since 5D utilisateur@monserveur::/home/Backup
rdiff-backup --list-at-time 5D utilisateur@monserveur::/home/Backup

Pour restaurer des fichiers

  • La plus récente version du fichier
    rdiff-backup --restore-as-of now utilisateur@monserveur::/home/Backup/utilisateur/fichier /home/utilisateur/fichier
  • La version d'il y a 10 jours
    rdiff-backup --restore-as-of 10D utilisateur@monserveur::/home/Backup/utilisateur/fichier /home/utilisateur/fichier
  • La version du 19/06/2007
    rdiff-backup --restore-as-of 2007-06-17 utilisateur@monserveur::/home/Backup/utilisateur/fichier /home/utilisateur/fichier
  • Faire du ménage

  • Virer les sauvegardes de plus de 2 semaines
    rdiff-backup --remove-older-than 2W utilisateur@monserveur::/home/Backup
  • Virer les sauvegardes de plus de 20 backups
    rdiff-backup --remove-older-than 20B utilisateur@monserveur::/home/Backup
  • Quelques notes encore avec rdiff-backup
    - le filesystem côté destination peut ne pas gérer les attributs étendus : ils seront stockés dans des fichiers.
    - veillez à utiliser la même version de rdiff-backup sur toutes les machines car autant rsync sait "négocier" avec des versions différentes autant rdiff-backup est intransigeant.
    - la version 1.2 sortie récemment a été particulièrement étudiée pour gérer les particularités des filesystems Microsoft et OS/X.

    Armetiz , le 5 August, 2008 - 08:31

    Bonjour,
    Juste "bravo", comme - presque - chaque article très intéressant.

    Bonne journée Wink

    Ulhume, le 5 August, 2008 - 08:46

    @AP très intéressant cet outil, merci ! Ca va rendre purement et simplement obsolète ma rotation/hardlinks de fichiers ton histoire et grandement raccourcir le script. En plus si seuls les deltas sont sauvegardés, cela va prendre moins d'espace et je dois j'imagine pouvoir utiliser cela sur des bases de données du coup... hum... Je pense que je vais mettre bientôt l'article à jour moi Wink

    Ulhume, le 5 August, 2008 - 08:46

    @Armetiz merci Smiling Pour info, c'est quoi le "presque", j'imagine que tu ne l'as pas collé là pour rien Wink

    Alexandre Domont , le 5 August, 2008 - 09:37

    Excellente conception, toutefois, je vous recommande également BackupPC (http://backuppc.sourceforge.net/)

    BackupPC est utilisé pour sauvegarder un ensemble de postes clients et de serveurs. Il possède une interface Web pour lancer des sauvegardes ou restaurer des fichiers. Il est également possible de sauvegarder des bases de données.

    BackupPC permet de sauvegarder automatiquement à des intervalles de temps réguliers des répertoires situés sur des machines du réseau.

    Il peut également faire beaucoup plus…

    Il peut utiliser plusieurs protocoles pour les sauvegardes :

    * Samba : Utilise le logiciel SmbClient pour le transfert des données. C'est un bon choix pour sauvegarder des machines sous Windows.
    * rSync : Utilise le logiciel RSync pour le transfert des données (via SSH). C'est un bon choix pour sauvegarder des machines sous Linux et sous windows.
    * rSyncd : Utilise le daemon « rsyncd » installé sur chaque client. C'est un bon choix pour sauvegarder des machines sous Linux et sous Windows.
    * Tar : Utilise le logiciel Tar. C'est un bon choix pour sauvegarder des machines sous Linux.

    http://backuppc.sourceforge.net/faq/BackupPC.html#overview

    Ulhume, le 5 August, 2008 - 10:12

    @Alexandre heureusement que j'ai écrit ceci en intro :


    Je prend un peu d'avance sur les commentaires : ce n'est pas la peine de me dire qu'il existe des outils faisant tout cela très bien car le but ici est justement de faire le sien aux petits oignons, adapté au plus prés de nos besoins..

    Ne le prend pas mal, c'est très gentil de ta part d'indiquer des pistes mais me concernant j'ai déjà étudié la solution BackupPC et pas mal d'autres et dans mon cas, avec 5 machines sur un LAN, j'ai plus vite fait de mettre en place un petit script comme celui là, que d'apprendre à utiliser un nouvel outil, à gérer ses évolutions, à suivre ses changements, à mettre à jour mes configurations lorsque les développeurs de la dire solution seront pris du syndrome KDE4, etc.

    J'avoue que j'ai aussi été clairement échaudé par le temps passé avec Nagios (autre domaine) pour configurer correctement la supervision de ces 5 pauvres machines. Temps perdu lorsque la version 3 est sortie et que plus rien n'a fonctionné. Je pourrais sûrement passer à nouveau une journée à tout reconfigurer dans la nouvelle version mais je préfère passer cette journée à écrire 100 lignes de bash qui répondent à bon besoin à 100% et que je maîtrise "from balls to bone".

    En somme BackupPC, Amanda et les autres sont d'excellents outils pour une entreprise et je n'y tolérerais sûrement pas qu'un dev utilise autre chose, et encore moins un script en bash. Mais pour ce qui est d'une application domestique, l'expérience me dicte juste l'inverse Wink

    Ulhume, le 5 August, 2008 - 10:39

    @AP je viens de tester rdiff-backup directement en l'implantant dans ma fonction "synchronize". Déjà ça fonctionne avec un regret cependant, ils auraient pu, vu la proximité des deux outils, ne pas s'amuser à re-syntaxer tous les arguments.

    Sinon côté fonctionnalités c'est très sympa, ça marche bien pas de problème. Le soucis vient en revanche de la robustesse. En effet, si je casse la connexion en cours de syncro, chose qui arrivera forcement un jour où l'autre, le dossier de delta devient simplement illisible... Au relancement de la synchro on obtient ceci :

    Fatal Error: Bad rdiff-backup-data dir on destination side

    The rdiff-backup data directory
    /storage/newBackup/current/horus/etc/rdiff-backup-data
    exists, but we cannot find a valid current_mirror marker.  You can
    avoid this message by removing the rdiff-backup-data directory;
    however any data in it will be lost.

    C'est pas génial ça, je perd du coup tout l'historique de sauvegarde. Autre chose qui m'a posé problème, leur protocole est super sensible aux versions. Si ce ne sont pas exactement les mêmes sur les deux machines, ça capote. Ceci dit, ce n'est pas très grave en soit mais ça l'est un peu si on oublie de mettre à jour une machine qui du coup sort du pool de sauvegarde.

    Je vais encore regarder pour voir s'il y a moyen de réparer la casse sur une connexion perdu car ce genre de problème est létal pour moi dans la mesure où je sauvegarde aussi des machines mobiles via WIFI, et le WIFI étant ce qu'il est, faut que ce soit robuste.

    Alexandre Domont , le 5 August, 2008 - 11:09

    @Ulhume, tu as probablement raison, mais le fait d'anticiper les commentaires, ne doit pas nous empêcher d'en faire Wink ... merci tout de même d'avoir répondu. Bonne continuation.

    AP , le 5 August, 2008 - 12:30

    @Ulhume: Effectivement, il faut avoir pile poil les mêmes versions de rdiff-backup partout... et il a en effet un peu de mal quand il se prend les pieds dans le tapis. Il faut que la session (vue comme une grosse "transaction" au sens base de données) se passe bien de bout en bout. Si ça cafouille, à l'essai suivant, il annule ce qui est partiellement passé avant de démarrer. Ce point est évoqué dans la FAQ présente sur le site officiel... Pour ma part, il me sert chaque nuit pour mon backup perso vers un PC tiers au travers d'internet (Dyndns power). De même, citons au nombre de ses faiblesses le fait qu'il ne sait pas finement réguler sa consommation de bande passante (le "--bwlimit" de rsync).

    Malgré tout, je reste fan de l'outil... Smiling

    Sooske , le 5 August, 2008 - 14:56

    Article super intéressant merci beaucoup Smiling
    De mon coté je cherche à faire des backups régulière de mon système directement sur un serveur nas relié à mon réseau et j'ai encore jamais trouvé Frown

    Ulhume, le 5 August, 2008 - 14:59

    @Sooske c'est quoi comme serveur NAS ?

    Sooske , le 5 August, 2008 - 15:01

    C'est un synology Ds 207

    Ulhume, le 5 August, 2008 - 15:02

    @AP Ok, j'ai le problème. En fait l'erreur que je t'ai donnée apparaît lorsque le connexion a planté lors de la première session. Du coup le dossier ne contient pas de pointeur current (logique vu qu'il n'y avait rien eu avant) et le résultat est que rien n'est récupérable.
    En revanche, si la connexion plante sur les synchro suivantes, on ne perd que la dernière session qui a de toute façon foiré.
    Tout cela se teste très bien en killant ssh sur la machine distante.
    Bon, en tout cas ça me convient mieux comme cela, et l'idée me plaît beaucoup. Avec l'ancienne méthode je ne pouvais pas me permettre d'historiser les bases de données, avec ton outil, ça semble très réalisable. En revanche je n'ai pas trouvé d'option qui permette de limiter le nombre d'historique. J'imagine que la solution est de systématiquement finir une session par un pure de tout ce qui est plus vieux que N jours ?

    Ulhume, le 5 August, 2008 - 15:08

    @Sooske Tout dépends de ce que tu veux dire par "directement sur un serveur NAS". Si tu veux que ce soit le NAS qui lance la procédure de backup, il faut que tu regardes de ce côté http://www.synology.com/enu/products/features/networkbackup.php
    Vu que c'est un zinzin bien windowsien, j'imagine qu'il doit être capable d'aller parler à un partage en CIFS. Donc si tu installes SAMBA sur ton PC et que tu crées des partages sur ce que tu veux sauvegarder, ton NAS devrait pouvoir faire le boulot.

    Sooske , le 5 August, 2008 - 15:13

    @ Ulhume j'aurai du préciser (honte à moi) je suis sur une mandriva et ne possède aucun Windows chez moi, pour le moment je fais mes backups via rsync vers un pc distant présent sur mon réseau, j'aurai voulu que ma backup parte directement sur le serveur nas et chaque fois j'échoue à l'authentification sur ssh.

    Ce serait bien un article sur les Nas un de ces quatres Wink

    Ulhume, le 5 August, 2008 - 15:23

    @Sooske je ne risque pas de faire un tel article car je n'en possède pas, en revanche mon site t'es ouvert Wink

    Le fait que tu possèdes une mandriva (enfin quelqu'un qui n'a pas ubuntifié assimilé), ne t'empêche pas d'installer un serveur sampa (urpmi samba-server) et ainsi de publier sur ton réseau des partages compatibles Windows (CIFS). Du coup ton NAS ira directement prendre les données sur ton disque.

    Sooske , le 5 August, 2008 - 15:26

    Tout sauf Ubuntu Smiling

    Effectivement je n'avais pas songé à samba de cette manière, je vais m'y pencher voir ce qui est faisable ou non.

    Merci beaucoup !

    Armetiz , le 5 August, 2008 - 16:05

    @Ulhume,
    Le presque parfait est là, surtout car le parfait absolus n'existe pas Wink
    Ene ffet, même les articles où tu parles de tes déboires à fabriquer une tour pour y mettre des pc m'ont intéressés Glad

    Ulhume, le 5 August, 2008 - 23:30

    @Armetiz Ouf, j'ai cru que j'avais encore écrit des boulettes Smiling

    Ulhume, le 6 August, 2008 - 23:03

    @AP ban, ben ça y'est, je suis converti Smiling

    daniel , le 9 August, 2008 - 17:30

    Juste pour signaler que dans la série "backup incrémental avec historique", il y a http://www.rsnapshot.org/, basé aussi sur rsync et cp -al (les liens durs, c'est bien pour faire plein de snapshots sans prendre trop de place), le paquet existe dans la plupart des distribs (sinon, pas dur à installer, juste un script perl qui parse un fichier de conf).

    Il est fourni avec un fichier de conf qui permet de gérer ses backups en spécifiant juste
    - les répertoires à sauvegarder (locaux ou distants)
    - où les sauvegarder
    - le nb de snapshots quotidiens/hebdos/mensuels à garder

    On peut aussi préciser un script à exécuter avant/après, et des listes d'exclusions/inclusions.

    Par rapport à rdiff, il ne garde pas tout, seulement ce qu'on lui demande (ex j-1, j-2, ... , j-6, semaine-1, ... , mois-1, etc.) et fait des snapshots séparés par date.

    Seul bémol, on ne peut pas préciser directement des répertoires différents suivant la fréquence (ce serait pratique de garder 3 mois d'archives pour certains dossiers mais seulement 3j pour d'autres). Pour y parvenir il faut soit effacer certaines parties de vieux snapshots dans un postsnap.sh, soit créer plusieurs fichiers de conf et lancer chaque snapshot avec sa conf et sa fréquence séparément.

    Bref, un autre outil du même genre, simple mais adaptable.

    Ulhume, le 11 August, 2008 - 00:35

    @daniel merci pour l'aternative. Pour l'instant je teste rdiff-backup histoire de voir si à terme la solution est fonctionnelle. Des snaps répétés ne prennent pas trop de place ceci dit dans la mesure où les deltas sont vides. Ceci dit je le trouve un chouilla lent et pompant un peu plus de ressources sur la machine cible qu'un rsync.

    Dab, le 12 August, 2008 - 19:12

    Oh oui vraiment sympa rdiff-backup.
    Il existe de nombreux script qui l'emploie : http://wiki.rdiff-backup.org/wiki/index.php/ContribScripts
    Dont un qui m'intéresse plus particulièrement slbackup (pas si puissant que le tient, gère pas les win$)
    Sinon as tu mis a disposition les sources de ton script ? Juste une petite observation, ne devrais tu pas tester la présence de rdiff, créer les répertoires ... avant l'éxécution ? Et un autre détail, je ne comprends pas très bien l'option '--tempdir', en effet pendant la synchro pas un octect n'y est écrit ? J'ai vérifié ce point car l'utilisation de /tmp est déconseillé car réservé au système ( si /tmp est sur une partition séparée il y a le risque que celle-ci explose et donc que le système devient instable.)

    Ulhume, le 12 August, 2008 - 19:47

    @Dab Pour les sources, je collerais cela dans subversion sous peu. Pour les tests, ben disons que c'est plus la démarche du "je me consruit mon backup" plus que celle du "je fais un script pour les gens", donc c'est vrai que la démarche "idiots proof" me semble mais obligatoire Smiling

    Pour le coup de tempdir, cela me vient de rsync. Alors je sais pas si rdiff fait la même chose, mais au cas où... En fait, avec rsync, lorsqu'un gros volume de données était transféré, il prenait de l'espace sur /tmp. Le souçis est que le dossier en question était limité par une partition et mon rsync plantait systématiquement, genre sur une vidéo. Du coup j'ai pris l'habitude de mettre cette option qui chez moi pointe vers une partition de large taille. Maintenant, est-ce que cela sert avec rdiff, no lo se.... Mais s'il a mis l'option ça doit pas être non plus pour des prunes Wink

    Ulhume, le 12 August, 2008 - 21:03

    J'ai rajouté un chapitre pour les sources

    Dab, le 12 August, 2008 - 22:26

    grazie Smiling
    Un petit truc bien pratique avec le cron (du moins sous Debian) est que lorsqu'un script exécuté écrit sur sa sortie standard, un mail d'information contenant cette sortie est transmis à root. Utile par exemple pour prévenir lors d'un echec de synchronisation.

    Ulhume, le 12 August, 2008 - 22:44

    @Dab je crois que c'est un comportement standard du GNU/CRON. J'ai la même chose avec la Driva en tout cas mais j'ai pas trouvé un moyen très malin de l'utiliser dans le script.

    Dab, le 12 August, 2008 - 22:55

    Tu pourrai peut être simplement écrire sur la sortie standard qu'en cas de pb lors de l'exécution du script?

    Daniel , le 13 August, 2008 - 00:27

    En cas de pb, on écrit plutôt sur la sortie d'erreurs Wink

    echo "y'a eu tel pb" >2

    Car souvent on lance les script cron avec du

    le_script_a_lancer >/dev/null

    ce qui permet de ne recevoir par mail que les erreurs (la sortie standard de l'éxécution "normale" étant évacuée vers /dev/null pour ne pas polluer la boîte mail).

    Ulhume, le 13 August, 2008 - 00:29

    @Daniel la remarque est juste en effet Smiling

    Dab, le 13 August, 2008 - 10:25

    Tout à fait Daniel, c'est nettement plus propre. Je n'avais pas remarqué que le cron récuperait aussi la sortie d'erreur

    Dab, le 17 August, 2008 - 16:51

    Pour la route : Backupnija ( http://riseuplabs.org/backupninja/ ) : Sauvegarde incrémentale via rdiff-backup, sauvegarde des bases Mysql, postgres, de dépot subversion, openldap, gravure sur CD ... bien foutu

    maze , le 22 August, 2008 - 12:59

    Encore une petite piste sur la sauvegarde si je peux me permettre :

    http://www.bacula.org/en/

    Un outil extrêmement puissant et à mon gout plus simple de misse en œuvre qu'Amanda

    Ulhume, le 24 August, 2008 - 08:04

    @maze je le note en cas de besoin mais pour l'instant mon chtit script convient à mon modeste usage Smiling

    Ulhume, le 24 August, 2008 - 08:05

    @Dab noté aussi Smiling

    GoZ , le 3 October, 2008 - 09:47

    Merci pour cet article !

    @Ulhume Petite erreur dans rdist-backup ?

    rdiff-backup histoire à chaque sauvegarde les deltas récupérés

    . Je pense que le mot juste serait plutôt "historise".

    Bonne continuation

    Ulhume, le 3 October, 2008 - 13:27

    @GoZ C'est corrigé, merci Smiling

    AP , le 6 October, 2008 - 15:06

    s/rdist-backup/rdiff-backup/g
    s/c'est en autres/c'est entre autres/g

    On peut signaler pour info que rdiff-backup a un cousin nommé "duplicity", développé par la même équipe. Le postulat de base de cet outil est : "faire ses sauvegardes sur un serveur à qui on ne fait pas vraiment confiance en terme de confidentialité". Contrairement à rdiff-backup, la sauvegarde n'est pas un miroir de la version n avec des deltas pour "remonter le temps" mais une copie chiffrée de notre système à sauvegarder à une date donnée, copie tronçonnée en blocs et assortie des deltas qui permettent d'arriver jusqu'à la version actuelle. Sur le papier, cet outil est séduisant. En pratique, si le serveur FTP sur lequel on sauvegarde nos données est capricieux et coupe un transfert en plein milieu, on est bons pour tout recommencer. Avec de petits volumes de données (de l'ordre de quelques centaines de Mo) ça me semble jouable. Avec des volumes plus importants, ça me semble casse-gueule. Quoi qu'il en soit, c'est bon de voir que des développeurs ont pensé aux paranos parmi nous... Smiling

    Ulhume, le 6 October, 2008 - 15:19

    @AP c'est modifié merci Smiling

    Spip , le 10 November, 2008 - 18:34

    Bonsoir,

    merci pour cette belle page, comme beaucoup d'autre d'ailleurs. Je vais avoir besoin de me pencher sur le problème, ce sera un excellent point de départ. (dans 2 ans, si tout va bien, je serai en thèse, et je ne veux rien perdre Wink )

    autre chose : une phrase mal rattrapée :

    "Ensuite la sauvegarde ne va pas se faire en local, mais sur J'utilise ici la technique du un disque USB externe pour séparer au mieux les deux systèmes. "

    Ulhume, le 10 November, 2008 - 19:17

    @spip merci pour la phrase, un peu plus que "mal rattrapée", complètement stupide m'aurais paru plus juste Wink

    Poster un nouveau commentaire

    Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
    • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
    • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
    • Les lignes et les paragraphes vont à la ligne automatiquement.
    • Textual smileys will be replaced with graphical ones.
    • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

    Plus d'informations sur les options de formatage

    Connexion utilisateur
    Les derniers bavardages...