P2V ou V2V d’un OS non pris en charge par vCenter Converter (Debian 9, 11, Ubuntu 18)

Récapitulatif de la conversion et du problème posé

Notez que cet article n’a été testé qu’avec un système d’amorçage BIOS, il est possible que ça ne marche pas en UEFI.

Suivre cet article-fleuve : Conversion P2V (physical-to-virtual) d’un serveur Online Dedibox ou dédié OVH sous Debian 9 avec VMware ESXI 6/7 et pfSense

Quand ce tuto commence, vous devez en être là :

Avec cette fameuse erreur qui apparaît toujours dans les derniers pourcentages :

FAILED: An error occurred during the conversion: ‘GrubInstaller::InstallGrub: /usr/lib/vmware-converter/installGrub.sh failed with return code: 127, and message: FATAL: kernel too old Error running vmware-updateGrub.sh through chroot into /mnt/p2v-src-root Command:
chroot « /mnt/p2v-src-root » /vmware-updateGrub.sh « GRUB2 » « (hd0) » « (hd0,1) » /vmware-device.map « grub2-install » ‘

Et dans ESXi, voir le message « Error loading operating system » ou « Operating system not found« .

Vérifier si le système peut fonctionner

Avant de se lancer dans les grandes manœuvres on veut vérifier que le système pourrait démarrer. On peut aussi avoir besoin d’une solution simple et rapide pour booter un système sans rendre la manipulation pérenne.

Plus simplement, si vous ne savez pas si votre partition de boot a été transférée, avec ça vous serez fixé.

Super Grub2 Disk

C’est un super utilitaire qui vient sous forme d’ISO léger (15 Mo), montez-le dans votre datastore :

Ajoutez-le à votre VM :

Lancez un scan et si un OS bootable est trouvé, il apparait et vous pouvez le lancer :

Magique !

Si vous rencontrez l’erreur Erreur « no such device« , « Press any key to continue… » : voir plus bas.

Avant d’attaquer : identification de la source et téléchargement des ISOs

Il est important d’identifier l’OS source, ici : Debian 10.

J’ai pu tester des réinstallations de GRUB en utilisant un live CD d’Ubuntu 18 sur une Debian 10, et aussi d’une Debian 10 avec un Live CD de Debian 11.

root@vpn:~# cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

En effet, il va falloir télécharger une ISO live, préférablement de la même version. Je conseille une ISO desktop car il va falloir faire des copier-coller, or je rappelle qu’on a juste accès à la Remote Console de VMware donc pas de c/c possible avec votre système ! Donc au moins vous pourrez les faire en remote.

En fonction de ce que vous cherchez à faire, il peut y avoir besoin d’une ou plusieurs ISO, et pas forcément celle qui match avec le système.

Si vous avez autre une VM avec un navigateur, dans la même instance d’ESXi ou sur un réseau rapide, téléchargez l’ISO depuis celle-ci et lancez la Web UI VMware depuis ce réseau pour uploader votre ISO + vite.

Comment démarrer en mode rescue avec ESXi

Ce que nous allons faire s’apparente au mode rescue que l’on trouve sur les serveurs Dedibox et OVH :

Chargez l’ISO live dans votre datastore :

Chargez-le dans le lecteur de CD virtuel de votre VM :

Si nécessaire, rentrez dans le BIOS pour sélectionner le lecteur CD comme disque de démarrage :

Et démarrez une session live :

Cas 1 : la partition de boot a été transférée 🙌🏻

C’est le plus simple. Lorsque tout le système est installé sur une partition (+ éventuellement une partition de swap, une partition /home) le dossier /boot est donc sur le volume racine /.

Pour réinstaller GRUB, vous devez connaitre l’emplacement du dossier /boot sur son système d’origine.

Localiser GRUB sur le système d’origine

Si vous avez encore accès la VM source, c’est plus simple :

root@source:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda3 during installation
/dev/sda2               /               ext4            noatime,errors=remount-ro               0       1
# /boot was on /dev/sda2 during installation
/dev/sda1               /boot           ext4            noatime         0       2
# swap was on /dev/sda4 during installation
/dev/sda3               swap            swap            sw              0       0

Voilà, le dossier /boot était sur la partition /dev/sda1. C’est là qu’on va réinstaller GRUB.

Réinstaller GRUB

Solution 1 : avec l’ISO d’un disque d’install

Les CD Live n’ont pas de « rescue mode » , en tout cas pas ceux des versions desktop.
Par contre avec un CD d’install d’une version serveur, on y accède bien.
Un autre avantage est que vous pouvez télécharger la version « Net install » (installation par le réseau) qui ne pèse que ~350 Mo, alors qu’un Live CD desktop pèse 2,5 Go !

Cette manipulation a été réalisée avec l’image ISO Net install de Debian 11 : debian-11.2.0-amd64-netinst.iso :

Aller dans Advanced options > Rescue mode :

C’est maintenant que vous avez besoin de connaître la partition où /boot se trouvait !

La réinstallation ne prend que quelques secondes, ensuite rebootez et avec un peu de chance, ça marche.

Si vous rencontrez l’erreur Erreur « no such device », « Press any key to continue… » : voir plus bas.

Solution 2 : avec un Live CD (desktop)

Il y a encore deux possibilités, en ligne de commande ou avec l’utilitaire Boot Repair. J’évoque ce dernier un peu plus bas : Réinstaller GRUB avec un Live CD et Boot-Repair

Cette manipulation a été effectuée avec un Live CD de Debian 10 (Gnome) : debian-live-10.0.0-amd64-gnome.iso

On lance un Terminal, et on commence par identifier la partition de boot :

