miércoles, febrero 23, 2005

 

Rescate de Sistema

Uf!
La semana pasada me topé con uno de esos problemas que hacen odiar el hardware.

A continuación, la (larga) historia:

Preliminares
Como buen seguidor de Debian, tengo sid instalado en mi casa. Pero no tengo internet, por lo que actualizo cada un par de días copiando los nuevos paquetes en un disco ZIP, que llevo desde la pega.
Tengo un PC ya más bien viejo, un Duron de 600MHz, placa PC-Chips barata. Y tengo actualmente instalado un núcleo 2.6.10-ac4, que instalé para probar. Disco de 80Gb, con la partición de Debian (root+home) de 20Gb sobre reiserfs, más otras particiones para archivos multimedia grandes.

Dia 1
Bueno, como decía antes, la semana pasada estaba copiando desde el ZIP USB al disco local y el USB se quedó pegado. Como mi mouse también es USB y está en el mismo HUB, me quedé sin mouse. Y la luz del ZIP quedó encendida.
Un 'dmesg' mostró que no había mayores problemas, por lo que decidí simplemente desconectar el ZIP y ver que pasaba. Y no pasó nada, seguia encendida la luz.
Así que decidí desconectar el HUB entero. En ese momento, el PC entero se quedó pegado, ya no funcionaba el teclado. Así que reinicié.

Ahora comenzaron los problemas. El sistema no hacía nada. Grub decía que no podía cargar la segunda etapa desde el sistema de archivos. Y por lo tanto, quedaba pegado. Y ya eran las 21:30...

"Buscaré un disco de rescate". Ups, no encuentré nada muy actual... un montón de discos de Debian, pero ninguno booteable. Unos discos de woody, con kernel 2.4.18 fue lo más nuevo que encontré.
Luego de bootear, la partición no montaba, el núcleo alegaba. Y en el CD no hay herramientas para revisar particiones reiserfs (astuta idea instalar todo en una partición reiserfs).

Finalmente, recordé que en el disco duro antiguo, que todavía tengo instalado en el PC, instalé Fedora Core 2 para probarlo, tiempo atrás.
Booteando desde el CD de woody, monté la partición de Fedora, un chroot y luego grub-install hicieron posible bootear de ese disco como secundario.
Una vez dentro de Fedora, busco los programas de reiserfs... ¡no están!

Pienso un rato... ¿de donde saco los reiserfsprogs?... Afortunadamente, tenía varios CD's con paquetes Debian (cada cierto tiempo los grabo con las actualizaciones para mi PC). Y encontré en uno de ellos el paquete de Debian reiserfsprogs, el que descomprimí utilizando el viejo método infalible: ar+gunzip+tar.

Finalmente tenía mi caja de herramientas completa. Ahora, proceder a ejecutar 'reiserfsck' en la partición muerta.
Bueno, no se ve muy bien. "Error en el superbloque principal" y otros similares (obviamente no recuerdo bien todos los mensajes), pero la verificación se llevó a cabo.

Luego de unos minutos, el programa termina diciendo amablemente que se encontraron errores que solo se repararán con la opción "--rebuid-tree", osea reconstruir el árbol completo desde cero. Y la documentación advierte hacer primero un respaldo de la partición antes de usar dicha opción. Complicado hacer un respaldo de 20Gb si ni siquiera puedo acceder a los datos dentro.

Como no tenía otra opción, aplique rebuid-tree. Y comenzó diciendo que demoraría 6000 segundos en terminar, verificando 4 millones de bloques. Afortunadamente demoró bastante menos (como media hora).
Además, para agregar un poco de emoción al asunto, por error maté el proceso antes de que terminara, por lo que tuve que empezar de cero...

Finalizada la reconstrucción del árbol, reiserfsck declara que encontró unos 40 directorios perdidos, con muchos archivos dentro...
Al montar la partición (todavía desde Fedora), veo que en realidad no tengo directorio raíz, esta todo en 'lost+founds'. Ahora sé por qué grub no encontraba su famosa segunda etapa. Que gracioso...

Afortunadamente, identificar los directorios más importantes, como 'usr', 'var' y 'etc' dentro de lost+founds fue bastante sencillo. Y luego de unos minutos el directorio raíz ya parecía una raíz de Linux. Claro que dentro de 'lost+founds' quedaban bastantes cosas sin identificar.
Probé hacer un chroot hacia el directorio recién poblado, pero fue imposible. Aprendí que el enlazador dinámico ('ld.so') de Debian es incompatible con el núcleo de Fedora Core 2 (problemas con "excec shield" por lo visto). Eso hace difícil ejecutar grub.

Luego de un par de rebooteos más, finalmente logré bootear hacia mi instalación de Debian. Ahora, a verificar las firmas de los paquetes para ver que cosas es necesario reinstalar. Eran como 100 (de unos 1500) paquetes con problemas.

Eso fue el día 1. Finalmente, casi a las dos de la madrugada terminé (soy bueno para quedarme pegado en el PC).

Dia 2
Al día siguiente en la pega grabé dos discos con todos los paquetes que cupieron de Debian, desde una lista de lo que tenía instalado en mi PC. Me pareció mejor así, para tener un respaldo de lo que estaba instalado.
Al llegar a mi casa, re-instalé todo lo que tuviera cambios con respecto a los md5sum's guardados.
Y luego hice un respaldo (siempre es bueno) de mi home, utilizando 'dar', que encuentro la herramienta ideal para respaldos en CD's. Cupo en tres discos.

Pero al realizar el respaldo surgieron problemas: varios archivos de mi home tenían tamaños gigantes, de varios gigas (eran archivos con hoyos, por lo que un simple 'du' no lo notaba). Procedí a borrar varios archivos,
mientras que otros tuvieron arreglo simplemente cortando la cola.

Epílogo
Antes de ayer volví a tener problemas. Algunos de los archivos gigantes, al borrarse, dieron errores que no tome en cuenta mayormente.
Pues el Lunes, al bootear mi PC, expresó que la partición tenía errores irreparables y era necesario un nuevo "--rebuid-tree". Afortunadamente no quedó nada malo luego de terminar (esta vez no encontró muchos archivos perdidos).
Espero que la cosa mejore, ya estoy pensando un cambio de sistema de archivos (me tinca probar ahora XFS), pero eso demorará un buen tiempo, por lo que esperaré un mejor momento.

¡Ah, lo olvidaba!. En el intertanto, grabé un CD de rescate con todas las herramientas necesarias. Encontré en internet un mini-cd llamado "RIP" (rescue is possible), basado en kernel 2.6.10 y con todos los chiches para rescate. Lo modifique agregando 'dar', además cambié el lynx por links, comprimí la documentación para que consumiera un poco menos de memoria y agregué un script de 'zless'.

La gracia de RIP es que utiliza sólo ramdisk, no necesita que el CD esté insertado para funcionar, por lo que puede usarse para rescatar desde CD aunque tenga un solo CD-ROM, o grabar CD's, etc.

Comments: Publicar un comentario

<< Home

This page is powered by Blogger. Isn't yours?