Parmis les problèmes les plus courant, il y a :
fdisk
et entrer à la main les limites (Start et End) de chacune des partitions du disque. Bien sûr, il faut en avoir fait une copie papier au préalable (sur le fameux petit carnet utilisé lors de l'installation...).
cat /mnt/vmlinuz > /dev/fd0
par exemple. Normalement, ca devrait alors fonctionner si le noyau est correct. Eventuellement, spécifier au noyau quelle partition est la racine du système de fichiers (/dev/hda4 dans l'exemple qui suit) et lui dire de monter celle-ci en lecture seule pour permettre à fsck
de faire son travail au moment du boot :
rdev /dev/fd0 /dev/hda4 rdev -R /dev/fd0 1
strings /dev/hda3 > Recup
Il reste ensuite à parcourir le fichier et à récupérer ce qu'il est possible de récupérer. Une seconde solution est d'utiliser ce script Perl suivant :
# 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; }
Couldn't find valid filesystem superblock.
s'affiche alors. Pour le réparer, il faut d'abord avoir déterminé sur un système ``sain'' (partition sans problème de superblock) combien de blocks contient un ``groupe de block''. Si /dev/hda2
est la partition abîmée, de type ext2 (voir section 9.8 page ), entrer la commande suivante :
/sbin/dumpe2fs /dev/hda2 | less
et relever la ligne indiquant le nombre de blocks par groupe de block :
Blocks per group: 8192
La valeur standard est 8192. Le système fait des copies régulières du super-block au blocks 8192 + 1 = 8193, , ...si le nombre de blocks par groupe de block est bien 8192 (sinon, s'inspirer de ce calcul pour déterminer les endroits où résident les copies du super-block). Lancer alors la commande :
e2fsck -f -b 8193 /dev/hda2
Si ca ne fonctionne toujours pas, essayer de lancer la commande mke2fs
avec l'option -S. Attention à ne pas l'oublier, sinon la partition sera reformatée ! 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.
Il n'y a plus qu'à remonter de répertoire :
mount -t ext2 /dev/hda2 /mnt
On peut alors accéder aux fichiers de cette partition. Mettre le répertoire /mnt
dans la variable d'environnement $PATH peut faciliter les opérations. Si la commande shutdown
ne peut redémarrer le système, il faut bien penser à démonter manuellement les partitions avant de relancer le système.
badblocks > BLOCKS
.
e2fsck -f -L BLOCKS -p -y
.
/etc/passwd
est abîmé. Il faut alors démarrer avec la disquette de secours, se loguer en root (là, pas de mot de passe), monter la partition dans /mnt
:
mount -t ext2 /dev/hda1 /mnt
et modifier le fichier /mnt/etc/passwd
pour supprimer le mot de passe de root :
root::0:0:Big Brother:/:/bin/bash
Il ne reste plus qu'à relancer le système, se connecter en tant que root et appeler la commande passwd
pour définir un nouveau mot de passe.
Une autre méthode consiste à rebooter en mode dit ``single-user''. Pour cela, lors du boot avec LILO, fournir LILO linux single (remplacer ici ``linux'' par le nom sous lequel LILO connaît le noyau). Un shell root va apparaître. Attention : le clavier est en qwerty et la partition en lecture seule. Pour y remédier, taper :
loadkeys /usr/lib/kbd/keytables/fr.map mount -w -n -o remount /
La suite est comme dans la solution précédente pour avoir un nouveau mot de passe.
/lib/libc.so.4
, qui pointe vers le fichier /lib/libc.so.4.6.18
, par exemple (le numéros indiquent les versions). Il faut alors créer ce lien, s'il n'existe pas ou qu'il pointe vers un mauvais fichier :
cd /mnt/lib; ln -sf libc.so.4.6.18 libc.so.4
et appeler ldconfig
. Pour plus d'informations, voir section 8.5 page .