Faire ses sauvegardes avec Bash, ssh et rdiff-backup
Le 10 novembre, 2008 - 18:03 | Ulhume

La plupart du temps il est intéressant de chercher l'outil qui permet de répondre à un besoin plutôt que d'en bidouiller un dans son coin. Mais il y a des cas où les outils sont juste sur-dimensionnés par rapport à l'usage, surtout lorsque l'usage concerne son réseau domestique. Et s'il ne sont pas sur-dimensionnés, on se retrouve en permanence à cherche comment faire ceci ou cela...

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 tutoriel est donc nous 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, ssh et Bash.

Sauvegarder pour quoi faire ?

Le meilleur moment dans la vie où l'on peut se poser cette question, est celui où notre disque vient de se faire uriner dessus par le chat du voisin et qu'il se met à crépiter comme un joyeux feu de la Beltane. Ca vous apprendra à laisser votre PC les tripes à l'air... le super magnifique SATA II Tera, gavé à bloc des photos et vidéos du petit dernier, 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.... Là, on se fait généralement la remarque qu'une sauvegarde automatisée aurait été bien utile...

Car c'est connu, 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. Alors si vous avez deux trois connaissances en Bash, voilà comment faire.

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. On peut cependant 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 par 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. En revanche il nous faut quelque chose de plus sophistiqué pour les données qui changent régulièrement. Dans ce cas, l'idéal est une sauvegarde gross-modo permanente avec possibilité de remonter dans le temps. En gros, juste avant que votre progéniture n'ait effacé du disque dur le dossier BétaDur que vous étiez sur le point de livrer au client, ou juste avant la mise à jour dans laqelle 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... C'est à ce genre de mésaventure que répond l'historisation que nous allons découvrir plus loin.

L'approche Bash

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. 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.

L'approche est donc de se fabriquer une librairies très simple (toujours, au début...) de fonctions écrite BASH 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. Cet outil permet de synchroniser via SSH deux dossiers (local et distant) en ne faisant circuler sur le réseau que ce qui est différent. Un petit coup de man rsync pour avoir plus d'idée sur le sujet.
  • L'historisation est rendue possible grâce aux hardlinks. Là aussi, si cela ne vous parle pas, allez faire un tour sur cet article, au chapitre \"Une application du hard-link, l'historisation du pauvre\" pour de plus amples détails sur cette méthode.

Maintenant, histoire de savoir où l'on avance, je vais commencer par la fin, avec ce à quoi ressemblerait un script de sauvegarde :

#! /bin/sh

# inclusion de la librairie de backup
BASE_PATH=$(dirname $(readlink -nf $0))
. $BASE_PATH/backup_library.sh

# démarrage d'une session de sauvegarde
use_storage /backup/current

# rotation du dossier de stockage
rotate_storage

# on rentre dans un bloc "machine" qui va vérifier si elle est "vivante" et
si oui, commencer la sauvegarde
process_host 'machine_distante' && {
  # sauvegarde de la configuration /etc en utilisant les exclusions "etc"
  synchronize /etc  etc

  # arrête du serveur IMAP et sauvegarde de tous le courriers, puis
  # redémarrage du serveur
  services stop cyrus-imapd
  synchronize /mails
  services start
}

# libère l'espace de backup
release_storage

Le premier bloc de ligne inclus juste le fichier .sh contenant notre future librairie de sauvegarde. Ensuite nous utilisons une fonction de cette librairie use_storage pour déclarer un espace de sauvegarde qui va recevoir des données. Ensuite nous utilisons la fonction rotate_storage qui va opérer une rotation des dossiers qui se trouve dans cet espace de stockage. C'est la base de notre historisation.

Maintenant que l'espace de stockage est préparé, nous utilisons la commande process_host qui va aller faire un ping sur la machine distante et exécuter le bloc si elle est vivante. Après c'est la fonction synchronize qui va recopier le dossier /etc de la machine distante dans notre espace de stockage. La même chose est faite pour le dossier mails avec comme action préalable d'arrêter le service qui l'utililise et de le relancer lorsque c'est terminé.

