Présentation :
Dernièrement, après avoir mis à jour de nombreux packages dans une machine virtuelle Xen 4.4 DOMU, pygrub ne pouvait plus démarrer la machine virtuelle.
Lors de la mise à jour de sécurité, le grub2(grup-pc) installé, qui n'avait jamais créé de problèmes auparavant avec pygrub, a été mis à jour et tout à coup, cela a créé des problèmes pour démarrer la machine virtuelle. Voici le message d'erreur que j'ai reçu en essayant de le démarrer :Parsing config from /etc/xen/VM.cfg
libxl: error: libxl_bootloader.c:628:bootloader_finished: bootloader failed - consult logfile /var/log/xen/bootloader.32.log
libxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: bootloader [-1] exited with error status 1
libxl: error: libxl_create.c:1024:domcreate_rebuild_done: cannot (re-)build domain: -3
libxl: error: libxl_dom.c:35:libxl__domain_type: unable to get domain type for domid=32
Unable to attach console
libxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: console child [0] exited with error status 1
J'ai une autre machine virtuelle avec le même système Debian qui démarre bien. Après avoir comparé les grub.conf etc. les uns avec les autres, je n'ai pu voir aucune différence.
Si je lance le pygrub avec le disque d'image de la VM comme argument, on me présente normalement le menu Grub, puis je lance avec les erreurs normales. Cette fois, je n'ai eu aucun menu et j'ai reçu le message d'erreur suivant :/usr/lib/xen-4.4/bin/pygrub /virtual/xen/VM/disk.img
Traceback (most recent call last):
File "/usr/lib/xen-4.4/bin/pygrub", line 839, in
raise RuntimeError, "Unable to find partition containing kernel"
RuntimeError: Unable to find partition containing kernel
Après avoir cherché un peu sur Google, j'ai trouvé ce site qui parle également de ce problème bien qu'avec un volume LVM au lieu d'une image disque de fichier. Mais le principe était le même :
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=745419
Donc en résumé :si pygrub voit autre chose que des zéros dans le premier 512 octets du disque image, il retourne avec cette erreur :'Impossible de trouver la partition contenant le noyau'
Cause :
Lors de la mise à jour de grub-pc, le script du package m'a demandé de spécifier le secteur de démarrage où grub devait être installé et il m'est arrivé de sélectionner celui proposé "/dev/xvda2", ce qui était une erreur.
Solution préventive :
J'aurais dû laisser la partition image intacte et continuer la mise à niveau de Grub-PC sans que grub soit écrit dans le secteur de démarrage, puis exécuter ensuite la commande :update-grub
Présenter la solution :
Remplacez le secteur de démarrage (512 octets) du fichier image par des zéros.
Commande : dd conv=notrunc if=/dev/zero of=/virtual/xen/domains/VM/disk.img bs=512 count=1
Remarque : J'utilise l'option conv=notrunc pour vous assurer que le fichier de sortie ne sera pas tronqué à 512 octets après l'écrasement.
Résultat :
J'ai alors pu redémarrer correctement la VM.