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.
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.
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
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 :
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.
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 :
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:
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 8193Merci à Stephan Evrat d'avoir souligné ce point. Il propose également de mettre a jour le label avec :: 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
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.
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.
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 !
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 !
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.
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.
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 :