Ce chapitre est dédié aux moments de catastrophe, ou rien de marche, et ou l'on a envie de tout mettre par la fenêtre...
Vous venez de rallumer la machine et n'arrivez plus à booter. Dans ce
cas, le mieux est d'utiliser les disquettes de boot (celles de la Slackware,
ou bien donner l'option rescue avec RedHat).
Une fois la machine amorcée, montez
la partition racine et copier le noyau sur une nouvelle disquette
en lançant : cat /mnt/vmlinuz > /dev/fd0
par exemple.
Normalement, ça devrait alors fonctionner si le noyau est correct.
Eventuellement, effectuez un :
rdev /vmlinux /dev/hda2
pour spécifier au noyau quelle partition est la racine du système de fichiers.
Voila, vous avez formaté par erreur une partition où se trouvait
le rapport de 120 pages à rendre hier. Bon, pas de panique ! Inutile de
dire qu'il est impossible de faire un unformat
.
La première solution de récupération (très brutale) est de faire un
strings /dev/hda3 > Recup
. Il reste ensuite à parcourir
le fichier et de récupérer ce qu'il est possible de récupérer.
Une seconde solution est d'utiliser ce scrip Perl (voir http://www-eleves.enst-bretagne.fr/ aubert/perl/) :
# Auteur : aubert@titan.enst-bretagne.fr #!/usr/local/bin/perl $maxlines = 20; @before = (); $syntaxe = "Syntaxe: cgrep.pl terme_a_rechercher fichier_a_parcourir\n"; $terme = shift(@ARGV) || die $syntaxe; $fichier = shift(@ARGV) || die $syntaxe; open(F, $fichier) || die "Cannot read $fichier: $!\n"; # On remplit @before jusqu'a sa capacite maximales ($maxlines) while (($_ = <F>) && (scalar(@before) < $maxlines)) { if (/$terme/o) { print @before; print $_; & print_next_lines; } push(@before, $_); } # Le tableau @before contient la bonne quantite d'elements, donc on # passe maintenant dans une partie ou @before garde une taille constante while (<F>) { if (/$terme/o) { print @before; print $_; & print_next_lines; } push(@before, $_); shift(@before); } close(F); exit 1; sub print_next_lines { for ($i = 0; $i < $maxlines; $i++) { print scalar(<F>); } exit 0; }
Si le super-bloc est vérolé lancer e2fsck
avec les options
suivantes : e2fsck -b 8193 /dev/sda3
. Si ça ne marche toujours
pas, essayer en augmentant le nombre de 8192 à chaque fois pour essayer de
récupérer une copie du super-bloc en état.
Si ça ne fonctionne toujours pas, essayer de lancer la commande
mke2fs
avec l'option -S. Attention à ne pas l'oublier
sinon vous reformatez la partition ! Cette option provoque la regénération
des copies du superbloc et des descripteurs du système de fichiers.
Elle n'écrase pas les fichiers existants.
Si le disque a quelques problèmes (secteurs défectueux), vous pouvez récuperer
e2fsck
dans le paquetage e2fsprogs
version 1.07 si vous ne
l'avez pas déjà. Ensuite,
badblocks > BLOCKS
; Les instructions qui suivent effectuent une sauvegarde du disque (enfin, de ce qu'il est possible de récupérer), teste la qualité du disque, recrée un système de fichiers en retirant les blocs défectueux et enfin restaure la sauvegarde.
cd /fs find . -depth -mount -print | cpio -ovB > $TAPE cd / tail -f /usr/adm/syslog & umount /fs badblocks -w -o /autre_filesystem/bb_list.tmp /dev/hda3 mke2fs -l /autre_filesystem/bb_list.tmp /dev/hda3 mount /dev/hda3 /fs dd if=/dev/zero of=/fs/test.tmp rm test.tmp cd /fs cpio -ivBmd < $TAPE
A partir du mke2fs
, aucun message d'erreur ne devrait
se produire.
Certaines machines ne pourront fonctionner convenablement et produiront alors de façon plus ou moins aléatoire un message (par exemple "fatal signal 11", ou "SIGSEGV") puis stopperont brutalement l'exécution du programme actif. Cause la plus probable : problème du matériel (composants de mémoire trop lents, par exemple).
Essayer tout d'abord, grâce au "SETUP" de la machine, de ralentir le processeur et/ou le bus, de "débrayer" le cache processeur. Puis diminuer le niveau de PIO de l'EIDE (ne pas dépasser PIO 3). Lire à ce propos le document http://www.bitwizard.nl/sig11/.