Quand on considère que l'ordinateur est devenu le principal outil de travail, il faut se protéger contre les pannes de matériel ainsi que les mauvaises manipulations des utilisateurs, donc faire des sauvegardes régulièrement pour pouvoir reconstituer à tout moment le contenu de l'ordinateur.
Même si la capacité des disques durs n'arrête pas de croître, ils ont tendance à se remplir rapidement. Il faut alors archiver certaines données vers d'autres supports avant de faire de la place sur le disque.
Comme on ne peut pas sauvegarder tout en permanence, il faut au moins sauvegarder l'essentiel régulièrement.
Les donnéees contenues sur un disque dur n'ont pas toutes le même statut.
Il y a des fichiers très volumineux mais assez faciles à récupérer
(comme par exemple le système d'exploitation, mais aussi les résultats de certaines
simulations numériques pas trop longues si on a le code et les paramètres du calcul), il y a aussi de
petits fichiers extrêmement précieux et difficiles voire impossibles à reconstituer
(lignes de code, documents rédigés, paramètres de configuration, carnet d'adresses, bookmarks).
S'il faut un ou plusieurs DVD et beaucoup de temps pour faire une sauvegarde totale, il
suffit de quelques secondes et de quelques disquettes (ou une petite clef USB grand maximum)
pour sauvegarder
tous les .tex
, .cc
et autres makefile
.
Une bonne manière de procéder est sans doute de faire des sauvegardes complètes de temps en temps, et des sauvegardes des fichiers essentiels beaucoup plus régulièrement.
Les supports réinscriptibles et donc réutilisables (CD-RW, DVD-RW, clef USB, disque dur externe) sont parfaits pour les sauvegardes de secours effectuées régulièrement. En revanche il vaut mieux utiliser un support indélébile (CD-R, DVD-R) pour archiver des données, c.-à-d. les mettre de côté de manière permanente avant de faire de la place sur le disque dur.
Pour copier des données il y a plein d'outils, des plus simples aux plus sophistiqués.
On peut bien sûr utiliser cp
, ou plutôt cp -pR
pour conserver
les propriétés des fichiers (permissions, propriétaires, dates...). Cela marche. Mais on peut
rencontrer des problèmes quand on fait des copies vers des supports externes (disquettes, clefs
USB) spécialement formatés pour être compatibles avec d'autres systèmes d'exploitation :
dans ce cas, les noms des fichiers peuvent être tronqués, tous les fichiers peuvent
devenir exécutables...
De la même manière, après gravage sur CD, tous les fichiers sont protégés en écriture.
Il est donc difficile de récupérer les données exactement à l'identique.
L'outil tar
permet de pallier à toutes ces difficultés en assemblant en un
seul fichier tout ce que l'on veut sauvegarder. Cela marche sur tout type de fichier (y
compris lien symbolique, device...) et on peut comprimer le résultat (tar -j
).
C'est ainsi que je fais des sauvegardes de tout le système
(partition /
) qui ne prennent que quelques centaines de M.
Le seul inconvénient de cette méthode, c'est que
même pour n'extraire que quelques fichiers il faut parcourir (et donc aussi décomprimer) tout le
.tar
, cela peut donc être assez long si le .tar
est gros.
La commande tar
est extrêmement polyvalente
(faire tar --help
pour
voir toutes les options possibles) et permet par exemple de ne choisir que les fichiers
donnés dans une liste, ou ceux plus récents qu'une certaine date.
Finalement n'importe qu'elle politique de sauvegarde doit pouvoir
s'implémenter avec tar
et quelques scripts bien écrits.
Plus élaboré est l'outil rsnapshot
.
Il est basé sur rsync
et fait
grand usage de liens durs (hard links). Ainsi il est possible d'avoir des sauvegardes complètes
de tout un système de fichiers à de nombreux instants différents, alors que l'espace occupé
n'est que celui d'une seule sauvegarde, plus les différences.
Finalement je préfère yakup
("yet another backup script") qui permet à la fois de faire des archives complètes et
des sauvegardes incrémentales à plusieurs niveaux. En mode archivage/sauvegarde, yakup
produit des fichiers .tar
(éventuellement comprimés)
et les découpe en tranches en fonction de la taille du support (CD, DVD, ...).
Il y a aussi de nombreuses fonctionalités d'extraction et de restauration de fichiers.
C'est très bien fait, et en modifiant les options dans un fichier de configuration
on peut l'adapter à tous les besoins. Tout ça avec un simple script bash
!
Sauvegarder de grandes quantités de données est un processus long et fastidieux. Aussi faut-il que la procédure soit automatique et préprogrammée, sinon on ne le fait pas assez souvent (ou même pas du tout).
J'ai un ordinateur portable avec un disque dur de 80G.
Je fais des sauvegardes sur un vieux disque dur externe de 20G
et des archives sur CD (graveur interne) et DVD (graveur externe).
(Un disque de 20G est largement suffisant pour contenir les sauvegardes
incrémentales et comprimées effectuées plusieurs fois quotidiennement pendant
des mois.)
Même si je n'éteins jamais mon portable, il est
régulièrement en hibernation et le disque dur externe n'est pas souvent branché.
La solution qui convient le plus à mes besoins est basée sur quelques scripts
lancés automatiquement et (plus ou moins) régulièrement par fcron
qui font des sauvegardes incrémentales sur le disque interne.
Chaque fois que le disque externe est branché, les dernières
sauvegardes y sont transférées par rsync
.
Une fois qu'un CD ou un DVD est gravé, il faut s'assurer de l'intégrité
des données qui viennent d'être gravées. Ce serait bête de constater
qu'il y a eu une erreur de gravage après avoir effacé ou perdu les données originales.
Pour vérifier le contenu d'un disque,
il ne suffit pas de le monter et de vérifier qu'il contient la bonne quantité de données,
ni non plus de faire ls -lR /mnt/cdrom
et de vérifier que tous
les fichiers sont listés. Si l'image ISO n'a été que partiellement gravée, l'arborescence
des fichiers est conforme, mais ce sont les données elles-mêmes qui sont défectueuses.
Le seul moyen de
s'assurer de l'intégrité du CD, c'est de comparer les images ISO avant et après
gravage, par exemple en comparant leurs sommes MD5. Après avoir gravé image.iso
sur un disque en /dev/hdc
, je fais
md5sum image.iso > image.md5
et
dd if=/dev/hdc | head -c `stat --format=%s image.iso` | md5sum > hdc.md5
Le processus de gravage s'est déroulé correctement si
image.md5
et hdc.md5
correspondent.
[Sans la commande head -c `stat --format=%s image.iso`
cela ne marche pas car quelques bits supplémentaires
peuvent être lus]. Certes, cette vérification prend pas mal de temps, mais c'est absolument
indispensable si on veut avoir confiance dans la sauvegarde.