Pas si compliqué non ? Maintenant voyons ce que nous avons dans la boîte à outils.

Ecriture de la boîte à outils

Préparation du stockage

Là rien d'extraordinaire, juste la création du dossier cible avec l'utilisation d'un fichier 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 le lock. :

# Affiche une trace
function trace {
  if [ $TERM == "dumb" ] ; then
    logger $*
  else
    echo $*
  fi
}

# verrouillage de la session. Si une précédente session est en train de tourner, on quitte.
function use_storage {
  export storage_path=$1
  mkdir -p $storage_path
  while [ -f $storage_path/lock ] ; do
    trace "'$storage_path' is locked !! waiting..."
    sleep 5
  done
  > $storage_path/lock
}


# déverrouillage de la session
function release_storage {
  trace "releasing storage $storage_path"
  rm -rf $storage_path/lock
}  
backup_librarie.sh

On introduit au passage la fonction trace qui comme son nom l'indique est là pour faire causer notre script. La petite magouille avec $TERM est juste là pour différencier si le script est lancé par CRON ou à la main. Dans le premier cas, on préfère alors causer dans syslog.

Historisation

Le principe de base de cette fonction est repris de cet article. Je ne reviens donc pas dessus. Cependant la manière d'utiliser ic 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. Le nombre de dossier que l'on souhaite conserver est indiqué par la variable BACKUP_ROTATION_MAX_FOLDERS.

Si vous lancez le script de sauvegarde toutes les 15 minutes et que vous avez spécifié 100 comme valeur, vous disposez donc de la possibilité de remonter en arrière dans le temps de 50 heures par tranches de 15 minutes. A vous de régler cette valeur et la periode de rotation à votre convenance (par exemple 200 dossiers, toutes les heures). Personnellement j'ai opté pour une rotation par heure et une semaine d'historisation, soit donc 24*7=168 dossiers.

export BACKUP_ROTATION_MAX_FOLDERS=168

# opère une rotation des dossiers historisés
function rotate_storage {
  trace "Backup Storage Rotation for $storage_path"

  # transfert de l'ancien "current" dans "history"
  currentDate=$(stat $storage_path -c "%Z")
  currentDate=$(date -d "1970-01-01 ${currentDate}sec GMT" +"%y-%m-%d_%H-%M-%S")
  history_path=$storage_path/../history
  mkdir -p $history_path
  cp -al "$storage_path/." $history_path/$currentDate
  cd $history_path

  # réduction du nombre de dossier au nombre maximum définit par défaut
  local iFolder=0
  local folder
  {
    local folder
    find . -maxdepth 1 -type d| grep "./" | while read folder; do
      stat $folder -c "%Z %n"
    done | sort -rn -k1 -t' ' | awk '{print $2}'
  } |    
  while read folder ; do
    if [ $iFolder -gt $BACKUP_ROTATION_MAX_FOLDERS ] ; then
      trace "Deleting too old history folder : $folder"
      rm -rf "$folder"
    fi
    let iFolder=$iFolder+1
  done
  cd  ..


  # finalisation
  touch $history_path
}
backup_library.sh

Notez bien que le gros avantage de la méthode hardlink est que les fichiers identiques prennent la même place sur le disque que vous ayez une profondeur temporelle de 1 ou de 10000. Après cela, en cas de problème, il vous suffit d'aller dans le dossier history pour chercher une date avant l'incident et ainsi récupérer vos données.

Notre espace réel de stockage après rotation est donc le dossier current.

Lancement du backup sur les machines vivantes

Notre script doit pouvoir gérer non seulement les sauvegardes locales mais aussi, et surtout, les machines distantes de notre réseau domestique. Pour cela faut il encore détecter que la machine en question est en route, ou pas. C'est l'objectif de la fonction process_host qui renvoie un code d'erreur si la machine ne répond pas au PING. Dans le cas contraire, elle va créer dans notre stockage un sous-espace portant le nom de la machine distante.

  # vérifie que la machine cible est allumée et initialize la sauvegarde
