Este capitulo esta dedicado a los momentos de catástrofe, cuando nada sale bien, y cuando uno tiene ganas de tirarlo todo por la ventana...
En ciertas situaciones (apagón, etc...), la tabla de particiones lógicas puede
corromperse. Si este es su caso, una solución para intentar resolver el
problema consiste en ejecutar el programa fdisk
e introducir a mano
los límites (Start et End) de cada partición del disco.
Por descontado, es importante haberlo apuntado previamente en papel.
Acaba de iniciar la máquina, y no puede arrancar. En este caso,
lo mejor es utilizar los disquetes de arranque (los de la
Slackware en este caso no están mal, o bien utilizar la opción
rescue con Red Hat). Una vez la máquina comienza, hay que montar la
partición raíz y copiar el núcleo en un nuevo disquete lanzando :cat
/mnt/vmlinuz > /dev/fd0
por ejemplo. Normalmente, esto debería
funcionar si el núcleo es el correcto. Eventualmente, efectúe un :
rdev /dev/fd0 /dev/hda2 rdev -R /dev/fd0 1para especificar al núcleo cual es la partición raíz del sistema de archivos, y que la monte como sólo-lectura para permitir a
fsck
hacer
su trabajo en el momento del arranque.
Ha formateado por error una partición donde se encontraba ese
informe de 120 páginas que había que entregar ayer. Bien, ˇnada de pánico!
Inútil decir que es imposible hacer un unformat
.
La primera solución de recuperación (muy brutal) es la de hacer un
strings /dev/hda3 > Recup
. No te queda más que recorrer el archivo
y recuperar lo que se pueda.
Una segunda solución es la de utilizar este script Perl (ver http://www-eleves.enst-bretagne.fr/~aubert/perl/) :
# Autor : aubert@titan.enst-bretagne.fr #!/usr/local/bin/perl $maxlines = 20; @before = (); $syntaxe = "Syntaxe: cgrep.pl termino_a_buscar archivo_a_recorrer\n"; $terme = shift(@ARGV) || die $syntaxe; $fichier = shift(@ARGV) || die $syntaxe; open(F, $fichier) || die "Cannot read $fichier: $!\n"; # Se llena @before hasta su capacidad máxima ($maxlines) while (($_ = <F>) && (scalar(@before) < $maxlines)) { if (/$terme/ o) { print @before; print $_; & print_next_lines; } push(@before, $_); } # La tabla @before contiene una buena cantidad de elementos, así que se # pasa ahora a una parte en donde @before guarda un tamaño 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 el super-bloque esta corrupto lanzar e2fsck
con las siguientes
opciones : e2fsck -b 8193 /dev/sda3
. Si no funciona , pruebe
aumentando el numero de 8192 cada vez para intentar recuperar una
copia del super-bloque en buen estado.
Si sigue sin funcionar , pruebe a lanzar la orden mke2fs
con la opción -S
. ˇAtención, no lo olvide, sino reformateará la
partición! Esta opción provoca la regeneración de las copias del
super-bloque y de los descriptores del sistema de archivos. No acaba
con los archivos existentes.
Si su disco tiene algunos problemas (sectores defectuosos), puede
recuperar e2fsck
en el paquete e2fsprogs
versión 1.10 si
no lo tiene ya. Luego :
badblocks > BLOCKS
;
e2fsck -f -L BLOCKS -p -y
.
Las instrucciones que siguen efectuan una copia de seguridad del disco (al menos de aquello susceptible de recuperación), comprueban la calidad del disco, recrean un sistema de ficheros retirando los bloques defectuosos y por último restauran la copia de seguridad.
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 de mke2fs
no debería producirse ningún mensaje de error
Ciertas máquinas no podrán funcionar convenientemente y producirán de manera mas o menos aleatoria un mensaje (por ejemplo "fatal signal 11") y luego bloquearan brutalmente la ejecución del programa activo. La causa más probable : problema de material (componentes de memoria demasiado lenta, por ejemplo).
Pruebe antes que nada a reducir la velocidad del procesador y/o el bus, desbloquear el cache procesador, gracias al "SETUP" de la máquina. Y luego disminuya el nivel de PIO del EIDE (no pasar de PIO 3). Leer a este propósito el documento http://www.linux-france.com/article/sig11-fr/.
Casi todas las distribuciones proponen disquetes de emergencia que permiten al
menos arrancar la máquina y montar la raíz del sistema de ficheros para poder
efectuar las reparaciones necesarias. Detodas formas, señalamos aquí la
presencia de un disquete muy útil (este tipo de disquete tiene un nombre
particular, "bita y cuchillo", por razones puramente históricas),
tomsrtbt
, que podemos encontrar en el sitio
http://www.clark.net/~toehser/.