- 1 Récapitulatif de la conversion et du problème posé
- 2 Vérifier si le système peut fonctionner
- 3 Avant d’attaquer : identification de la source et téléchargement des ISOs
- 4 Comment démarrer en mode rescue avec ESXi
- 5 Cas 1 : la partition de boot a été transférée 🙌🏻
- 6 Cas 2 : la partition de boot est manquante après la conversion P2V ou V2V 😥
- 7 Erreur « no such device », « Press any key to continue… »
- 8 Ressources (dans l’ordre où j’en ai eu besoin)
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)
- VMware P2V Conversion: GrubInstaller Error During Conversion of Debian Linux Host
- How to fix the UUID in Grub after restore from another machine?
- Grub2/Installing
- Failed to get canonical path of /cow
- Réinstaller Grub2
- Boot-Repair
- Boot-Repair, simple tool to recover access to your Operating Systems
- Install Boot-Repair via PPA in Ubuntu to Fix Boot Problems
- Créer une partition BIOS-Boot
- Rename /dev/sda2 to /dev/sda1?