function process_host {
  export host_name=$1;

  # on vérifie que le host est bien UP
  ping -c 1 $1 > /dev/null 2>&1
  if [ $? -ne 0 ] ; then
    # le host est down, rien à faire de plus
    trace "'${host_name}' is DOWN, leaving..."
    return 1
  fi

  # on sauve le chemin vers le stockage global et on l'affine pour notre host
  export host_storage_path=$storage_path/${host_name}
  mkdir -p $host_storage_path
  trace "Processing '${host_name}' => $host_storage_path"
  return 0
}
backup_library.sh

Synchronisation

Nous somme maintenant au coeur de notre sauvegarde et allons introduire dans la librairie, la synchronisation d'un dossier distant avec notre espace de stockage :

export SETTINGS=/etc/backup
export RSYNC_TEMP=/tmp

  # fonction utilitaire générale de synchronisation utilisé pour les dossiers distants et locaux
function _synchronize {
  local profile=""
  if [ $# -gt 2 ] ; then
     local profileFile=$SETTINGS/$3.exclusions
    if [ ! -f "$profileFile" ] ; then
      trace "Unable to load profile '$profileFile'"
      return 1
    else
      profile=--exclude-from=$profileFile
    fi
  fi
  mkdir -p "${host_storage_path}$2"
  trace "Starting synchronization [$host_name] $1 -> ${host_storage_path}$2"
  rsync \
    -azv \
    --temp-dir=$RSYNC_TEMP \
    --delete --delete-excluded \
      $profile \
      "$1/" \
      "${host_storage_path}${2}" |
      # simple formatage de la sortie de rsync
      {
        grep -Pv "(receiving|speedup|received)" | sed -e '/^[ ]*$/d'| \
        while read line ; do
          trace [$host_name] $line
        done
      }
}
backup_library.sh

Notre fonction est en deux morceaux car nous allons la réutiliser pour une autre fonction un peu plus loin. La syntaxe en elle-même est assez simple, il suffit de lui passer en paramétre le dossier distant à synchroniser, éventuellement suivi du nom d'un profil d'exclusion.

Le profil d'exclusion n'est rien d'autre qu'un fichier stocké dans /etc/backup et qui cintient une liste de motifs de nom de fichiers à exclure de la sauvegarde. Un profile homes fait ainsi référence au fichier /etc/backup/homes.exclusions qui peut ressembler à cela :

core.*
.mplayer/DVDKeys/
firefox/*.default/extensions/
firefox/*.default/chrome/
.wine*/
.Trash-*/
.cddb/
.icons/
.xsession-errors
tmp/
workspace/
Desktop/
Cache/
icons/
/etc/backup/homes.exclusions

Pour plus d'informations sur les exclusions, reportez-vous au manuel de la commande rsync et du paramétre --exclude-from. Maintenant pour notre fonction de synchronisation dans le le script, nous procédons comme suit :

synchronize /home homes

Le cas Windows

Il peut être aussi utile de pouvoir backuper une machine Windows qui elle ne dispose pas d'accès SSH. Alors évidement on peut installer SSH sous Windows et utiliser du coup la même mécanique que précédemment. Ou alors, on définit sous Windows un partage sur le disque C (par exemple) avec tous les droits qui vont bien, pas pour tout le monde, et en lecture seulement. Ensuite il suffit de faire un montage CIFS (le protocole de partage sous Windows) et de synchroniser comme plus haut ce dossier une fois "monté". Cela nous donne la fonction suivante :

# synchronisation d'un resource Windows.
function win_synchronize {
  mount_point=/mnt/${host_name}_$1
  mkdir -p $mount_point
  mount -t cifs "//$host_name/$1" $mount_point -o credentials=$SETTINGS/credentials_${host_name}_${1},ro,iocharset=utf8 && {
    synchronize "${mount_point}/$2/" "$2" windows
    umount ${mount_point}
  }
}
backup_library.sh

Pour que cette fonction soit utilisable il faut définit dans le dossier /etc/backup un fichier contenant le login et le mot de passe à utiliser par mount.cifs pour se connecter à la ressource. Le nom de ce fichier est composé du nom de la machine et du nom de la resource, par exemple pour la machine gaston et la ressource C, nous donnent le fichier /etc/backup/credential_gaston_C ayant comme contenu :

username=gaston
password=secret
credential_gaston_C

Ensuite la fonction s'utilise très simplement dans notre script de sauvegarde :

win_synchronize C '/Users/Gadton/Documents'

On peut ici aussi rajouter un paramétre avec un profile d'exclusion.

Les services

Pour sauvegarder des choses comme la base courrier d'un serveur IMAP, ou les données d'une base de donnée mySQL ou PostgreSQL, nous avons deux approches. Soit nous utilisons une méthode dite "à chaud", c'est à dire sans éteindre le service. Soit nous éteignons le service et nous copions ses données tout simplement.

Le problème de la méthode "à chaud" est qu'elle est différente pour chaque application, si elle existe. Pour simplifier nous allons donc utiliser la méthode par arrêt de service qui fonctionne dans tous les cas avec comme inconvénient de ne plus pouvoir accéder aux courriers ou à la base pendant la sauvegarde. Inconvénient très limité si l'on fait la sauvegarde à 3h du matin.

Du coup, la seule chose qui nous manque maintenant est une fonction qui arrête les servicesà distance et qui les relance ensuite :

# Arrêt et démarrage de services distants
function services
{
  local port="22"
  local command=$1
  shift
  if [ $command == "stop" ] ; then
    services="$*"
  fi
  ssh -x $host_name "\
     for service in $services ; do \
       /etc/init.d/\$service $command ; \
     done"
|  {
        sed -e '/^[ ]*$/d'| \
        while read line ; do
          trace [$host_name] $line
        done
     }
}
backup_library.sh

Il s'agit là d'une utilisation très basique de ssh pour lancer une commande distante. Pour l'utiliser c'est assez simple :

# arrête le service cyrus-imapd
services stop cyrus-imapd

# copie des données
synchronize /mails

# redémarrage des dernières services qui ont été arrêtés
services start

Voilà donc le premier jus de notre librairie achevé, reste à écrire les scripts de sauvegarde à propement parler.

Utilisation de la librairie

Sauvegarde "live"

Ce script de sauvegarde cible les données qui bougent souvent et qui nécessite une mise à jour régulière et une historisation.

Pour faire cette sauvegarde diablement efficace nous allons en réalité écrire deux scripts. Le premier va être lancé toutes les heures et va juste effectuer la rotation des dossiers d'historisation. Du coup, on obtient une historisation par heure tout en ayant un contenu à jour au quart d'heure prés. En d'autre termes les données sont écrasées 4 fois avant d'être historisées.

Outre une plus grande sécurité, cette approche nous permet de détecter rapidement les machines qui viennent de se connecter sur le réseau, typiquement les portables en WIFI, et ainsi ne pas attendre 1h avant de leur sauver leurs données.

Commençons donc par le script chargé de la rotation :

#! /bin/sh

BASE_PATH=$(dirname $(readlink -nf $0))
. $BASE_PATH/lib/backup.sh

# démarrage d'une session de sauvegarde
use_storage /backups/current

# rotation du dossier de stockage
rotate_storage

# libère l'espace de backup
release_storage
backup-live-rotate.sh

Rendez ce script exécutable et testez le, cela va au passage créer l'espace de stockage initial.

Ajoutons maintenant celui de la sauvegarde à proprement parler :

#! /bin/sh

BASE_PATH=$(dirname $(readlink -nf $0))
. $BASE_PATH/lib/backup.sh

# démarrage d'une session de sauvegarde
use_storage /backups/current

process_host 'machine_de_travail' && {
  synchronize /etc  etc
  synchronize /home homes
}

process_host 'machine_windows' && {
  win_synchronize C '/Users/Gadton/Documents' windows
}

# libère l'espace de backup
release_storage
backup-live.sh

Une fois le script créé, je vous conseille de le lancer une première fois à la main histoire de le tester mais aussi de faire la première recopie qui sera toujours la plus longue.

Ceci fait, il nous suffit de créer un fichier /etc/cron.d/backup.cron qui indiquera au service CRON quant lancer nos deux scripts. Je pars ici du principe que ces scripts, comme backup.cron, ont été rendus exécutables par un chmod +x .. et qu'il sont tout deux, avec la librairie, dans le dossier /usr/bin :

#!/bin/bash
# /etc/cron.d/backup: crontab fragment for backup

# Live backup every 15 minutes
01   * * * *  root /usr/bin/backup-live.sh

# Rotation of live context every hours
*/15 * * * * root /usr/bin/backup-live-rotate.sh
/etc/cron.d/backup.cron

Voilà, un petit coup de /etc/init.d/cron restart (je suis même pas sur que ce soit nécessaire) et le tour est joué. Scrutez un peu les logs pour voir les scripts se lancer.

Sauvegarde "journalière"

Dans la sauvegarde journalière, nous pouvons caser des opérations un peu lourdes. A deux heures du matin il est rare que cela pose problèmes aux honnêtes gens. Les données que nous allons inclure dans ces sauvegardes sont donc les bases de données et les fichiers volumineux (vidéo, photos, etc..).

Après le tout est d'être malin et de maximiser la sécurité et l'espace de stockage. En effet la sagesse et les bonnes pratiques nous dictent que d'une manière ou d'une autre les données doivent être sur un média séparé. Cela implique donc qu'une fois que nous avons tout bien sauvegardé, il nous reste encore à mirrorer toutes nos sauvegardes (historisées et journalières) sur un média externe qui peut être un site distant (le top), un DVD-RAM (contraignant) ou, ma solution préférée, sur un disque externe reliée en USB.

Donc pour être malin, autant ne pas gaspiller d'espace et directement faire notre sauvegarde "journalière" sur ce support externe. Cela inclus donc les historisations, les bases de données et les fichiers lourds. Et pour être le plus serieux possible, il faut monter ce support externe, écrire dessus, puis le démonter après usage de sorte à le rendre totalement inaccessible le reste du temps.

#! /bin/sh

BASE_PATH=$(dirname $(readlink -nf $0))
. $BASE_PATH/lib/backup.sh

# montage du disque de sauvegarde en lecture-écriture
mkdir -p /mnt/backup
options="rw"
if mount|grep /mnt/backup > /dev/null ; then
  options="remount,$options"
fi
mount /dev/disk/by-label/backup /mnt/backup -o $options

# démarrage d'une session de sauvegarde
use_storage /mnt/backup/mirroring

# backup du serveur
process_host 'serveur' && {
  # copie des bases de données
  services stop cyrus-imapd postgresql ldap
  synchronize /storage/databases/
  services start

  # copie des données lourdes
  synchronize /mes_videos
  synchronize /mes_photos

  # copie de nos historisations
  syncronize /backups
}

# libère l'espace de backup
release_storage

# on remonte le disque en lecture seule
mount /dev/disk/by-label/backup /mnt/backup -o remount,ro
backup-daily.sh

Pour le montage du disque en utilisant /dev/disk/by-id, je conseille d'aller regarder cette , c'est vraiement très pratique.

Comme pour les scripts précédent, il est sage de lancer d'abord ce script à la main pour en vérifier le fonctionement, surtout qu'il risque d'être assez long au démarrage.

Ensuite nous pouvons rajouter dans notre /etc/cron.d/backup.sh la ligne qui le lance toutes les nuits à 2h du matin :

02   4 * * *  root /usr/bin/backup-daily.sh

Et voilà pour notre sauvegarde journalière.

Conclusion

En tout et pour tout, notre librairie fait 150 ligne de code Bash et répond à des besoins simples mais préçis de sauvegarde. Les scripts font ce qu'on leur demande sans broncher, et sans prendre plus de resources que nécessaires.

Après le concept de "mini agents" via SSH peut être étendu à d'autres secteurs tout aussi simplement, par exemple en dévoyant les plugins de nagios pour récupérer des valeurs (état des disques, mémoires, cpu, etc..) sur les machines du réseau et en stockant le tout dans une base type "Round-Robin" pour l'exploiter avec Cacti. Mais ça, c'est une autre histoire...

Vos remarques et commentaires...

alexdaums, le 4 février, 2009 - 17:41

Bonjour,

Dans cette ligne:

add_folder("/Users/gaston", "windows")

A quoi correspond le "windows"?

Merci.

EDIT: C'est apparament un bug pour le positionnement du commentaire. Qui s'appliqiuerait au personne loggées.

Spip, le 18 juillet, 2009 - 16:18

Bonjour

les sources de la lib ne sont plus disponibles [erreur 404]. Serait il possible de reparer le pb svp ?

Merci. :)

