Il arrive après un accident (exemple: coupure des hyperviseurs) qu'une VM ne puisse pas démarrer à cause d'un disque corrompu.

Les symptomes peuvent varier : en général un système sous Linux va pouvoir booter tant que son disque principal est OK, alors que systemd va empêcher la machine de boot même si c'est un disque "inutile" qui est corrompu.

En général, récupérer d'un tel incident est facile, mais ici notre installation le complique un petit peu : les disques sont sur un NAS et sont accédés par Proxmox en iSCSI. En bonus, le compte root est parfois verrouillé.

Etape 1 : Préparation

Il faut d'abord s'assurer que la VM est bien éteinte. Attention avec l'hyperviseur, quand vous arrêtez les VM elles peuvent être redémarrées sur un autre hyperviseur grâce au (à cause du) HA. Utiliser stop VM.

Ensuite, rendez-vous en ssh sur l'hyperviseur sur lequel était lancé la VM, et assurez vous que les disques de la VM ne sont plus visibles avec lsblk et sont marquées comme inactifs avec lvscan.

Généralement, les disques apparaissent comme /dev/mapper/vg--reloaded--vm--130--disk--1. Ici, vg--reloaded est le nom du volume_group (configuré dans l'interface de proxmox), 130 l'id de la VM et 1 le numéro du disque.

Etape 2 : Trouver et activer le vg

Si le disque n'est plus vu, très bien, on est safe pour intervenir dessus ! On s'est assuré que rien n'était en train de l'utiliser.

Commençons par activer le volume pour que l'hyperviseur puisse le voir : lvchange -ay /dev/mapper/vg--reloaded--vm--130--disk--1

Pour une partition simple, il suffirait de la monter. Mais là c'est un volume group qui contient plusieurs volumes logiques, et plusieurs partitions.

Etape 3 : Mapper les partitions

Il va falloir identifier les volumes contenus sur le disques, et les rendre visibles sur l'hyperviseur. Un tel outil existe et fait ça très bien :-)

apt-get install kpartx

kpartx -av /dev/vg-reloaded/vm-130-disk-1

Etape 4 : Monter ou réparer les partitions

On active le volume logique qui correspond à la partition ou au disque corrompu : lvchange -ay /dev/skynet-vg/srv

Et ENFIN :-) on peut monter ou réparer notre partition : fsck /dev/skynet-vg/srv

Etape 5 : Quitter proprement [ESSENTIEL]

Maintenant, il faut laisser un système propre et des disques non montés, non activés et non utilisés pour redonner la main à proxmox plus tard.

  • On désactive le volume réparé lvchange -an /dev/skynet-vg/srv

  • On désactive le volume group lvchange -an /dev/vg-reloaded/vm-130-disk-1

  • On vire le mapping kpartx -dv /dev/mapper/vg--reloaded--vm--130--disk--1

Tout vérifier ! Les disques de la vm 130 ne doivent plus apparaître dans lsblk. Avec lvscan, ces disques doivent apparaître inactifs.

Quand tout est OK, vous pouvez retourner sur l'hyperviseur et redémarrer la VM, qui ne doit plus nous embêter. Enjoy.