Sychlora Server - Serveur d'hébergement expérimental

Serveur d'Hébergement Expérimental

Auto-hébergement

Garder ses données sur le long terme

26/03/2012 02:49

Plusieurs solutions ont été présentées pour fiabiliser le stockage des données grâce à un RAID efficace (voir l'article ici). Vu la durée de vie des supports optiques (voir l'excellent article de 01Net ici) et la taille des disques durs actuels, la copie de ses données vers un support qui évoluera avec le temps est plus que recommandée.

Toutes les sauvegardes faites sur CD et DVD ROM (photos de famille, documents archivés, etc.) auront plus de chances de survivre au temps si elles sont intégrées dans une démarche de sauvegarde plus globale.

Plusieurs points sont à prendre en compte pour que cette sauvegarde soit efficace :

  • Tout d'abord, elle doit se faire automatiquement et non manuellement. On pourra ainsi opter pour une sauvegarde complète suivi de sauvegardes incrémentales afin de diminuer le temps nécessaire et pouvoir les rendre plus fréquentes ;
  • Les logs de cette sauvegarde devront être consultés régulièrement. Aucune garantie de pouvoir récupérer des données si la sauvegarde ne s'exécute pas et reçoit un message d'erreur. On pourra par exemple envoyer un e-mail à l'administrateur du système avec le log, ou encore centraliser tous les logs du système ;
  • La sauvegarde ou la version originale des données devra se situer sur un support fiable et devra évoluer avec le temps (changement de disques durs, changement de serveur, etc.)
  • Les données à sauvegarder devront être choisies avec soin. Soit dans l'objectif de redémarrer un système au plus vite après une panne, soit de garder des archives classées et organisées. Les deux cas seront détaillés ci après.

1. Choisir les supports de travail et de sauvegarde

Il est important qu'au moins l'un des deux supports puisse être considéré comme "fiable". Comprendre dans ce sens, que le risque de défaillance du support doit être faible, ou plus faible que celui de l'autre support. Par exemple, si le support de travail est un SSD, on pourra trouver cette fiabilité en utilisant un disque dur classique pour les sauvegardes. Si au contraire, le support de travail est une grappe RAID, on pourra utiliser un disque plus classique pour les sauvegardes.

Les sauvegardes pourront être faites sur le même serveur, cela pourra être pratique dans le but de garder les versions antérieures d'un fichier. Mais il faudra privilégier l'utilisation d'un NAS sur le même réseau, voire même l'utilisation d'un serveur géographiquement séparé du premier.

Si le support de sauvegarde est géré par un tiers, les données stockées pourront également être cryptées par mesure de sécurité.

2. Organiser ses données et définir les formats

Pour sauvegarder ses archives personnelles, il est important de définir quelques règles quant aux formats utilisés et le classement des fichiers. Cela permettra de retrouver plus facilement un fichier en particulier.

Tout d'abord, on choisira avec soin le format des données à stocker. Par exemple, pour les images de CDs/DVDs, le format ISO est assez normalisé et est très répandu. Pour les courriers et documents scannés, le PDF semble approprié car lisible sur la majorité des systèmes. Les musiques pourront être encodées en MP3, également dans le but d'être lisibles par n'importe quel appareil (OGG pourra être préféré car c'est un format libre, mais malheureusement pas encore lisible par l'intégralité des appareils mobiles).

Du côté classement, la hiérarchisation des données pourra se faire dans une arborescence à plusieurs niveaux. Le premier pourra être le type de données : Musiques, Films, Photos, Images de disques, Documents archivés, Système (qui contiendra les sauvegardes des dossiers utilisateurs et du système de chaque serveur).

Ce type de classification permettra également de séparer le type de support utilisé pour chaque dossier. Dans la plupart des cas cela ne sera pas nécessaire, mais pour un système hébergeant les sauvegardes de nombreux utilisateurs ou de nombreux systèmes, il est bon de savoir que les petits et les gros fichiers n'ont pas les mêmes besoins en termes de stockage et de vitesse de recherche.

Le second niveau de classement pourra être une répartition : par date pour les documents et photos, par artiste pour les musiques, par type pour les films, etc.

Dans le cas d'une classification par date, les dossiers et fichiers pourront être nommés en suivant la convention suivante : Année-Mois-Jour suivi du titre du document. Ce nommage ("2012-03-11 Compte rendu de réunion.odt") permettra un tri rapide des documents par leurs noms, et indépendant de leur date de création ou de modification.

3. Tout copier, tout encoder