Dab, le 3 février, 2009 - 20:46

@alexdaums: Si il te manque des packages du CPAN, j'en ai repackagé environ 700, tu trouveras certainement ton bonheur ici : http://apt.catapulse.org/debian
Ajkouter à ton /etc/apt/sources.list :
deb http://apt.catapulse.org/debian stable main

alexdaums, le 3 février, 2009 - 21:47

Ben je suis sous ubuntu 8.04 server à cause de ma solution zimbra pour ma messagerie.
Est ce que tes paquets ne poseront pas de problèmes?

Dab, le 4 février, 2009 - 00:28

Normalement non, les fichiers sont installés dans /usr/local ... exceptés une petite dizaine

Ulhume, le 4 février, 2009 - 02:56

Comment tu as réussi à me percher ton message là haut toi ??? :)

Dab, le 4 février, 2009 - 14:31

hmmm ... j'en sais rien :( j'étais un peu fiévreux hier, est-ce que ça peux être lié ?

alexdaums, le 4 février, 2009 - 10:30

Oups désolé j'ai oublié je suis en 64bits. Et apparemment c'est pas bon.

Dab, le 4 février, 2009 - 14:31

Ah et ça te retourne quelle erreur ?

alexdaums, le 4 février, 2009 - 14:35

Impossible de récupérer http://apt.catapulse.org/debian/dists/stable/main/binary-amd64/Packages.gz 404 Not Found

