Linux Disaster Recovery


In English

Ayant passé plus de 15 ans à casser différentes versions de SCO UNIX / XENIX, j'ai fini par bien connaître la façon de restaurer un système à partir d'une sauvegarde sur bande au format cpio. Pour cela il faut généralement faire appel aux  disquettes boot et root, repartitionner le disque et surveiller le mouvement de la bande durant la restauration qui semble durer des années. Une fois que vous l' avez fait quelques fois, la panique diminue et cela devient la routine.

Le virus Linux m'a finalement atteint en grande partie parce que mon patron décida que nous devions nous y mettre. Je fus dûment envoyé en formation  pour devenir Ingénieur certifié Redhat (RHCE). J'espérais apprendre la version Linux de tous les savoir-faire que j'avais acquis sur SCO.

Malheureusement le cours RHCE n'évoquait que très peu les sauvegardes et les restaurations sur bande qui sont  pourtant un outil essentiel de l'administrateur système. A mon humble avis, cela est certainement lié à la prolifération des contrôleurs RAID qui diminue beaucoup la probabilité d'une panne de disque catastrophique.

Je n'ai pas été favorablement impressionné quand j'ai  découvert que le noyau Linux de secours fourni avec les versions 6.2, 7.0 et 7.2 ne permettait pas d'accéder au lecteur de bande ! J'ai décidé de trouver comment y arriver en me disant que si je savais le faire, je n'aurais jamais à le faire.

Avant d'aller plus loin, j'ai pris soin de lire le boot disk HOWTO. J'ai découvert avec horreur la quantité de paramètres noyau en jeu pour fabriquer la disquette ou le CD de mes rêves. Mieux vaut laisser Redhat s'occuper de ça. Après avoir lu ce qui suit, vous devriez être capable de restaurer votre système en chargeant le bon module et en utilisant le CD d'installation.

Les informations qui suivent sont largement issues de mes essais et doivent être prises avec prudence : certaines sont peut-être douteuses ou carrément fausses. Vous êtes prévenus ! Mes expériences ont eu lieu exclusivement avec les versions 6.2, 7.0 et 7.2. Et pour la 7.1 ? Avant que j'aie eu le temps d'y jeter un coup d'oeil, elle était remplacée par la 7.2. Il est tout à fait possible que tout ou partie des informations qui suivent soient applicables à d'autres distributions.

 


Ce dont vous avez besoin 

  1. Une sauvegarde récente au format cpio contenant au moins les filesystems boot et root
  2. Le CD d'installation de la Red Hat 6.2, 7.0 or 7.2 et éventuellement la disquette de boot si votre machine ne peut pas booter à partir du CD
  3. Un module contenant le pilote de votre lecteur de bande compilé pour  la même version de kernel  que celle de  votre CD d'installation
  4. Un module contenant le pilote  SCSI  compatible avec votre matériel et compilé comme ci-dessus . Ce module peut-être indispensable si votre contrôleur SCSI n'est pas détecté au démarrage ou s'il n'est pas reconnu par le noyau de secours 

Les modules peuvent être difficiles à obtenir. Vous ne pouvez pas utiliser un module récupéré sur un système qui tourne et le charger. Je le sais parce que j'ai essayé et que j'ai dû noyer ma déception dans une bonne bière. 

Construire les  Modules

Les versions 6.2, 7.0 ou 7.2 ne fournissent pas les modules nécessaires sur le CD d'installation. On peut toutefois trouver un module st.o sur le Sysadmin Survival CD, (CD au format carte de crédit inclus dans les boîtes officielles) ; le module se trouve dans le fichier /lib/modules-2.2.16-22.tar.bz2. La Redhat 6.2 ne fournit pas de module convenable. Même si vous avez ce CD, vous devrez extraire le module à l'avance, avant toute restauration. Je ne sais pas si la version 7.2 inclut un sysadmin CD. Je l'ai téléchargée  sous forme d'images ISO. Plus rigolo, que de regarder la peinture sécher mais à peine.

Si vous utilisez la 6.2 ou la 7.2 ou si vous avez besoin du support de QIC02 pour la Redhat 7.0, vous allez devoir compiler les modules à partir des sources convenables. Les versions du noyau,  ce n'est pas une surprise,  diffèrent suivant la distribution.

