Google PlusFacebookTwitter

OMG… Mon instance Nova OpenStack est cassée !!!

By on Août 25, 2013 in Linux, OpenStack | 2 comments

Share On GoogleShare On FacebookShare On Twitter

Et oui… ça n’arrive pas qu’aux autres !

Une instance nova qui ne démarre plus et c’est le drame, les collègues courent dans tous les sens.

Avons-nous des sauvegardes ? Non ? Quoi ?
Ahhhhh !!! Mais qu’allons-nous dire au client ?

En théorie il existe une solution, je dis bien en théorie car si l’image de l’instance est gravement corrompue alors dans ce cas c’est le drame. 😀

qemu-nbd, un ami qui vous veut du bien

Les instances nova sont dans notre cas des instances KVM/Qemu et donc par conséquent encapsulée dans un disque de type QCOW2 ou RAW.

La solution consiste à utiliser la commande qemu-nbd qui permet de monter le disque d’une instance dans un répertoire et donc :

Le disque de l’instance sera accessible via le périphérique de bloc /dev/nbd0. Par défaut il existe 16 blockdevice de ce type, cela ce paramètre lors du chargement du module via la commande modprobe (nbd max_part=24). Un petit modinfo sur le module nbd nous permet d’obtenir cette information :

# modinfo nbd

Résultat :

filename:       /lib/modules/3.8.0-29-generic/kernel/drivers/block/nbd.ko
license:        GPL
description:    Network Block Device
srcversion:     BF45D7CA1A39D7C71128C84
depends:        
intree:         Y
vermagic:       3.8.0-29-generic SMP mod_unload modversions 
parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
parm:           max_part:number of partitions per device (default: 0) (int)
parm:           debugflags:flags for controlling debug output (int)

Go Go Go !

Dans un premier temps il est nécessaire d’obtenir des informations sur l’instance en question :

  1. Le compute sur lequel est exécutée l’instance
  2. Le nom de l’instance en question

Ces informations s’obtiennent via la commande nova show ID. C’est bon, toutes les informations sont entre vos mains ? Dans l’exemple ci-dessous, notre instance aura pour nom : instance-00000682

On liste les instances en cours d’exécutions :

# virsh list

Résultat :

 Id    Name                           State
----------------------------------------------------
444    instance-00000682              running

L’instance doit être suspendue :

# virsh suspend 444

Par défaut, les instances nova se trouvent dans le répertoire /var/lib/nova/instances/ (en fonction de comment nova a été configuré).

# cd /var/lib/nova/instances/instance-00000682/

Passons aux choses sérieuses !

# qemu-nbd -c /dev/nbd0 `pwd`/disk

Si aucun message d’erreur apparaît alors un fichier périphérique de bloc nommé /dev/nbd0p1 est créé. Il ne reste plus qu’à monter le disque (et sa partition) /dev/nbd0p1 dans le répertoire /mnt/

# mount /dev/nbd0p1 /mnt/

À partir de maintenant les données de l’instance nova sont accessibles depuis le répertoire /mnt ! Alors, heureux ?

Maintenant que tout va bien dans le meilleur des mondes, il reste à démonter le disque de l’instance et à résumer cette dernière.

# umount /mnt
# qemu-nbd -d /dev/nbd0
# virsh resume 444

Conclusion

Cette technique a fonctionner plusieurs fois, que se soit après le crash d’un compute qui endommagea le disque de l’instance ou bien une erreur de configuration réseau sur une instance Ubuntu ou aucun mot de passe root n’était défini… En fonction de l’état de l’instance il se peut que cette dernière ne puisse pas être démarrée par nova, ce n’est pas grave qemu-nbd sait se débrouiller comme un grand.

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

Cloud Technical Advisor chez IBM
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

Derniers articles parGaëtan Trellu (goldyfruit) (voir tous)

CC BY 4.0 OMG… Mon instance Nova OpenStack est cassée !!! par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.