Voilà.

Ulhume, le 19 juillet, 2009 - 08:57

C'est corrigé :)

AP, le 5 août, 2008 - 07: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 août, 2008 - 09:31

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

    Bonne journée ;)

    Ulhume, le 5 août, 2008 - 09: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 ;-)

    Ulhume, le 5 août, 2008 - 09:46

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

    Alexandre Domont, le 5 août, 2008 - 10: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 août, 2008 - 11: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 ;-)

    Ulhume, le 5 août, 2008 - 11: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 août, 2008 - 12:09

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

    AP, le 5 août, 2008 - 13: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... :)

    Sooske, le 5 août, 2008 - 15:56

    Article super intéressant merci beaucoup :-)
    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é :-(

    Ulhume, le 5 août, 2008 - 15:59

    @Sooske c'est quoi comme serveur NAS ?

    Sooske, le 5 août, 2008 - 16:01

    C'est un synology Ds 207

    Ulhume, le 5 août, 2008 - 16: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 août, 2008 - 16: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 août, 2008 - 16: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 ;-)

    Ulhume, le 5 août, 2008 - 16: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 ;-)

    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 août, 2008 - 16:26

    Tout sauf Ubuntu :-)

    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 août, 2008 - 17:05

    @Ulhume,
    Le presque parfait est là, surtout car le parfait absolus n'existe pas ;)
    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 ^^

    Ulhume, le 6 août, 2008 - 00:30

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

    Ulhume, le 7 août, 2008 - 00:03

    @AP ban, ben ça y'est, je suis converti :-)

    daniel, le 9 août, 2008 - 18: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 août, 2008 - 01: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 août, 2008 - 20: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 août, 2008 - 20: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 :-)

    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 ;-)

    Ulhume, le 12 août, 2008 - 22:03

    J'ai rajouté un chapitre pour les sources

    Dab, le 12 août, 2008 - 23:26

    grazie :)
    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 août, 2008 - 23: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 août, 2008 - 23: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 août, 2008 - 01:27

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

    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 août, 2008 - 01:29

    @Daniel la remarque est juste en effet :-)

    Dab, le 13 août, 2008 - 11: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 août, 2008 - 17: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 août, 2008 - 13: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 août, 2008 - 09:04

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

    Ulhume, le 24 août, 2008 - 09:05

    @Dab noté aussi :-)

    GoZ, le 3 octobre, 2008 - 10:47

    Merci pour cet article !

    @Ulhume Petite erreur dans rdist-backup ?

    rdiff-backup <strong>histoire</strong> à chaque sauvegarde les deltas récupérés

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

    Bonne continuation

    Ulhume, le 3 octobre, 2008 - 14:27

    @GoZ C'est corrigé, merci :)

    AP, le 6 octobre, 2008 - 16: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... :)

    Ulhume, le 6 octobre, 2008 - 16:19

    @AP c'est modifié merci :)

    Spip, le 10 novembre, 2008 - 19: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 ;) )

    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 novembre, 2008 - 20:17

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

    Alexandre, le 2 février, 2009 - 19:35

    Bonjour,

    Tout d'abord bravo pour ce super boulot!

    Ensuite je souhaite tester la solution juste avant celle ci avec rdiff-backup en étant conscient de vos remarques à son sujet. J'ai donc créé un répertoire où j'ai mis vos sources et un script pour tester sur une machine winxp.

    Le script:

    #! /bin/sh

    BASE_PATH=$(dirname $(readlink -nf $0))
    . $BASE_PATH/backup.sh

    # démarrage d'une session de sauvegarde
    use_storage /backup/autocad

    # backup du serveur
    check_host 'autocad' && {

    set_host_as_cifs D credentials=/home/backup/credential_autocad
    synchronize '/Documents'
    release_cifs_host

    Mais j'ai des erreur que voici:

    ./test.sh
    /home/backup/backup.sh: 4: function: not found
    /home/backup/backup.sh: 6: trace_head: not found
    mkdir: missing operand
    Try `mkdir --help' for more information.
    /home/backup/backup.sh: 11: trace_warning: not found
    /home/backup/backup.sh: 11: trace_warning: not found
    /home/backup/backup.sh: 11: trace_warning: not found
    /home/backup/backup.sh: 11: trace_warning: not found
    /home/backup/backup.sh: 11: trace_warning: not found

    Je suis débutant alors je ne vois pas trop où est mon erreur. Pouvez vous m'aider?

    Cordialement,

    Ulhume, le 2 février, 2009 - 20:04

    Déjà vous utilisez la version BASH (l'ancienne) et pas la version PERL (nouvelle)

    Ensuite, pour backup.sh, vous avec une dépendances :
    http://svn.arnumeral.fr/subversion/public/tools/libraries/bash/traces.sh

    Une fois que vous l'avez récupéré, ajouter . $BASE_PATH/traces.sh avant l'inclusion de backup.sh dans votre fichier test, cela devrait mieux marcher.

    Maintenant, la version en SH, je ne l'utilise plus depuis belle lurette :)

    alexandre, le 2 février, 2009 - 20:57

    Merci, voici mon nouveau fichier:

    #! /bin/sh

    BASE_PATH=$(dirname $(readlink -nf $0))
    . $BASE_PATH/traces.sh
    . $BASE_PATH/backup.sh

    # démarrage d'une session de sauvegarde
    use_storage /backup/autocad

    # backup du serveur
    check_host 'autocad' && {

    set_host_as_cifs D credentials=/home/backup/credential_autocad
    synchronize '/Documents'
    release_cifs_host

    Mais j'ai toujours une erreur.

    /home/backup/traces.sh: 14: function: not found
    [: 19: ==: unexpected operator
    -e
    /home/backup/traces.sh: 20: Syntax error: "}" unexpected

    Merci.

    Ulhume, le 2 février, 2009 - 22:01

    zarb, à la limite remplacez la fonction _trace comme ceci :

    function _trace {
    echo -e "$*"
    }
    Alexandre, le 3 février, 2009 - 09:37

    Bonjour, et encore merci de la rapidité pour votre aide!

    Mais j'ai toujours cette erreur:

    ./test.sh
    /home/backup/traces.sh: 14: function: not found
    [: 19: ==: unexpected operator
    -e
    /home/backup/traces.sh: 20: Syntax error: "}" unexpected
    Ulhume, le 3 février, 2009 - 11:51

    J'ai l'impression qu'il y a un soucis avec votre bash, et là je vais avoir du mal à debugger par commentaires :)

    Alexandre, le 3 février, 2009 - 11:56

    Une dernière question.
    ma distrib est ubuntu server 8.04 LTS:

    ls -l /bin/ | grep sh
    -rwxr-xr-x 1 root root 813912 2008-05-12 20:36 bash
    -rwxr-xr-x 1 root root 100856 2008-03-12 12:52 dash
    lrwxrwxrwx 1 root root      4 2009-01-12 14:39 rbash -> bash
    lrwxrwxrwx 1 root root      4 2009-01-12 14:27 sh -> dash
    lrwxrwxrwx 1 root root      4 2009-01-12 14:39 sh.distrib -> bash

    Sh pointe t'il vers le bon bash?

    Ulhume, le 3 février, 2009 - 12:45

    hum, sous Mandriva on utilise bash et pas dash, essayer de remplacer #!/bin/sh par #!/bin/bash dans tous les scripts (test.sh backup.sh et traces.sh) pour voir.

    Alexandre, le 3 février, 2009 - 12:57

    Ca marche mieux!

    Mais nouvelle erreur pour mon poste winxp:

    ./test.sh
    *
    * + Starting new backup session : /backup/autocad
    * + ------------------------------------------
    ./test.sh: line 20: syntax error: unexpected end of file

    Voici le script de backup

    #! /bin/bash

    BASE_PATH=$(dirname $(readlink -nf $0))
    . $BASE_PATH/traces.sh
    . $BASE_PATH/backup.sh

    # démarrage d'une session de sauvegarde
    use_storage /backup/autocad

    # backup du serveur
    check_host 'autocad' && {

    set_host_as_cifs Stockage credentials=/home/backup/credential_autocad
    synchronize '/Documents'
    release_cifs_host

    # libère l'espace de backup
    release_storage

    Pour vous aidez un peut le poste à sauvegarder à comme nom netbios autocad, il y a le D:\ qui s'appelle stockage de partagé dessus et je souhaite sauvegarder le répertoire documents qui se trouve à la racine de D:

    Encore merci!

    Ulhume, le 3 février, 2009 - 16:15

    tu n'aurais pas oublié une accolade par hasard ? ;-) regarde bien, juste après "release_cifs_host" :)

    alexdaums, le 3 février, 2009 - 20:12

    Et bien merci celà à l'air de fonctionner maintenant à moi de vérifier.
    Par contre rdiff me parrait assez lent....

    Je testerais aussi la version perl! Mais je suis assez rétissant car il me faudrait installer les dépendances avec CPAN.

    Ulhume, le 3 février, 2009 - 20:17

    J'en doute, les dépendances PERL s'installent (en tout cas c'est comme cela sous mandriva) en passant par les dépôts standard

    alexdaums, le 3 février, 2009 - 20:20

    Peux tu me les donner?
    Je vais voir si c'est dispo dans les depots ubuntu.
    Merci

    alexdaums, le 5 février, 2009 - 12:22

    Rdiff-backup me semble très lent plus d'une 1H pour 512Mo en cifs!!
    Est ce normal??

    EDIT: Problème résolu!

    Publier un nouveau commentaire

    Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
    • 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.
    • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
    • Les lignes et les paragraphes vont à la ligne automatiquement.
    • Les adresses de pages web et de courriels sont transformées en liens automatiquement.

    Plus d'informations sur les options de formatage

    CAPTCHA
    Cette question est là pour déterminer si vous êtes humain ou pas...