Compiler un noyau est quelque chose d'assez simple, le code source est inclus dans le CD d'installation. Les instructions permettant de compiler le noyau et les modules peuvent être trouvées à de nombreux endroits, mais pour commencer, essayez : http://www.cpqlinux.com/kernel.html

Quelques points importants :

Si vous avez besoin du support de QIC02, c'est probablement une bonne idée de spécifier que vous voulez une "runtime configuration", sinon vous serez coincé sur un modèle et vous ne pourrez pas changer la configuration matérielle (DMA, IRQ ...). Ce serait très embêtant si vous ne pouviez pas vous rappeler de ces fichus paramètres matériels et ne vouliez pas vous ennuyer à lever le capot.

Pour pouvoir utiliser la "runtime configuration", vous aurez besoin d'un utilitaire tel que  qic02conf qui se trouve dans  tpqic02-support-1.9b.tar.gz que vous pouvez télécharger à l'adresse http://penguinfiles.com/software/listings/System/Hardware/_D/2112

Copier les modules sur le file system d' une disquette

Une fois que vous avez compilé les modules, vous aurez besoin de les copier vers une disquette sur laquelle vous aurez crée un file system. Vous avez besoin d' un file system sur la disquette parce que, lorsque vous aurez démarré Linux en mode rescue, vous aurez à monter la disquette qui contient les modules. 

Heureusement, tout ce dur travail peut être évité car les modules et le fichier de support pour la 6.2 et la 7.0 sont disponibles à l'adresse  http://www.jezndi.org/pub/recover.img.gz Cette disquette contient aussi le module SCSI supportant les lecteurs de bande, le module st.o pour les noyaux de secours RedHat 6.2, 7.0 and 7.2 .

C'est une image de file system Linux. Une fois que vous l'avez téléchargée, copiez la vers une disquette de la façon suivante :

ou: Comme toujours avec  Unix, il y a plusieurs façons de procéder !

 Si vous lisez ceci mais que vous êtes déjà plantés et que vous n' avez pas accès à une machine sous Linux, vous pouvez utiliser  l'utilitaire DOS/Windoze RAWRITE.exe présent sur le CD d'installation  pour créer la disquette une fois que vous aurez décompressé l' image.

Appeler les secours 

Booter depuis le CD ou la disquette de boot. Au prompt taper linux rescue. Si votre configuration matérielle est convenablement détectée, tous les modules appropriés devraient être lancés. Si ce n' est pas le cas, vous aurez peut-être à lancer la commande modprobe pour les charger ou peut-être spécifier des paramètres au boot.

J'ai entendu des rumeurs affirmant que la RedHat 7.2 avait du mal à booter à partir du CD. J'ai eu moi aussi  des soucis ;  en gros cela marche une fois sur cinq. J'ai prétendu dans le BIOS que mon lecteur de disquette était de type 2.88 MB. Cela semble aller un peu mieux mais ce n'est pas encore ça. Si vous utilisez une machine Dell, cela vaut peut être la peine de vérifier que votre lecteur de CD est bien en configuré en maître ou en esclave mais pas en cable select, si l'on en croit  cet article.

Une fois que le processus de boot s'achève apparaît le prompt de bash. Le ramdisk crée au cours du boot ne contient pas les fichiers spéciaux permettant d' accéder aux périphériques tels que le lecteur de disquette, le lecteur de bande ou les disques durs. Vous avez donc besoin de créer ces fichiers spéciaux.

Selon votre matériel vous aurez besoin de tel ou tel fichier spécial. Pour certains vous devrez aussi préciser la valeur du major et du minor. Vous trouverez ci-dessous les exemples les plus courants :

Péripheriques  SCSI génériques  - on peut omettre le major et le minor

Périphériques  IDE génériques - on peut omettre le major et le minor 

Pour les  Compaq Smart Array , vous aurez besoin de créer le répertoire /dev/ida avant de créer les fichiers spéciaux. Vous devrez également spécifier les valeurs de major et de minor de ce périphérique de type bloc.

Pour les  Compaq CCISS c'est le même principe :

Vous devrez également créer les fichiers spéciaux correspondant au lecteur de bande 

Périphérique QIC02 

Lecteur de bande  SCSI générique 

Lecteur de disquette

Maintenant que les fichiers spéciaux sont crées, vous devriez pouvoir accéder aux périphériques voulus et lister la table des partitions avec la commande fdisk -l <device> ; elle  devrait afficher quelque chose comme :

