<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://planet.ubuntu-fr.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Planet Ubuntu Francophone - Sauvegarde</title>
  <link>http://planet.ubuntu-fr.org/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 14 Oct 2008 18:27:21 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Sauvegarde cryptée sous Ubuntu</title>
    <link>http://feeds.feedburner.com/~r/Cedynamix-Ubuntu/~3/308066620/</link>
    <guid isPermaLink="false">urn:md5:8f028fac7479fa1a1a016174e24f1941</guid>
    <pubDate>Mon, 09 Jun 2008 14:38:52 +0200</pubDate>
    <dc:creator>Cedynamix</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Chiffrage</category><category>Gpg</category><category>Libre</category><category>Sauvegarde</category><category>Script</category><category>Tar</category><category>Ubuntu</category>    
    <description>    &lt;p&gt;Voici la traduction d&amp;#8217;&lt;a href=&quot;http://www.haumako.net/blog/backup-crittografati-su-linux&quot; target=&quot;_blank&quot;&gt;un très bon tuto en italien du Blog Haumako&lt;/a&gt; que j&amp;#8217;ai suivi pour faire ma procédure de sauvegarde.&lt;/p&gt;
&lt;p&gt;Ce constat n&amp;#8217;est pas nouveaux, mais une sauvegarde périodique de notre travail est essentielle pour prévenir une possible perte de données liée à une défaillance de de disque dur, un vol ou encore un effacement accidentel. De plus et dans la plupart des cas, les données que nous voulons sauvegarder contiennent des informations privées, des projets en cours de réalisation ou bien encore des documents confidentiels venant de notre société. Voilà donc pourquoi crypter ses sauvegardes, est quelque chose d&amp;#8217;important. Nous verrons dans cet article comment créer une procédure de sauvegarde simple et automatique sous &lt;strong&gt;Ubuntu&lt;/strong&gt; (&lt;span&gt;et Linux en général&lt;/span&gt;) avec les outils d&amp;#8217;archivage (&lt;strong&gt;tar) &lt;/strong&gt;et de cryptographie (&lt;strong&gt;gpg)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Avant de procéder à la réalisation de ce script, il me paraît intéressant de présenter dans les grandes lignes le fonctionnement  et la manière dont on va utiliser &lt;strong&gt;tar&lt;/strong&gt; et &lt;strong&gt;gpg&lt;/strong&gt;. Pour ceux qui sont déjà des familiers de ces 2 outils, vous pouvez passer directement à la partie réalisation de la procédure de sauvegarde.&lt;/p&gt;
&lt;h2&gt;Tar&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Tar_(informatique)&quot; target=&quot;_blank&quot;&gt;Tar&lt;/a&gt; est un des premiers outils qu&amp;#8217;un utilisateur de système Linux apprend à connaître. Une de ses caractéristiques tient dans la possibilité d&amp;#8217;archiver de manière séquentielle les fichiers dans une archive unique. Nous utiliserons cet outil pour créer un fichier temporaire contenant tous les fichiers que l&amp;#8217;on souhaite sauvegarder, de façon à rendre le cryptage plus facile avec &lt;span&gt;gpg&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Gpg&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/GNU_Privacy_Guard&quot; target=&quot;_blank&quot;&gt;Gpg&lt;/a&gt; est la version open-source du célèbre &lt;a href=&quot;http://fr.wikipedia.org/wiki/PGP&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;pgp&lt;/strong&gt;&lt;/a&gt;. Il permet une cryptographie asymétrique de données grâce à un couple de clés, une clé publique et une clé privée. Grâce à la clé publique il est possible de crypter des informations, sans mot de passe. Par contre, avec la clé privée et une fois entré le mot de passe, il est possible décrypter ces mêmes données.&lt;/p&gt;
&lt;p&gt;Cette caractéristique est employée par beaucoup de personnes pour sécuriser l&amp;#8217;échange d&amp;#8217;informations privées (courriel, messagerie instantanée, etc.). Pour que nos correspondants puissent nous envoyer des données cryptées, il nous suffit de leurs fournir notre clé publique (appelée clé esclave) qui sert uniquement à crypter les données. Une fois reçues les informations cryptées , nous utiliserons notre clé privée, qui, couplée avec le mot de passe, nous permettra d&amp;#8217;en décrypter le contenu.&lt;/p&gt;
&lt;p&gt;Nous utiliserons la clé publique &lt;strong&gt;gpg&lt;/strong&gt; pour crypter nos archives comme cela, nous ne serons pas obligés d&amp;#8217;insérer à chaque sauvegarde le mot de passe ou, pire encore, nous ne serons pas obligés de le mémoriser en clair  dans le script. Pour conclure, vu que rien ne sera demandé à chaque exécution du script, il pourra être exécuté en arrière plan et c&amp;#8217;est ce que je veux !&lt;/p&gt;
&lt;h1&gt;Création d&amp;#8217;une clés gpg&lt;/h1&gt;
&lt;p&gt;Pour ceux qui possède déjà un couple de clés ( je m&amp;#8217;adresse entre autre au Ubunteros possédant un compte &lt;a href=&quot;https://launchpad.net/&quot; target=&quot;_blank&quot;&gt;Launchpad&lt;/a&gt;), je vous conseille quand même d&amp;#8217;en créer une nouvelle de façon à la réserver uniquement pour la procédure de sauvegarde.&lt;/p&gt;
&lt;p&gt;Il existe divers moyens graphique pour la création d&amp;#8217;un couple de clés, mais j&amp;#8217;utiliserai la ligne de commande parce que c&amp;#8217;est la méthode la plus rapide.&lt;/p&gt;
&lt;p&gt;Nous ouvrons un terminal et exécutons la commande suivante :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpg --gen-key&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gpg&lt;/strong&gt; vous demandera les options pour la création de la clé, vous pouvez très bien laisser celles par défaut. Pour le mot de passe, je vous conseille d&amp;#8217;en créer un assez compliqué.&lt;/p&gt;
&lt;h1&gt;Réalisation du script&lt;/h1&gt;
&lt;p&gt;Voyons maintenant le script qui s&amp;#8217;occupera de créer le fichier de sauvegarde crypté dans le répertoire de notre choix. Mettez la commande suivante dans un fichier :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#! /bin/sh&lt;br /&gt;
tar -cf &lt;strong&gt;/emplacement/fichier/&lt;/strong&gt;backup.tar -X &lt;strong&gt;/emplacement/fichier/&lt;/strong&gt;exclude.txt &lt;strong&gt;/emplacement/asauvegarder&lt;/strong&gt;&lt;br /&gt;
gpg &amp;#8211;yes -e -r &amp;#8220;&lt;strong&gt;nom_clé&lt;/strong&gt;&amp;#8221; backup.tar&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Explication&lt;/h2&gt;
&lt;p&gt;La première commande s&amp;#8217;occupe de créer l&amp;#8217;archive &lt;strong&gt;tar&lt;/strong&gt; contenant tous les fichiers que l&amp;#8217;on tient à sauvegarder. Le fichier &lt;strong&gt;exclude.txt &lt;/strong&gt;avec l’option &lt;strong&gt;-X&lt;/strong&gt; permet de ne pas inclure dans l&amp;#8217;archive tous les dossiers et fichiers qu&amp;#8217;il contient (ceux dont vous ne voulez pas) et que vous aurez rempli au préalable. Ils devront être écrit ligne par ligne, avec le chemin relatif au dossier ou fichier que vous voulez exclure de votre sauvegarde.&lt;/p&gt;
&lt;p&gt;Par exemple, supposons que l&amp;#8217;on veuille effectuer une sauvegarde du dossiers &amp;#8220;&lt;strong&gt;documents&lt;/strong&gt;&amp;#8221; avec l&amp;#8217;arborescence suivante :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;documents/&lt;br /&gt;
|-----&amp;gt; images/&lt;br /&gt;
|-----&amp;gt; contrats/&lt;br /&gt;
|-----&amp;gt; projet/&lt;br /&gt;
|----------&amp;gt; .temp&lt;br /&gt;
|----------&amp;gt; ~projet.html&lt;br /&gt;
|----------&amp;gt; projet.html&lt;br /&gt;
|----------&amp;gt; projet-temp/&lt;br /&gt;
|-----&amp;gt; temp/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et que nous voulons exclure tous les fichiers et dossiers temporaires, on devra écrire dans le fichier &lt;strong&gt;exclude.txt&lt;/strong&gt; :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;~*&lt;br /&gt;
.*&lt;br /&gt;
temp&lt;br /&gt;
projet/projet-temp&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La seconde commande crypte l&amp;#8217;archive temporaire &lt;strong&gt;tar&lt;/strong&gt; précédemment créée avec la clé indiquée (votre clé)  après l&amp;#8217;option &lt;strong&gt;-r&lt;/strong&gt;. L&amp;#8217;option &lt;strong&gt;&amp;#8211;yes&lt;/strong&gt; sert à répondre oui par défaut à toutes les questions pendant le processus de cryptage. Elle est nécessaire, car dans le cas ou un ancien fichier crypté existerait déjà, &lt;strong&gt;gpg&lt;/strong&gt; nous demandera si il faut ou non écraser ce fichier. Notre but étant d&amp;#8217;avoir une procédure de sauvegarde totalement transparente, nous réglons donc ce problème pour que &lt;strong&gt;gpg&lt;/strong&gt; puisse toujours écraser un ancien fichier présent, si il existe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gpg&lt;/strong&gt; compresse automatiquement le fichier de sortie avec &lt;span&gt;gzip&lt;/span&gt;, nous n&amp;#8217;avons donc pas à nous préoccuper de compresser le fichier de sauvegarde après l&amp;#8217;opération de cryptage!&lt;/p&gt;
&lt;p&gt;Pour éviter de taper à chaque sauvegarde ces commandes, nous les sauvegardons dans un fichier de test, en lui octroyant les permissions d&amp;#8217;exécution.&lt;/p&gt;
&lt;h1&gt;Automatisation du script avec crontab&lt;/h1&gt;
&lt;p&gt;Nous pouvons automatiser cette sauvegarde en incluant une ligne dans&lt;strong&gt; contab&lt;/strong&gt; qui lancera du fichier que nous venons juste de créer&lt;strong&gt;&lt;/strong&gt;. Pour effectuer cette opération accédons à &lt;strong&gt;crontab&lt;/strong&gt; par cette commande :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;et nous tapons :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*/20 * * * * /emplacement/fichier/backup-script.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*/20&lt;/strong&gt; indique à &lt;strong&gt;crontab&lt;/strong&gt; d&amp;#8217;exécuter le script toutes les 20 minutes. Vous pouvez changer cette option comme bon vous semble si cela ne vous convient pas (consultez le manuel de &lt;strong&gt;crontab&lt;/strong&gt; pour savoir comment modifier les données de démarrage du script).&lt;/p&gt;
&lt;h1&gt;Script de sauvegarde avancé&lt;/h1&gt;
&lt;p&gt;La méthode décrite jusqu&amp;#8217;à présent est basée sur un script simple mais très efficace. Nous allons voir maintenant comme le faire évoluer pour exécuter la sauvegarde sur un média externe (Clé Usb, SDCard ou encore disque dur externe).&lt;/p&gt;
&lt;p&gt;Pour rendre cette procédure intelligente, nous voulons que le script soit exécuté seulement quand le média externe est connecté et monté. Pour faire cela, on va tester à l&amp;#8217;intérieur du script la présence de ce média externe. Dans le script qui suit, vous verrez cependant qu&amp;#8217;il vient tester l’existence d&amp;#8217;un répertoire sur le média externe pour éviter que le sauvegarde se fasse sur un autre périphérique monté avec le même nom.&lt;/p&gt;
&lt;p&gt;Le script final sera le suivant :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#! /bin/sh&lt;br /&gt;
BACKUP_SCRIPT_PATH=/emplacement/fichier/script&lt;br /&gt;
BACKUP_DIR=/emplacement/dossier/backup&lt;br /&gt;
EXTERNAL_DRIVE=/emplacement/média/externe/&lt;br /&gt;
if [ -d $EXTERNAL_DRIVE/backups ]; then&lt;br /&gt;
tar -cf $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt; -X $BACKUP_SCRIPT_PATH/exclude.txt \&lt;br /&gt;
/emplacement/dossier/backup/1 \&lt;br /&gt;
/emplacement/dossier/backup/2 \&lt;br /&gt;
…&lt;br /&gt;
1&amp;gt; /dev/null 2&amp;gt; $BACKUP_SCRIPT_PATH/errors.log # redirection du fichier de log en cas d&amp;#8217;erreur&lt;br /&gt;
gpg &amp;#8211;yes -e -r &amp;#8220;&lt;strong&gt;nom_clè&lt;/strong&gt;&amp;#8221; $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt;&lt;br /&gt;
rm $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt;&lt;br /&gt;
cp $BACKUP_DIR/&lt;strong&gt;nomarchive.tar.gpg&lt;/strong&gt; $EXTERNAL_DRIVE/backups&lt;br /&gt;
fi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dans ce script on teste la présence du répertoire &lt;strong&gt;backups&lt;/strong&gt; sur la média externe (à créer bien sûr), on créé l&amp;#8217;archive temporaire, on crypte cette même archive temporaire, on supprime l&amp;#8217;archive temporaire et pour terminer on copie l&amp;#8217;archive cryptée dans le répertoire &lt;strong&gt;backups&lt;/strong&gt; sur le média externe.&lt;/p&gt;
&lt;p&gt;Rappelez-vous que l&amp;#8217;archive temporaire sert uniquement à faciliter le cryptage, qui s&amp;#8217;effectuera de cette manière, sur un seul et unique fichier. &lt;strong&gt;Gpg&lt;/strong&gt; créera un fichier de type &lt;strong&gt;nomarchive.tar.gpg&lt;/strong&gt; qui sera copié dans le répertoire &lt;strong&gt;backup&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On pourrait accélérer la création du tar en faisant une mise-à-jour de l&amp;#8217;archive plutôt que de la créer de nouveau à chaque run (dans ce cas elle ne devra évidemment pas être éliminée après le cryptage). Cette possibilité est réalisable en substituant l&amp;#8217;option &lt;strong&gt;-c&lt;/strong&gt; avec &lt;strong&gt;-u&lt;/strong&gt; dans la commande tar (qui deviendra donc &lt;strong&gt;tar -uf&lt;/strong&gt;).&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Cedynamix-Ubuntu/~4/308066620&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sauvegardes extensives</title>
    <link>http://planet.ubuntu-fr.org/post/2007/12/08/Sauvegardes-extensives</link>
    <guid isPermaLink="false">urn:md5:aa4c02493c50ede3117ecbee9fe71d0e</guid>
    <pubDate>Sat, 08 Dec 2007 16:35:00 +0100</pubDate>
    <dc:creator>Administrateur</dc:creator>
        <category>Planet</category>
        <category>Accueil</category><category>Geek</category><category>Linux</category><category>MaVie</category><category>Planet</category><category>Sauvegarde</category><category>Serveur</category><category>ubuntu</category><category>Web</category>    
    <description>        &lt;p&gt;Effraie.org héberge pas mal de sites, et la question des sauvegardes est devenue cruciale.
&lt;br /&gt; Bien sur, je pourrais renvoyer les utilisateur-ices à leur responsabilités, et leur demander de faire leurs propres sauvegardes. Cela dit, rien ne dit qu'elles/ils les fassent régulièrement, ni qu'ils sachent comment sauvegarder une base de données.
&lt;br /&gt; &lt;br /&gt;
Je me suis donc penché sur la question, et j'ai amélioré mon rsync quotidien pour obtenir un système qui me convient mieux,   &lt;br /&gt; &lt;br /&gt;
&lt;em&gt;Pour assurer que les données seront à l'abri en cas de crash des disques durs internes, mon répertoire backups/ est situé sur un disque usb externe. Prochainement, je cherche également à automatiser une sauvegarde de ce répertoire sur un serveur distant &lt;/em&gt;
&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Sauvegardes des bases de données&lt;/h2&gt;


&lt;p&gt;J'utilise, suivant les conseils avisé d'un copain, le script autoMYSQLBackup.sh qu'on trouve &lt;a href=&quot;http://sourceforge.net/docman/?group_id=101066&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;. Après configuration de quelques variables, le script est opérationnel, et il ne vous reste qu'a le lier dans /etc/cron.daily/ pour obtenir une sauvegarde automatisée de chacune de vos bases. Le script conserve les backups des derniers 7 jours, une par semaine pendant un mois, et une par mois indéfiniment. &lt;br /&gt;
Au final, cela me permet de conserver une trace des données sur le long terme, sans pour autant user une espace disque démesuré, dans backups/sql.&lt;/p&gt;


&lt;h2&gt;Sauvegardes des données:&lt;/h2&gt;


&lt;p&gt;Pendant longtemps, je me suis contenté d'utiliser rsync pour sauvegarder les données du serveur. Cependant, je souhaitais bénéficier, comme pour les bases de données, de la possibilité de restaurer une sauvegarde plus ancienne.
Pour cela, j'ai utilisé des outils standards, &lt;strong&gt;rsync&lt;/strong&gt;, &lt;strong&gt;cp&lt;/strong&gt;, &lt;strong&gt;rm&lt;/strong&gt;,  &lt;strong&gt;date&lt;/strong&gt;, &lt;strong&gt;find&lt;/strong&gt; et &lt;strong&gt;crontab&lt;/strong&gt;. &lt;br /&gt; &lt;br /&gt;
Le fonctionnement est simple:&lt;/p&gt;


&lt;h3&gt;sauvegarde principale:&lt;/h3&gt;

&lt;p&gt;Chaque nuit, à 2h30, je sauvegarde l'ensemble des données que je veux pouvoir restaurer dans un répertoire backups/main, avec le &quot;mini script&quot; suivant, qui synchronise la racine du serveur avec ma sauvegarde: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;

#!/bin/sh
rsync -azh  --exclude=/pattern/à/ne/pas/sauver --exclude=/dev --exclude=/proc --exclude=/tmp --exclude=/sys   --delete-after --delete-excluded --stats / /chemin/vers/backups/main
&lt;/pre&gt;


&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
et cette ligne dans la crontab de root: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
30 02  *  *  * /chemin/vers/le/script/main_backup 2&amp;gt;&amp;amp;1 | mail votre@email.tld -s &amp;quot;[Rsync] rapport du `date +%A\ %d\ %B\ %Y`&amp;quot;
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
Je reçois ainsi chaque jour un rapport statistique sur la synchronisation, de cette forme: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;

Number of files: 208552
Number of files transferred: 1038
Total file size: 8.23G bytes
Total transferred file size: 354.84M bytes
Literal data: 354.86M bytes
Matched data: 0 bytes
File list size: 6230145
File list generation time: 98.647 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 70.71M
Total bytes received: 24.00K

sent 70.71M bytes  received 24.00K bytes  344.18K bytes/sec
total size is 8.23G  speedup is 116.42

&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
En cas de problème, le mail contient la sortie d'erreur de la commande. &lt;br /&gt; &lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Journalisation des sauvegardes&lt;/h3&gt;

&lt;p&gt;Pour pouvoir restaurer des sauvegardes plus anciennes, ou des fichiers effacés il y a plusieurs jours sur le serveur (et donc absent de backups/main), j'utilise trois petits scripts simplistes, qui, associés à une ligne adéquate dans la crontab de root, me permettent de conserver l'ensemble des sauvegardes des 7 derniers jours, une sauvegarde par semaine pendant un mois, et une sauvegarde par mois pendant 6 mois. &lt;br /&gt; &lt;br /&gt;
Voici les scripts et les entrées dans la crontab qui vont avec:
&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;daily_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
le script: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh
find /chemin/vers/backups/timed/daily/* -ctime +7 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /chemin/vers/backups/timed/daily/`date +%F` 2&amp;gt; /dev/null;
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;
30 03  *  *  * /home/effraie/scripts/daily_backup
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;weekly_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
le script: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh
find /chemin/vers/backups/timed/weekly/* -ctime +33 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /chemin/vers/backups/timed/weekly/`date +%U_%F` 2&amp;gt; /dev/null;
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;
40 03  *  *  0 /home/effraie/scripts/weekly_backup
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;monthly_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
Le script:&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh
find /chemin/vers/backups/timed/monthly/* -ctime +183 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /mnt/usb-data/backups/timed/monthly/`date +%m-%Y` 2&amp;gt; /dev/null;
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;
50 03  1  *  * /home/effraie/scripts/monthly_backup
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
Avec ça, je pense être habillé pour l'hiver! Cela dit, toute suggestion d'amélioration est la bienvenue.
&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sauvegardes extensives</title>
    <link>http://blog.effraie.org/post/2007/12/08/Sauvegardes-extensives</link>
    <guid isPermaLink="false">urn:md5:84f03561d8e749ed5888684ee35ec10c</guid>
    <pubDate>Sat, 08 Dec 2007 15:35:00 +0100</pubDate>
    <dc:creator>effraie</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Linux</category><category>Mavie</category><category>Planet</category><category>Sauvegarde</category><category>Serveur</category><category>Ubuntu</category><category>Web</category>    
    <description>    &lt;p&gt;Effraie.org héberge pas mal de sites, et la question des sauvegardes est devenue cruciale.
&lt;br /&gt; Bien sur, je pourrais renvoyer les utilisateur-ices à leur responsabilités, et leur demander de faire leurs propres sauvegardes. Cela dit, rien ne dit qu'elles/ils les fassent régulièrement, ni qu'ils sachent comment sauvegarder une base de données.
&lt;br /&gt; &lt;br /&gt;
Je me suis donc penché sur la question, et j'ai amélioré mon rsync quotidien pour obtenir un système qui me convient mieux,   &lt;br /&gt; &lt;br /&gt;
&lt;em&gt;Pour assurer que les données seront à l'abri en cas de crash des disques durs internes, mon répertoire backups/ est situé sur un disque usb externe. Prochainement, je cherche également à automatiser une sauvegarde de ce répertoire sur un serveur distant &lt;/em&gt;
&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Sauvegardes des bases de données&lt;/h2&gt;


&lt;p&gt;J'utilise, suivant les conseils avisé d'un copain, le script autoMYSQLBackup.sh qu'on trouve &lt;a href=&quot;http://sourceforge.net/projects/automysqlbackup/&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;. Après configuration de quelques variables, le script est opérationnel, et il ne vous reste qu'a le lier dans /etc/cron.daily/ pour obtenir une sauvegarde automatisée de chacune de vos bases. Le script conserve les backups des derniers 7 jours, une par semaine pendant un mois, et une par mois indéfiniment. &lt;br /&gt;
Au final, cela me permet de conserver une trace des données sur le long terme, sans pour autant user une espace disque démesuré, dans backups/sql.&lt;/p&gt;


&lt;h2&gt;Sauvegardes des données:&lt;/h2&gt;


&lt;p&gt;Pendant longtemps, je me suis contenté d'utiliser rsync pour sauvegarder les données du serveur. Cependant, je souhaitais bénéficier, comme pour les bases de données, de la possibilité de restaurer une sauvegarde plus ancienne.
Pour cela, j'ai utilisé des outils standards, &lt;strong&gt;rsync&lt;/strong&gt;, &lt;strong&gt;cp&lt;/strong&gt;, &lt;strong&gt;rm&lt;/strong&gt;,  &lt;strong&gt;date&lt;/strong&gt;, &lt;strong&gt;find&lt;/strong&gt; et &lt;strong&gt;crontab&lt;/strong&gt;. &lt;br /&gt; &lt;br /&gt;
Le fonctionnement est simple:&lt;/p&gt;


&lt;h3&gt;sauvegarde principale:&lt;/h3&gt;

&lt;p&gt;Chaque nuit, à 2h30, je sauvegarde l'ensemble des données que je veux pouvoir restaurer dans un répertoire backups/main, avec le &quot;mini script&quot; suivant, qui synchronise la racine du serveur avec ma sauvegarde: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;
rsync -azh  --&lt;span&gt;exclude=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;pattern&lt;span&gt;/&lt;/span&gt;à&lt;span&gt;/&lt;/span&gt;ne&lt;span&gt;/&lt;/span&gt;pas&lt;span&gt;/&lt;/span&gt;sauver --&lt;span&gt;exclude=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;dev --&lt;span&gt;exclude=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;proc --&lt;span&gt;exclude=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;tmp --&lt;span&gt;exclude=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;sys   --delete-after --delete-excluded --stats &lt;span&gt;/&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;main&lt;/pre&gt;


&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
et cette ligne dans la crontab de root: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;30&lt;/span&gt; &lt;span&gt;02&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;le&lt;span&gt;/&lt;/span&gt;script&lt;span&gt;/&lt;/span&gt;main_backup &lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt; &lt;span&gt;|&lt;/span&gt; mail votre&lt;span&gt;@&lt;/span&gt;email.tld -s &lt;span&gt;&amp;quot;[Rsync] rapport du `date +%A&lt;span&gt;\ &lt;/span&gt;%d&lt;span&gt;\ &lt;/span&gt;%B&lt;span&gt;\ &lt;/span&gt;%Y`&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
Je reçois ainsi chaque jour un rapport statistique sur la synchronisation, de cette forme: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;

Number of files: 208552
Number of files transferred: 1038
Total file size: 8.23G bytes
Total transferred file size: 354.84M bytes
Literal data: 354.86M bytes
Matched data: 0 bytes
File list size: 6230145
File list generation time: 98.647 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 70.71M
Total bytes received: 24.00K

sent 70.71M bytes  received 24.00K bytes  344.18K bytes/sec
total size is 8.23G  speedup is 116.42

&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
En cas de problème, le mail contient la sortie d'erreur de la commande. &lt;br /&gt; &lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Journalisation des sauvegardes&lt;/h3&gt;

&lt;p&gt;Pour pouvoir restaurer des sauvegardes plus anciennes, ou des fichiers effacés il y a plusieurs jours sur le serveur (et donc absent de backups/main), j'utilise trois petits scripts simplistes, qui, associés à une ligne adéquate dans la crontab de root, me permettent de conserver l'ensemble des sauvegardes des 7 derniers jours, une sauvegarde par semaine pendant un mois, et une sauvegarde par mois pendant 6 mois. &lt;br /&gt; &lt;br /&gt;&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;
&lt;img src=&quot;http://blog.effraie.org/public/icones/attention.png&quot; alt=&quot;attention.png&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; &lt;strong&gt;Note ajoutée à la suite de quiproquo dans les commentaires&lt;/strong&gt; &lt;br /&gt;
Le systéme de journalisation/rotation des backups utilise l'option -l de cp, pour créer des hardlinks au lieu de recopier les fichiers, dans tt les cas ou le fichier n'a pas été modifié. C'est le moyen de n'utiliser que l'espace disque minimum requis. Compresser les données dans une archive ferait perdre cet avantage, et utiliserait, finalement, &lt;strong&gt;plus&lt;/strong&gt; d'espace disque.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Voici les scripts et les entrées dans la crontab qui vont avec:
&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;daily_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
le script: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;
&lt;span&gt;find&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;daily&lt;span&gt;/*&lt;/span&gt; -ctime &lt;span&gt;+7&lt;/span&gt; -&lt;span&gt;exec&lt;/span&gt; &lt;span&gt;rm&lt;/span&gt; -rf &lt;span&gt;&amp;#123;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt; \;
&lt;span&gt;cp&lt;/span&gt; -al &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;main &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;daily&lt;span&gt;/&lt;/span&gt;`&lt;span&gt;date&lt;/span&gt; +&lt;span&gt;%&lt;/span&gt;F` &lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;dev&lt;span&gt;/&lt;/span&gt;null;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;30&lt;/span&gt; &lt;span&gt;03&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;home&lt;span&gt;/&lt;/span&gt;effraie&lt;span&gt;/&lt;/span&gt;scripts&lt;span&gt;/&lt;/span&gt;daily_backup&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;weekly_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
le script: &lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;
&lt;span&gt;find&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;weekly&lt;span&gt;/*&lt;/span&gt; -ctime &lt;span&gt;+33&lt;/span&gt; -&lt;span&gt;exec&lt;/span&gt; &lt;span&gt;rm&lt;/span&gt; -rf &lt;span&gt;&amp;#123;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt; \;
&lt;span&gt;cp&lt;/span&gt; -al &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;main &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;weekly&lt;span&gt;/&lt;/span&gt;`&lt;span&gt;date&lt;/span&gt; +&lt;span&gt;%&lt;/span&gt;U_&lt;span&gt;%&lt;/span&gt;F` &lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;dev&lt;span&gt;/&lt;/span&gt;null;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;40&lt;/span&gt; &lt;span&gt;03&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;0&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;home&lt;span&gt;/&lt;/span&gt;effraie&lt;span&gt;/&lt;/span&gt;scripts&lt;span&gt;/&lt;/span&gt;weekly_backup&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
&lt;strong&gt;monthly_backup&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;
Le script:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;
&lt;span&gt;find&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;monthly&lt;span&gt;/*&lt;/span&gt; -ctime &lt;span&gt;+183&lt;/span&gt; -&lt;span&gt;exec&lt;/span&gt; &lt;span&gt;rm&lt;/span&gt; -rf &lt;span&gt;&amp;#123;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt; \;
&lt;span&gt;cp&lt;/span&gt; -al &lt;span&gt;/&lt;/span&gt;chemin&lt;span&gt;/&lt;/span&gt;vers&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;main &lt;span&gt;/&lt;/span&gt;mnt&lt;span&gt;/&lt;/span&gt;usb-data&lt;span&gt;/&lt;/span&gt;backups&lt;span&gt;/&lt;/span&gt;timed&lt;span&gt;/&lt;/span&gt;monthly&lt;span&gt;/&lt;/span&gt;`&lt;span&gt;date&lt;/span&gt; +&lt;span&gt;%&lt;/span&gt;m-&lt;span&gt;%&lt;/span&gt;Y` &lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;dev&lt;span&gt;/&lt;/span&gt;null;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
L'entrée dans la crontab:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;50&lt;/span&gt; &lt;span&gt;03&lt;/span&gt;  &lt;span&gt;1&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt;  &lt;span&gt;*&lt;/span&gt; &lt;span&gt;/&lt;/span&gt;home&lt;span&gt;/&lt;/span&gt;effraie&lt;span&gt;/&lt;/span&gt;scripts&lt;span&gt;/&lt;/span&gt;monthly_backup&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt; &lt;br /&gt;
Avec ça, je pense être habillé pour l'hiver! Cela dit, toute suggestion d'amélioration est la bienvenue.
&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>