L'idéal est de réussir à stocker toutes les données au même endroit. Si vous avez un NAS, vous avez peut-être déjà pris cette habitude. Sinon, prenez-la dès maintenant ! Il sera plus facile de s'y retrouver par la suite.

Ensuite pour être sûr de toujours stocker les nouvelles données au même endroit, sous Windows le montage de lecteurs réseau facilitera l'accès à ces données, et sous Linux l'excellent AutoFS rendra l'utilisation vraiment transparente !

Voilà pour le contenant, maintenant le contenu.

Côté documents officiels, certains doivent être conservés 1 an, 5 ans, 10 ans, voire même toute une vie. Une liste ici des principaux. Personne n'est à l'abri de perdre ces documents, et même si la copie informatisée n'est pas encore officiellement reconnue, prendre un peu d'avance ne fera pas de mal.

Il existe plusieurs formats de PDF, avec ou sans reconnaissance des caractères, et au moins autant de logiciels permettant de les générer, les trier et les rechercher.

Pour les vidéos, ressortez vos Super 8 et autres bandes magnétiques, avant que leur qualité ne se dégrade trop avec le temps, organisez une séance visionnage avec vos proches et n'importe quel appareil capable de filmer le résultat. Le film ne perdra pas trop de qualité vu le support de base, mais les pros pourront opter pour du matériel spécifique à cet usage.

L'encodage d'un fichier Avi venant d'un appareil photo numérique ou d'une caméra, pourra se faire vers un Divx ou autre format au choix avec Avidemux par exemple.

Toujours dans le cadre de la copie privée, l'encodage des DVD en Divx pourra être réalisé facilement grâce au logiciel AcidRip, vos proches seront ravis de pouvoir télécharger chez vous une copie du film du baptême de votre filleul !