Disk /dev/hda: 240 heads, 63 sectors, 776 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1       278   2101648+   6  FAT16
/dev/hda2   *       279       283     37800   83  Linux
/dev/hda3           284       318    264600   83  Linux
/dev/hda4           319       776   3462480    5  Extended
/dev/hda5           319       336    136048+  82  Linux swap
/dev/hda6           337       614   2101648+  83  Linux
/dev/hda7           615       776   1224688+  83  Linux

Si vous avez eu à changer le disque, il est plus que vraisemblable que vous n' ayez pas du tout de table de partition ;  dans ce cas vous allez devoir en créer une avec la commande :

Quelques points à ne pas oublier :

  1. vérifier que les partitions boot et root sont situées avant le 1024 ème cylindre, sinon vous pourriez rencontrer des problèmes de boot liés au BIOS.
  2. n'oubliez pas de créer une partition de swap. Le type correspondant est 82.
  3. les partitions à partir de la partitions 5  sont situées dans la partition étendue qui est contenue dans une des 4 partitions primaires.

Si vous avez eu a recréer la table de partition ou si vous avez des filesystems particulièrement abîmés, vous devez créer des filesystems sur les partitions :

fera le travail. Pour la partition swap, taper :

Pour la  RedHat 7.0, vous devrez spécifier le label de volume à la création du file system. Par exemple  pour  /boot la commande est:

et pour la racine : 

Si vous ne précisez pas le label du volume, le file system ne sera pas utilisable. Si le label est manquant, vous obtiendrez un message ressemblant à celui-ci quand vous rebooterez et tenterez de monter le file system :

The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not a swap or ufs or something else), the the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
  e2fsck -b 8193 


: No such file or directory while trying to open LABEL=/boot

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell
Merci à  Stephan Evrat d'avoir souligné ce point. Il propose également de mettre a jour le label avec : Vous pourriez aussi utiliser : 

Si l'argument optionnel <label> est absent , e2label affiche simplement le label courant du file system.

La RedHat 7.2 a introduit le type de file system journalise ext3. Si vous devez recréer un filesystem ext3, utilisez la même syntaxe que pour la RH 7.0 mais utilisez de plus  l' option  -j. 

Monter les  Filesystems

Créer un point de montage pour le  file system  root. Créer un point de montage pour la disquette. A titre d'exemple, j' utiliserai  sysimage et floppy. Monter le file system root sur  sysimage. Se placer dans  sysimage et créer les points de montage pour les autres filesystems normalement montés quand le système tourne. Typiquement il s'agit notamment de boot, usr, var, home, etc... Vous devriez également créer un répertoire proc sinon le système sera incapable de monter le file system proc au reboot. Monter chacun des filesystems que vous voulez restaurer sur le point de montage qui convient :

La Redhat 7.2 vous évite de travail. Elle crée pour vous les fichiers spéciaux dans /tmp (le /tmp crée dans l'environnement du mode rescue) et monte le filesystem root dans /mnt/sysimage. Cela peut-être tout à fait utile mais il  peut arriver qu' il soit impossible de démonter le file system root quand vous rebooterez. Le système aura besoin de nettoyer à nouveau /root au reboot. 

Insérer la disquette contenant les modules et la monter sur floppy

Se placer dans le répertoire floppy et charger le module gérant votre lecteur de bande. Vérifiez que le chargement s'est bien passé avec  lsmod.

Si vous utilisez un  lecteur QIC02, vous devrez charger à la place  tpqic02.o. Il faudra ensuite configurer le lecteur de bande. Pour cela, vous aurez besoin de l' utilitaire  qic02conf . Vous le trouverez dans la disquette décrite ci-dessus, celle qui contient aussi les modules. Vous aurez aussi besoin d'un script de configuration à moins que vous souhaitiez vraiment spécifier la dizaine de lignes de commande nécessaires pour fixer les options de  qic02conf. Quelques exemples utiles sont inclus dans la distribution de  qic02conf distribution, et sur la disquette évoquée plus haut.

Se placer dans le répertoire point de montage de root et restaurer vos filesystems.

ou  /dev/rct0 pour les  lecteurs QIC02 .

Si vous souhaitez restaurer un seul file system et si vous avez une sauvegarde totale, vous vous demandez sans doute quelles sont les bonnes options de cpio à utiliser. Ces subtilités sortent du sujet de ce document  (et probablement de tous les documentsl ;-)) et vous êtes invités à consulter le man de cpio.

