miércoles, 16 de junio de 2010

Solucion a sectores dañados en linux. EXT2 y EXT3

Sintomas

El sistema se cuelga en tareas estupidas como reproducir una pelicula, instalar paquetes, configurar cosas, abrir determinados archivos para despues de un tiempo de estar "colgado" anunciar que hasta la tarea mas simple fallo por un "I/O error".

Hace falta confirmarlo tambien con los logs, la informacion necesaria aparece en el syslog (en /var/log/syslog ), se encontraran lineas similares a estas:


Jun 16 16:17:56 ubuntu kernel: [ 6193.840250] Buffer I/O error on device sda1, logical block 155153547
Jun 16 16:17:56 ubuntu kernel: [ 6193.840254] Buffer I/O error on device sda1, logical block 155153548
Jun 16 16:17:56 ubuntu kernel: [ 6193.840258] Buffer I/O error on device sda1, logical block 155153549


O tambien de estas:

Jun 15 20:16:01 ubuntu kernel: [ 25.636424] ata1.00: status: { DRDY ERR }
Jun 15 20:16:01 ubuntu kernel: [ 25.640935] ata1.00: configured for UDMA/133
Jun 15 20:16:01 ubuntu kernel: [ 25.640951] ata1: EH complete
Jun 15 20:16:01 ubuntu kernel: [ 29.172011] ata1.00: exception Emask 0x0 SAct 0x7fff SErr 0x0 action 0x0
Jun 15 20:16:01 ubuntu kernel: [ 29.172013] ata1.00: irq_stat 0x40000008
Jun 15 20:16:01 ubuntu kernel: [ 29.172016] ata1.00: failed command: READ FPDMA QUEUED
Jun 15 20:16:01 ubuntu kernel: [ 29.172022] ata1.00: cmd 60/08:28:a7:74:3f/00:00:09:00:00/40 tag 5 ncq 4096 in
Jun 15 20:16:01 ubuntu kernel: [ 29.172025] ata1.00: status: { DRDY ERR }
Jun 15 20:16:01 ubuntu kernel: [ 29.176722] ata1.00: configured for UDMA/133
Jun 15 20:16:01 ubuntu kernel: [ 29.176740] ata1: EH complete
Jun 15 20:16:01 ubuntu kernel: [ 32.440790] ata1.00: exception Emask 0x0 SAct 0x7fab SErr 0x0 action 0x0
Jun 15 20:16:01 ubuntu kernel: [ 32.440792] ata1.00: irq_stat 0x40000008
Jun 15 20:16:01 ubuntu kernel: [ 32.440795] ata1.00: failed command: READ FPDMA QUEUED
Jun 15 20:16:01 ubuntu kernel: [ 32.440801] ata1.00: cmd 60/08:48:a7:74:3f/00:00:09:00:00/40 tag 9 ncq 4096 in
Jun 15 20:16:01 ubuntu kernel: [ 32.440805] ata1.00: status: { DRDY ERR }
Jun 15 20:16:01 ubuntu kernel: [ 32.440807] ata1.00: error: { UNC }
Jun 15 20:16:01 ubuntu kernel: [ 32.445770] ata1.00: configured for UDMA/133
Jun 15 20:16:01 ubuntu kernel: [ 32.445785] ata1: EH complete


Solucion

Si algunos sectores del disco estan dañados sera inevitable que se pierda el disco entero tarde o temprano, por eso lo primero que se debe hacer es backup de toda la informacion.
Posteriormente, para poder seguir usando el disco, se debe hacer una revision completa marcando los bloques dañados como tal, el comando que hay que ejecutar es:


e2fsck -c /dev/sda1


Reemplazando /dev/sda1 por la particion que tengan que reparar.

Esto solo se puede hacer con la particion desmontada, para poder hacerlo asi recomiendo una de tres opciones:

1) Usar un live-cd como los de ubuntu, que les permite acceder a las particiones, tienen los comandos basicos y hasta entorno grafico para que puedan, por ej, escribir articulos en su blog publicando la solucion (es mi caso)

2) Usar una opcion de "rescue" (no estoy seguro si viene con ubuntu, pero viene con todos los fedora) eso les da una shell con privilegios de root pero nada de graficos, de ventanitas de gelatina, ni menos cubos de escritorio girando

3) Inician el sistema normalmente, y con Ctrl+Alt+F1 pasan a la consola sin graficos, ejecutan:


sudo init 1


Para pasar a runlevel 1 que detiene todos los servicios (incluyendo el entorno grafico) y permite desmontar cualquier particion, ahi ejecutan el escaneo y cuando termine vuelven a montar la particion y hacen


sudo init 5


Para volver a runlevel 5

Esta ultima es mas para "hackers" pero es innecesariamente complicada y me fracture el dedo indice cuando quise hacerla.

2 comentarios:

Unknown dijo...

Interesante la info sobre el "file system check" Dario-kun. Leyendo un poco la man page de e2fsck, descubrí que podría usarse 'badblocks' en lugar de 'e2fsck -c'. Aunque en el manual no lo recomiendan xD, me parece que basta con pasarle un argumento con el tamaño de bloque del file system para que sea lo mismo ;)

Saludos !

Dario dijo...

No habia leido en ningun lado que no se recomienda la opcion -c (hasta ahora solo lei la manpage de e2fsck e info en la web). Lo que si no es recomendable es especificar el tamaño de bloque, porque si te equivocas se rompe todo :(. Si queres podes probar esas cosas con un virtual file system, nisiquiera es necesaria una maquina virtual