Même sort à vos albums et compilations de musique, il sera beaucoup plus simple de retrouver un MP3 ou un OGG dans une bibliothèque numérique que dans la pile de CDs sur votre bureau (j'ai toujours une pile de CDs près de mon bureau, pas vous ?).

Pour les collectionneurs, ne pas oublier non plus les vinyles, plus longs à encoder mais dont le transport ou la manipulation s'avère toujours risqués. La lecture de cette copie pourra être faite à partir de n'importe quel périphérique sur le réseau, évitant ainsi de dégrader le support original.

4. Sauvegarder ses archives

La partie importante de la sauvegarde des archives est de pouvoir récupérer des fichiers évoluant peu dans le temps (une photo, une vidéo ou une musique ne risquent pas d'évoluer, contrairement aux fichiers d'un système d'exploitation). Cette sauvegarde ne sera pas nécessairement cryptée, mais dans le cas où elle devrait l'être (documents officiels, professionnels, personnels ou simplement pour utiliser un support de stockage "en ligne"), on se reportera à la partie suivante de cet article.

Sous Linux, le programme le plus adéquat pour copier uniquement les nouveaux fichiers ou ceux ayant été modifiés et renommés, sera sans doute RSync. Un simple CP pourra aussi convenir pour sauvegarder les nouveaux fichiers ou ceux ayant été modifiés. Dans ce cas, la suppression d'un fichier ne sera pas répercutée, mais en cas de déplacement d'un fichier, ou de renommage, le fichier sera dupliqué pendant la sauvegarde (ce qui peut être gênant avec des films).

Avec CP : cp -R -u /répertoire/travail /répertoire/sauvegarde (-R : récursif, -u : ne pas copier les fichiers existants dans la destination sauf s'ils ont été modifiés).

Avec RSync, le tutoriel de System-Linux.eu pourra être suivi.

L'utilisation de Cron sera idéale pour faire cette sauvegarde automatiquement. Un script pourra être créé dans un sous répertoire "scripts" de /home/votre_utilisateur et l'appel à ce script se fera dans le fichier /etc/crontab en y ajoutant la ligne :
0 0     * * *      votre_utilisateur      /home/votre_utilisateur/scripts/backups.sh

Ne pas oublier de rendre le script exécutable avec la commande : chmod 755 /home/votre_utilisateur/scripts/backups.sh
Au cas où le script devrait contenir un ou plusieurs mots de passe pour accéder aux supports de stockages, il faudra plutôt utiliser : chmod 700 /home/votre_utilisateur/scripts/backups.sh

Il pourra être intéressant de choisir une heure où le système est peu utilisé. Pour cela, soit il faut bien connaître son système et définir l'heure durant laquelle il n'est pas utilisé, soit observer son système pendant au moins une semaine grâce à des outils de supervision comme Munin.

Si des fichiers de nombreux utilisateurs doivent être copiés, le script peut être exécuté par l'utilisateur root dans /etc/crontab.

Dans ce cas, il faudra aussi s'assurer que root a accès en lecture et exécution au script : sudo chown root:root /home/votre_utilisateur/scripts/backups.sh && sudo chmod 700 /home/votre_utilisateur/scripts/backups.sh

5. Sauvegarder un système

En cas de panne matérielle, ou d'une modification tournant à la catastrophe, c'est ce type de sauvegarde qui vous fera gagner le plus de temps sur la remise en fonction de tous vos services.

Cette sauvegarde automatique devra être faite au moins une fois par jour sur un système en fonctionnement, elle pourra être plus fréquente pendant les jours où de grosses modifications seront appliquées au système.

Pour limiter l'espace utilisé sur le support de sauvegardes, il sera plus efficace d'utiliser une sauvegarde incrémentale journalière et une sauvegarde complète par semaine ou par mois.

Avant de la mettre en place, il faudra définir avec soin les dossiers à ne pas prendre en compte. Soit parce qu'ils sont déjà gérés par une autre sauvegarde (musiques, vidéos, photos et autres fichiers ne nécessitant pas d'être sauvegardés chaque semaine), soit parce que ce sont des dossiers spéciaux ou gérés par le système (/dev, /tmp, /proc, ...).

Cron sera aussi utilisé pour planifier l'appel au script de sauvegarde de manière journalière, comme dans la section précédente, mais ici c'est Duplicity qui sera utilisé pour les backups complets et différentiels.

Le script suivant pourra être utilisé et adapté selon les besoins. Il permet de créer une sauvegarde cryptée d'un dossier et de l'envoyer sur un serveur FTP.

Avant tout, il faudra installer GnuPG afin de crypter les backups (indispensable d'un point de vue sécurité si vos sauvegardes sont faites sur Internet ou sur un NAS en accès libre sur votre réseau). On ajoutera aussi Ncftc pour les accès FTP.

Pour l'installation : sudo apt-get update && sudo apt-get install gpg ncftp duplicity

Il faudra ensuite créer une clé pour le cryptage, ou importer des clés GnuPG existantes à partir d'un fichier.

Dans le premier cas, utiliser la commande gpg --gen-key pour créer un couple clé-privée clé-publique.

Dans le second cas, il faudra utiliser la commande gpg --import [fichier] pour importer une clé existante.
(Pour exporter une clé existante d'un autre serveur, il faudra utiliser la commande gpg --list-keys pour lister les clés publiques et gpg --list-secret-keys pour les clés privées. L'export vers un fichier se fera avec la commande gpg -a --export [identifiant de la clé] > [fichier]. Plus d'informations sur cette page du site de GnuPG.)

Voici un script permettant de faire le backup complet d'une machine vers un serveur FTP. Ce script est à adapter selon vos besoins, il peut également être utilisé pour sauvegarder un dossier particulier du serveur en adaptant les variables REP_FROM et REP_TO.

La variable DUPLICITY_KEY doit contenir le nom de la clé publique GnuPG à utiliser (il sera prudent également de garder une copie du couple de clé en sécurité sur un autre serveur). S'il existe une phrase de passe avec la clé GnuPG (recommandé !), il faudra l'exporter dans la variable PASSPHRASE.

Le mot de passe du compte FTP doit être exporté dans la variable FTP_PASSWORD (le nom d'utilisateur fait partie de la variable REP_TO).

Le script contenant de nombreuses informations sensibles, il est important de ne le rendre accessible qu'à l'utilisateur root avec :
sudo chown root:root /home/votre_utilisateur/scripts/backups.sh && sudo chmod 700 /home/votre_utilisateur/scripts/backups.sh
Les clés GnuPG devront être importées par l'utilisateur root afin de pouvoir les utiliser dans ce script.

D'autres paramètres pourront être ajustés dans le script :

Le temps maximum entre chaque sauvegarde complète dans COMMAND_DUPLICITY. Lorsque la dernière sauvegarde complète date de moins d'une semaine (--full-if-older-than 1W), Duplicity créera des sauvegarde incrémentales.

Le temps maximum avant l'expiration des sauvegardes dans COMMAND_DUPLICITY_CLEAN. Dans la pratique les sauvegardes complètes ne seront supprimées que lorsque toutes les sauvegardes incrémentales dateront de plus de 2 semaines (remove-older-than 2W).

export PASSPHRASE='phrase de passe'
export FTP_PASSWORD='mot de passe'

REP_FROM="/"
REP_TO="ftp://votre_utilisateur@serveurFTP/sauvegardes/serveur1"
DUPLICITY_KEY="Identifiant clé GnuPG"

PARAM_DUPLICITY_IGNORE="--exclude /mnt --exclude /tmp --exclude /proc --exclude /sys"

COMMAND_DUPLICITY="duplicity --encrypt-key $DUPLICITY_KEY --sign-key $DUPLICITY_KEY --full-if-older-than 1W --num-retries 3"
COMMAND_DUPLICITY_CLEAN="duplicity remove-older-than 2W --force --encrypt-key $DUPLICITY_KEY --sign-key $DUPLICITY_KEY --num-retries 3"
COMMAND_DUPLICITY_LIST="duplicity collection-status"

echo "////////////////////////////////////////////////////////"
echo "Synchronisation de : $REP_FROM"
echo "              vers : $REP_TO"
date
echo "////////////////////////////////////////////////////////"
echo ""
echo "+-----------------+"
echo "| Synchronisation |"
echo "+-----------------+"
echo ""
$COMMAND_DUPLICITY $PARAM_DUPLICITY_IGNORE "$REP_FROM" "$REP_TO"
echo ""
echo "+---------------------------------+"
echo "| Suppression des anciens backups |"
echo "+---------------------------------+"
echo ""
$COMMAND_DUPLICITY_CLEAN "$REP_TO"
echo ""
echo "+-------------------------------+"
echo "| Liste des backups disponibles |"
echo "+-------------------------------+"
echo ""
$COMMAND_DUPLICITY_LIST "$REP_TO"
echo ""

En cas de crash de Duplicity pendant la sauvegarde, il peut être intéressant de rajouter le paramètre -vinfo (niveau de verbosité = info) pour voir quel est le fichier ou le chemin qui pose problème et l'ajouter dans la variable PARAM_DUPLICITY_IGNORE.

Il est important d'exclure les dossiers /mnt /proc et /sys qui contiennent des dossiers virtuels non réellement présent sur le disque dur du serveur. Quant à lui, /tmp n'est pas censé contenir des données stockées définitivement.

6. Tout restaurer à partir des sauvegardes

Dans le cas de la restauration d'un sous-dossier en particulier, ou d'un fichier sur un système encore en fonction, la suite du document pourra être suivie.

Dans le cas d'une restauration complète à partir de la racine même d'un système hors service, il faudra démarrer une distribution de Linux sur un Live-CD et y installer Duplicity et GnuPG : sudo apt-get update && sudo apt-get install gpg ncftp duplicity

Ensuite, pour pouvoir déchiffrer les données stockées, importer la clé privée GnuPG que vous aviez gardé en sécurité (d'où l'importance de ne pas garder cette clé seulement sur votre serveur, mais aussi de la copier sur un autre PC ou sur une clé USB que vous gardez précieusement dans votre coffre-fort) : gpg --import [fichier]

Pour la restauration d'un fichier en particulier, ou d'un chemin complet, ce sont les commandes suivantes qu'il faudra utiliser après avoir défini au préalable l'emplacement de restauration :

export PASSPHRASE='phrase de passe'
export FTP_PASSWORD='mot de passe'

REP_FROM="/votre/point/de/montage/restore"
REP_TO="ftp://votre_utilisateur@serveurFTP/sauvegardes/serveur1"
DUPLICITY_KEY="Identifiant clé GnuPG"

duplicity restore --encrypt-key $DUPLICITY_KEY --sign-key $DUPLICITY_KEY "$REP_TO" "$REP_FROM"

L'emplacement de restauration pourra être un dossier temporaire de votre système, un dossier de travail d'un autre ordinateur, ou bien un point de montage correspondant au disque dur sur lequel la restauration doit être faite. Dans le cas d'une restauration complète du système (à partir d'un live CD), il faudra ajouter le paramètre --numeric-owner à cette dernière commande.

Pour spécifier le fichier ou le dossier à restaurer, il faut ajouter le paramètre --file-to-restore suivi de l'emplacement désiré.

S'il faut restaurer les fichiers à une date précise (fichier corrompu, effacé accidentellement la semaine dernière, etc.), le paramètre --restore-time pourra être ajouté et suivi soir d'une date au format YYYY/MM/DD, ou bien le nombre de jours XD (avec X le nombre de jours), de semaines XW, de mois XM, plus d'informations : man duplicity, voir le paragraphe "TIME FORMATS".

Sources

La page Duplicity du Wiki Auto-Hébergement
La page Duplicity du Wiki Debian
Un article Duplicity sur le site Dedian Administration
Le mini how-to de GnuPG

1 commentaire - Ajouter un commentaire