Les filesystems sont maintenant restaurés !

RedHat 7.2 et  cpio

La RedHat 7.2 n'utilise pas le binaire GNU cpio. A la place, elle utilise le programme  BusyBox pour effectuer de nombreuses  fonctions. BusyBox contient un sous-ensemble des options de cpio  (et beaucoup d'autres choses), ainsi la syntaxe de  cpio  pour la  RedHat 7.2 est :

 

Il y a cependant un problème. La version de Busybox livrée avec la RedHat 7.2 (0.52pre) ne gère pas les lecteurs de bande dans la commande cpio. Cela se voit quand vous essayez d'accéder à la bande. La plupart du temps, il ne se passe apparemment rien, ou au mieux le lecteur gargouille. Le support est entrain d' être ajouté mais ça ne nous aidera pas  dans le cas de l'environnement obtenu en mode rescue a partir du CD d'installation..

Un moyen de s'en sortir est d utiliser la commande cat :

 

Cette solution a été suggérée par un des developpeurs de BusyBox, pendant qu' il tentait de résoudre le problème. J'ai testé leur patch qui semble bien fonctionner. J'ai inclus  le patch BusyBox/cpio sur la disquette évoquée plus haut. Pourquoi ? Parce que je pouvais ! 

Réinstaller LILO

Une fois que la restauration est terminée, vous pouvez avoir besoin de réinstaller le gestionnaire de boot lilo.

Exécutez lilo à partir du répertoire sysimage. Notez qu'il s agit de chemins relatifs: nous utilisons le binaire lilo que nous venons de restaurer dans sbin et le fichier de configuration lilo.conf que nous venons de restaurer dans etc.

On considère implicitement ici que votre file system root reste sur le même device que lors de la sauvegarde. Si ce n'est pas le cas, utilisez pico pour éditer etc/lilo.conf avant d' installer lilo. Il faudra aussi mettre à jour etc/fstab, sinon lors du boot le système ne saura pas ou monter les différentes partitions.

Démonter maintenant tous les filesytems, y compris le floppy et rebooter. Si tout s' est bien passé, votre système devrait maintenant rebooter.

Redhat 7.2 dispose d' un autre gestionnaire de boot, grub. Je ne l'ai pas encore essayé, aussi je n'en  parle pas  ici. 


 

Modules SCSI  Compilés pour le noyau RedHat Rescue 

Depuis que j ai écrit cette page, j'ai acheté un lecteur DAT et du coup un contrôleur SCSI. Hélas c'est une carte isa  Advansys ABP-510 ISA  Ce n'est pas rapide mais ça marche (depuis que j ai déniché le bon utilitaire de configuration et que la carte ne bloque plus complètement le système à cause de conflits d' IRQ !)

Naturellement j'ai testé tout ce qui précède juste pour être sûr que je n' étais pas à coté de la plaque. Je me suis aperçu que le pilote  advansys.o n' est pas chargé automatiquement, et qu'il ne se charge pas du tout avec le noyau rescue. Une fois de plus, je me suis mis à compiler la bonne version, je l'ai incluse dans l' image de disquette que je vous propose. Le module SCSI a besoin d' être chargé avant le module st.o.

Pendant que j'y étais, j'ai archivé tous les modules scsi dans un fichier tar qui peut être trouvé à l'adresse : http://www.jezndi.org/pub/RH6.2-recover-scsi.tgz. Ensemble ils sont trop gros pour tenir sur la disquette. Les modules pour la  RedHat 7.0 sont à l'adresse http://www.jezndi.org/pub/RH7.0-recover-scsi.tgz.

L'image de disquette fournie est un file system donc vous pouvez la monter et copier des fichiers à partir de cette image ou vers elle comme si c' était vraiment un disque. La ligne magique est ici : 

Cela vous permet de ne pas perdre votre temps avec une disquette et de ne pas utiliser des dd qui n'ont pas de sens.

 


Sauvegarder avec  CPIO 

Pour répondre à une demande du peuple, voici un tutorial express sur le sujet. Vous devriez vraiment lire le man de cpio pour connaître la version longue, mais vous trouverez ici quelques exemples bruts de fonderie qui feront clignoter les led de votre lecteur une minute ou deux.

 filesystem root :

 filesystem boot:

Les deux ensemble :


 

Liens utiles