Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > LVM2 y dispositivos no encontrados

LVM: anotaciones

--lvm-- es un sistema que empleo bastante, y que es muy cómodo para ampliar la capacidad de una máquina, dado que se pueden mezclar diferentes tipos de discos, completos ó por particiones.

Sin embargo me he encontrado con algunos problemas, en circunstancias más bien precarias, y éstas son las soluciones que he podido encontrar.

LVM2 y dispositivos no encontrados

Tengo un servidor con Debian estable que tenía un único disco IDE de 80 Gb, con una partición dedicada a datos bajo LVM, un grupo data y un volumen lógico denominado databases.

Unos días más tarde le añado un disco nuevo, un SATA de 200Gb al que ni siquiera particiono porque pienso añadirlo al grupo data enterito.

Llevo a cabo los pasos para hacerlo con:

# pvcreate /dev/sda
# vgextend data /dev/sda
# vgextend -l+NNN /dev/data/databases
# xfs_grow /data

a partir de ese momento empiezo a usar el nuevo espacio en disco transfiriendo un montón de archivos.

Por circunstancias que no vienen al caso tuve que reiniciar la máquina un par de días más tarde (vale, era una actualización de núcleo), y me doy cuenta de que no puedo montar el volumen LVM en /data. ¿ Qué ha pasado ?

Que, efectivamente, el nuevo disco no puede montarse por la sencilla razón de que el dispositivo /dev/data/ no existe, y el núcleo no sabe nada de ello, o yo no soy capáz de encontrar referencia al problema en los registros (que tampoco es tan extraño).

Entonces me encuentro con lo siguiente:

  1. El módulo no está cargado:

    # modprobe dm-mod
    # echo dm-mod >> /etc/modules
    

    lo cargo e intento que la próxima vez el núcleo lo haga solito (menos mal que no se me ha ocurrido emplear LVM en el raíz; la solución es bastante más compleja).

  2. Los dispositivos siguen sin existir, por lo que hago:

    # pvscan -u 
    # vgchange -a y
    

    la primera orden me muestra que los volúmenes físicos están y tiene un identificador correcto, como debieran estar; el segundo es el adecuado, porque enseña al núcleo los dispositivos que debe usar.

  3. Vuelvo a montar todo el espacio:

    # mount -a
    

    Y ya está, de momento está todo otra vez funcionando.

Enlaces

PV unknown device VG

Este es un de esos errores terroríficos que uno se encuentra en las peores circunstancias.

Uno de mis servidores de datos estaba funcionando con una Debian Etch de 32 bits, puesto que necesitaba un controlador SCSI concreto, y cuando éste fue retirado por pura vejez ví necesario actualizar a la versión de 64 bits, como tengo en todas los otros servidores, y pensé que no debería tener problemas insalvables.

El punto de partida era el siguiente:

  • Disco IDE PATA (/dev/hda) empleado en su totalidad como volumen LVM.
  • Disco IDE SATA (/dev/sda) dividido en tres particiones:
    • /dev/sda1 como sistema raíz con ext3.
    • /dev/sda2 como memoria de intercambio.
    • /dev/sda3 como volumen LVM.

Lo que hice fue:

  • Copia de seguridad de la configuración usando rsync a otra máquina, incluyendo una lista de paquetes instalados, que aún no entiendo bien cómo no están en un lugar más accesible (tengo que tirar de dpkg --get-selections regularmente).
  • Arrancar con un DVD multiarquitectura de Debian (comprado en Debian Shop) y entrar en la configuración en modo experto.
  • Formatear /dev/sda1 e instalar allí una instalación base, asegurándonos de no tocar ningún otro disco ó partición.

La siguiente fase del plan era:

  • Arrancar con la nueva distribución.
  • Recuperar la lista de paquetes de la copia de seguridad
  • Alimentar a dpkg con ella y pedirle que haga una instalación basada en ella: # dpkg --get-selections < packages.list # apt-get dselect-upgrade
  • Recuperar la configuración desde la copia y reiniciar el sistema.

Pero con lo que me encontré tras la instalación y puesta en marcha fue que:

  • Aparecía el mensaje GRUB en el terminal y ahí se quedaba.
  • Arranco con la versión de rescate del DVD de Debian y actualizo GRUB en el disco SATA.
  • Vuelvo a iniciar, indicándole al BIOS que emplee dicho disco para arrancar y el sistema carga, levantando todos los servicios sin problemas (a excepción de PostgreSQL, pero eso es otra historia) y, casualmente, LVM deja de funcionar con un mensaje similar a éste:

    Couldn't find device with uuid '9kpWwu-LdwT-YiqV-DRPg-kSAN-plYN-v1Eq81'.
    Couldn't find device with uuid '9kpWwu-LdwT-YiqV-DRPg-kSAN-plYN-v1Eq81'.
    PV unknown device VG vgdata lvm2 [232.88 GB / 0 free]
    PV /dev/sda VG vgdata lvm2 [372.61 GB / 4.00 MB free]
    Total: 2 [838.38 GB] / in use: 2 [838.38 GB] / in no VG: 0 [0 ]
    

Tras cavilar durante un rato y mirar si el disco PATA existía, me doy cuenta de varias cosas:

  • El disco está reconocido sin problemas por el núcleo.
  • No hay tabla de particiones puesto que se ha empleado por completo como volumen físico de LVM.
  • El sector de inicio del disco es un sector de arranque tipo x86 ...

¿ Qué ? ¿ He machacado con la instalación los metadatos de LVM ? Pero si le dije que no tocase ninguna partición ... eh, espera, ¿ no me preguntó GRUB si quería instalar sobre el registro principal de /dev/hd0 ? Jo. Pues sí, le dije que sí y lo machaqué por completo.

Menos mal que hay alguien llamado georgeav que dejó la solución en un hilo ya antiguo de un foro de Ubuntu, y pude recuperarlo sin más sustos, pero reconozco que faltó poco.

  • LVM guarda una copia de seguridad de la información de los volúmenes cada vez que se modifica alguno, lo que quiere decir cada vez que se añade, sustrae ó modifica algún volúmen físico, y la almacena en /etc/lvm/backup.
  • Dicha copia es un archivo de texto con toda la información legible e inteligible.
  • Cuando inicializas un volumen físico con pvcreate únicamente reconstruyes los metadatos, y no tocas los datos en sí, por lo que hay muchas posibilidades de reconstruirlos si los datos se limitan a ellos.

Lo que hay que hacer es pues:

  • Recrear los metadatos del volumen físico (para el volumen lógico data en este caso), empleando el UUID que encontramos en el archivo de copia:

    # pvcreate --uuid "9kpWwu-LdwT-YiqV-DRPg-kSAN-plYN-v1Eq81" --restorefile /etc/lvm/backup/vgdata /dev/hda
    
  • Restaurar la copia en el volumen lógico data:

    # vgcfgrestore --file /etc/lvm/backup/data data
    
  • Reactivar el grupo:

    # vgchange -ay data