root@debian/:~# fdisk -l
Disk /dev/sda: 16 GiB, 17178820608 bytes, 33552384 sectors
Disk model: Virtual disk    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6cb6ffbf

Device     Boot    Start      End  Sectors    Size Id Type
/dev/sda1  *         128 31455359 31455232     15G 83 Linux
/dev/sda2       31455360 33548543  2093184 1022,1M  5 Extended
/dev/sda5       31455488 33548543  2093056   1022M 82 Linux swap / Solaris

C’est donc sda1.
On monte cette partition et on vérifie la présence du dossier /boot d’origine :

root@debian:~# mount /dev/sda1 /boot

root@debian:~# ls /boot
config-4.19.0-17-amd64	initrd.img-4.19.0-17-amd64  System.map-4.19.0-18-amd64	vmlinuz-4.19.0-19-amd64
config-4.19.0-18-amd64	initrd.img-4.19.0-18-amd64  System.map-4.19.0-19-amd64
config-4.19.0-19-amd64	initrd.img-4.19.0-19-amd64  vmlinuz-4.19.0-17-amd64
grub			System.map-4.19.0-17-amd64  vmlinuz-4.19.0-18-amd64

Et on réinstalle GRUB :

root@debian:~# apt-get install grub2
root@debian:~# upgrade-from-grub-legacy

Il n’y a plus qu’à suivre l’assistant et sélectionner la bonne partition pour l’installation :

Déconnectez le lecteur CD et redémarrez, ça devrait être bon.

Cas 2 : la partition de boot est manquante après la conversion P2V ou V2V 😥

Il faut la recréer .
On va avoir besoin de GParted pour toucher aux partitions. Celui-ci est présent nativement sur le live CD d’Ubuntu, mais pas sur celui de Debian. Ouvrez un terminal en root (sudo -i) pour l’installer.

Malheureusement je n’ai pas pris de screenshot avant de jouer avec GParted, mais à l’origine évidemment il n’y avait que sda2 et sda5, sda1 étant manquante et c’est moi qui l’ai recréée. Il faut la recréer avant sda2. Elle 1 Mo au minimum. Contrairement à ce qu’on voit sur la capture ci-dessus, il faut mettre le flag grub_boot et non boot.

On peut aussi faire ça avec l’utilitaire parted en ligne de commande mais je suis plus à l’aise avec une GUI pour faire ce genre de manip. Si vous êtes aventureux, les instructions sont là : Créer une partition BIOS-Boot

Si vos partitions se créent dans le désordre et que vous ne parvenez pas à les ordonner dans GParted, essayez ceci :

gdisk /dev/sda

Appuyez sur s pour réordonner les partitions, et w pour enregistrer les changements.

Puis que j’étais en mode graphique, j’en ai profité pour tester un autre utilitaire afin de réinstaller GRUB.

Réinstaller GRUB avec un Live CD et Boot-Repair

Boot-Repair est un autre outil génial, que j’ai pu tester avec Ubuntu 18. Pour l’installation :

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair

J’ai dû tester plusieurs configurations avant de trouver la bonne, je suis passé en mode Avancé, j’ai vérifié que j’étais bien en mode BIOS et non EFI, choisir le bon emplacement, etc. Si l’installation ne peut pas se faire des explications seront fournies.

Après ça le système d’amorçage devrait bien être ajouté dans le MBR, mais le système ne pourra pas démarrer.

Erreur « no such device », « Press any key to continue… »

Chaque disque possède un identifiant unique (appelé UUID) et lors de la conversion, ou de l’ajout d’une partition de boot, votre UUID a changé. Ici en l’occurrence, il ne trouve pas le device qui termine par 87070. Prenez une copie d’écran de ce message (ou recopiez le UUID si vous avez du temps à perdre).

Donc GRUB est installé, il démarre, mais votre système d’origine lui, est perdu.

Récupérer l’identifiant unique (UUID) de vos partitions

One word : blkid.
J’espère que vous êtes sur un Live CD desktop, parce qu’il y a des UUID à recopier et comme il n’y a pas de c/c dans la VMRC il vaut mieux pouvoir utiliser un notepad à côté du terminal !

Copiez donc le ou les UUID actuels. Ensuite montez la partition de démarrage :

root@debian:~# mkdir /mnt/sda1
root@debian:~# mount /dev/sda1 /mnt/sda1

Cas 1 : vous avez créé une nouvelle partition et installé GRUB dessus

GRUB a donc réinstallé les bons UUID dans son fichier de config, il ne reste que le fichier des points de montage de votre OS à modifier : /etc/fstab. Faites une copie du fichier avant d’attaquer.

root@debian:~# cp /mnt/sda1/etc/fstab /mnt/sda1/etc/fstab.BAK
root@debian:~# nano /mnt/sda1/etc/fstab

Localisez le ou les anciens UUIDs (celui qui finit par 87070 dans mon cas) et remplacez-les par les nouveaux que vous avez obtenus avec blkid.

Cas 2 : vous avez créé une nouvelle partition et installé GRUB sur la partition de boot prééxistante

Si vous n’avez PAS recréé de partition, c’était moins de boulot tout à l’heure, mais c’est plus de boulot maintenant. En plus de modifier /mnt/sda1/etc/fstab comme montré dans le cas 1 ci-dessus, vous devez aussi modifier /mnt/sda1/boot/grub/grub.cfg

Je vous conseille d’utiliser le rechercher/remplacer de nano (ou une commande sed si vous êtes balaise) parce que l’UUID de boot est présent au moins 10 fois dans le fichier.

Vous pouvez démonter la partition (umount /mnt/sda1), retirer le CD et rebooter.

Ressources (dans l’ordre où j’en ai eu besoin)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.