Proxmox no arranca ningún contenedor tras un corte de luz: el LVM-thin a medio activar
Tras un corte de luz, el servidor arrancó solo pero ningún contenedor ni VM llegó a iniciarse. El almacenamiento de los contenedores se había quedado a medio activar después de su comprobación, y el arranque automático de Proxmox no lo reintenta.
- Proxmox VE
- Linux (Debian, Alpine, Arch)
Síntoma
Se fue la luz y volvió. El servidor arrancó solo, como debe, pero todos los contenedores y máquinas virtuales se quedaron parados. Ni siquiera se podía abrir la documentación: también vivía en uno de esos contenedores.
En el registro, cada diez segundos, el mismo mensaje:
activating LV 'pve/data' failed: Activation of logical volume pve/data is prohibited while logical volume pve/data_tmeta is active.
Qué estaba pasando
Los discos de los contenedores viven en un thin pool de LVM. Un apagado brusco lo deja marcado como «necesita comprobación», y en el siguiente arranque se lanza thin_check sobre sus metadatos.
Esa comprobación, sobre 8 GB de metadatos en un espejo de discos mecánicos, tardó entre 65 y 90 minutos: lectura aleatoria a 50-120 KB/s. Y al terminar dejó los dos volúmenes internos del pool (el de datos y el de metadatos) activos por separado, lo que impide activar el pool entero.
Para rematar: Proxmox intenta el arranque automático de los contenedores una sola vez, al arrancar el host. Como en ese momento el almacenamiento no estaba, fallaron y no se reintentan.
Cómo detectarlo
- journalctl -b 0 | grep -i 'activating LV' → el mensaje repitiéndose.
- lvs -a -o+lv_active → data_tdata y data_tmeta activos, pero data (el pool) no.
- ps aux | grep thin_check → si hay una comprobación en marcha, hay que dejarla terminar (y vigilar en /proc/<pid>/io que sigue leyendo).
- pct list y qm list → todo en «stopped».
Arreglo
Reintentar la activación del pool no sirve: sigue fallando aunque la comprobación haya terminado. Hay que desactivar primero las dos piezas sueltas para que LVM las vuelva a montar dentro del pool:
lvchange -an pve/data_tmeta
lvchange -an pve/data_tdata
lvchange -ay pve/data
lvs -a -o+lv_active # data debe salir activo
Y después, arrancar a mano
Aunque cada contenedor tenga el arranque automático activado, hay que arrancarlos uno a uno (pct start / qm start): el servicio que los arranca solo lo intenta una vez por arranque del host.