El disco zombie

Total que actualicé atom, la maquinita (con un procesador Atom, sorprendentemente) que siempre está prendida en mi casa. Si cuento al PS3 como computadora, en mi departamento tengo siete computadoras, cinco de las cuales uso casi todos los días; las otras dos son laptops viejitas.

Atom es la única que está prendida todo el tiempo (excepto cuando se va la luz, que gracias a los externos inútiles que ha contratado la CFE en toda la zona centro del país, cada vez es más común), y por lo tanto no la actualizo muy seguido. Además, siendo el Atom un procesador no terriblemente poderoso, prefiero no tenerlo compilando muy seguido.

El viernes dejé atom actualizándose, y cuando regresé a mi casa el domingo descubrí que se había ido la luz (los idiotas de la CFE de nuevo). Por lo tanto la máquina había muerto a la mitad de estar compilando el sistema, lo cual nunca es algo bueno. Cuando la prendí, la chingadera se negó a levantar el sistema.

Fui por un cable VGA y conecté la computadorcita a mi televisionsota, y vi que Linux daba un mensaje de error al inicializar de que el disco duro no estaba. Temí lo peor, que una descarga eléctrica hubiera quemado el disco duro, así que desarmé la maquinita y puse el disco duro en mi maquinota. El disco estaba bien.

Necesitaba levantar la máquina para poder analizar bien la situación, así que me lancé a la tarea de hacer un USB booteable (atom no tiene unidad de CD). Por supuesto, no lo conseguí; lo había hecho hace unos años, pero sí es ligeramente engorroso, y me harté y desarmé la maquinota para sacarle el CD y ponerlo en la maquinita. Y de ahí el relajo fue conseguir quemar un LiveCD de Gentoo en un CD-RW.

Cuando por fin tuve el LiveCD corriendo, lo primero que pensé fue que se podía haber jodido el MBR con grub, así que reinstalé grub. No funcionó. Luego pensé que tal vez una nueva versión de udev había quedado mal, así que reinstalé udev. No funcionó. Luego pensé que tal vez sería el kernel, así que actualicé y compilé el nuevo kernel. No funcionó.

Después de haber perdido unas cinco horas así, por fin me metí a la red y encontré este bug de Gentoo justamente, y con eso pude solucionar el problema.

De hecho mi intuición estaba bien; había una combinación de broncas entre grub, udev y el kernel, pero estaba muy cabrón que me diera cuenta por mí mismo (había que cambiar una opción de compatibilidad del kernel). Que yo configuro y compilo mis kernels no ayudó.

En Unix “todo es un archivo”. Lo pongo entre comillas, porque eso no es cierto; casi todo es casi un archivo. Esto lleva a tener un directorio /dev donde hay archivos que representan hardware; tarjetas de video, de sonido, discos duros, etc. La idea de que “todo” fuera un archivo surgió en los 70s, en parte para aprovechar la poderosa línea de comandos que Unix siempre ha tenido.

El problema era que en los 70s, el hardware de una máquina básicamente estaba grabado en piedra; hoy en día podemos conectar y desconectar decenas de dispositivos de nuestro sistema (y de hecho algunos lo hacemos… casi diario). Si el directorio /dev fuera estático, tendría que tener especificados los archivos para casi todo el posible hardware en existencia; algo completamente imposible.

Lo que hicieron en Linux fue entonces crear udev (después de intentos fallidos como devfs). La idea es que cada vez que el sistema operativo detecta cierto hardware, entonces crea el archivo correspondiente dentro de /dev. Lo cual en general funciona de pelos, pero gracias a un error básicamente fortuito, no lo estaba haciendo en mi máquinita, y únicamente para los discos duros. Lo cual es todavía peor: si no creara ningún archivo en /dev, entonces hubiera sido obvio que algo pasaba con udev; pero como sí creaba todos excepto los de los discos duros, yo no tenía ni puta idea de qué pasaba.

Como udev no creaba los archivos de los discos duros, el siguiente diálogo entre mí y mi computadora ocurría:

Atom: Estoy booteando…
Yo: OK.
Atom: Estoy inciando Linux desde tu disco duro…
Yo: Bueno.
Atom: No puedo seguir iniciando, no hay disco duro.
Yo: ¿Qué?
Atom: No hay disco duro.
Yo: ¡Pero si estás inicializando del disco duro!
Atom: No hay disco duro.
Yo: ¡Ahí está el disco duro, puedo hacer ls y todo!
Atom: No hay disco duro.
Yo: ¡¿Cómo vas a correr el sitema operativo que me dice que no hay disco duro si no hay disco duro?!
Atom: No hay disco duro.

Dios, las máquinas son idiotas. Quitando la configuración del kernel (CONFIG_SYSFS_DEPRECATED_V2, que, por cierto, no tiene nada que ver con discos duros ni con udev) todo se resolvió, y atom está ya corriendo actualizada y todo.

Pero qué buena broma estar perdiendo medio día tratando de revivirla.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *