Como explotar tu sistema y sobrevivir (sin reiniciar y con LVM)
Esta mañana estaba en el laburo intentando crear un pernodrive booteable. Después de algunos intentos fallidos decido empezar de nuevo: “dd if=/dev/zero of=/dev/sda” … me agacho para ver si el LED del pendrive parpadeaba y no … vuelvo a mirar el monitor y lo más rápido que pude apreté Ctrl-C. La salida de dd indicaba que había alcanzado a llenar de ceros los primeros ~150MB del disco rígido. Eso incluyó el Master Boot Record (MBR) y la tabla de particiones.:oops: (Nota para los distraídos: el dispositivo correcto hubiera sido /dev/sdb)
Después de sufrir un corto pero efectivo ataque de pánico que me dejó catatónico mi cerebro volvió a la vida :idea: y empecé a pensar como hacer para arreglar ese pequeño inconveniente. El sistema seguía funcionando a la perfección. Los datos que tenía con certeza eran que el disco tenía dos particiones, una sda1 con un /boot de ~1GB y una sda2 con LVM de ~250GB. Casi seguro que los datos que se rompieron fueron las imágenes de kernels y demás yerbas del /boot. Eso no es crítico para que el sistema siga andando, sólo para que vuelva a arrancar.
Salí corriendo a buscar un disco rígido externo que hay por ahí en la oficina y le creé una partición del tipo LVM. Inspirado por este 1, 2, 3, 4 del LVM-Howto me puse a laburar. Creé el volumen físico en el disco externo con pvcreate y se lo asigné al grupo de volúmenes con vgextend. Después hice que los volúmenes lógicos que tenía (root, home y data) se pasaran al disco externo con pvmove. Esto demoró un buen rato y mientras estuve rezando para que no fuera a fallar nada más mientras que hacía esto. Al menos estaba seguro que la tabla de particiones estaba en la memoria del kernel, pero no estaba seguro que LVM no fuera a intentar nada raro mientras hacía esos pases mágicos. A propósito, y se me acaba de ocurrir, habrá alguna manera de saber con detalle suficiente cuál es la idea que tiene el kernel sobre la tabla de particiones? Ya voy a investigar, pero si alguno que lea esto lo quiere comentar no me enojo.
Una vez que terminó de mover todos los datos saqué el disco interno del grupo de volúmenes con vgreduce. También desmonté todas las particiones de ese disco y las volví a crear aproximadamente a como eran con fdisk. Reinstalé el paquete linux-image-2.6 y puse el GRUB de nuevo en el MBR. Para finalizar hice todos los pasos anteriores del LVM pero al revés, moviendo los datos desde el disco externo al disco interno nuevamente.
Crucé los dedos y reinicié. Y todo volvió a estar como antes!
Moraleja: LVM es una herramienta muy poderosa, pero aún más lo es dd

