Booter Proxmox sur un HP ProLiant DL380p G8 récalcitrant

Au boulot on a récemment fait l'acquisition d'un serveur HP ProLiant DL380p de 8ème génération d'occasion pour des besoins en stockage. Il s'agit d'une machine avec 12 baies disques de 3.5" reliées à un contrôleur RAID P420i en mode HBA, dont on ne va exploiter qu'une partie pour le moment, mais qu'on pourra facilement upgrader en ajoutant des disques quand le besoin d'espace se fera sentir.

L'idée de base c'était d'y installer un petit Proxmox 7.2 pour y faire tourner quelques containers dont un qui proposera un partage de fichier pour y stocker les téraoctets de données pour nos productions vidéo.

On a déjà un serveur de stockage (un ThinkSystem ST250) avec un setup similaire (Proxmox, RAIDZ, etc.). Ça ne devrait donc pas être trop compliqué de répliquer ça sur une machine plus puissante n'est-ce pas ? 🙃️

Installation initiale

L'installation de la machine n'est pas très compliquée en soi : on met les SSD et les disques durs dans les caddies puis on les insère dans les baies de disque. Ensuite on branche une clef USB contenant l'installateur de Proxmox sur la machine et on boot dessus. Il ne reste plus qu'à procéder à l'installation. Rien de bien compliqué quoi.

En dehors du fait que le « BIOS » du serveur met plus de 5 min à démarrer, il n'y a rien de particulier à signaler, jusque là tout se passe bien... Jusqu'au reboot. Là, pas moyen de démarrer sur le système installé sur les disques de la machine. Il ne semble même pas essayer et passe directement au boot PXE...

Les problèmes commencent

On va maintenant devoir essayer de trouver d'où vient le problème pour espérer booter l'OS installé.

On a bien sûr commencé par vérifier les configurations du BIOS (options de boot, disques en mode AHCI, carte RAID en mode HBA, etc.) et on a aussi essayé de mettre à jour le BIOS et de complètement reset les configurations, sans plus de succès.

En faisant une petite recherche sur les zinternets, on peut lire que les HP ProLiant de 8ème génération ne sont pas encore équipés d'UEFI, on doit donc booter à l'ancienne, en mode BIOS. C'est une piste sérieuse puisque Proxmox ne laisse pas trop le choix sur la manière dont il partitionne le disque et qu'il crée obligatoirement une table de partition GPT, ce qui peut interférer avec le processus de boot lagacy pour peu que le BIOS soit codé avec le c... 😅️

Pour vérifier si le problème vient de là, une seule solution : tester. J'ai donc essayé d'installer une Debian, sur un seul disque (on verra plus tard pour les configurations RAID, là il s'agit de trouver l'origine du problème) et j'ai partitionné le disque avec une table de partition MS-Dos puis installé GRUB en mode i386-pc. Sans succès : l'installation ne semble pas détectée par le serveur... 😓️

À partir de là, je me suis dit que je perdais trop de temps et qu'il me fallait trouver une solution, quitte à ce que ça ne soit pas très élégant. J'ai donc eu l'idée d'installer GRUB sur une clef USB puis de le faire chain load sur le GRUB installé sur les disques.

J'ai donc installé GRUB sur la clef USB avec une configuration minimale pour pouvoir accéder à sa console et trouver le nom du disque sur lequel je devrais enchaîner ensuite... J'insère donc ma clef dans un port USB à l'arrière du serveur, je reboot et il arrive sans encombre sur le GRUB de ma clef. Cool ! 😎️

J'appuie donc sur « C » pour accéder à la console, je liste les disques, et...

grub> ls
(hd0) (hd0,msdos1)

Il ne m'affiche qu'un seul disque comportant une seule partition (la clef sur laquelle il se trouve quoi) et il ne semble pas voir les cinq autres disques présents dans la machine... 🙄️ Il semblerait que les disques ne soient pas visibles au démarrage de la machine, mais seulement une fois un système Linux lancé.

Après avoir fait pas mal de recherches supplémentaires, j'ai fini par trouver une information absente du manuel du contrôleur RAID : il n'est pas possible de booter depuis le contrôleur en mode HBA...

J'aurais aimé le savoir avant pour ne pas perdre mon temps à essayer des trucs dans le vide... Mais maintenant au moins je sais ce qu'il me reste à faire pour que ça démarre. 😤️

Solution : déplacer GRUB et les noyaux Linux sur une clef USB

Puisque je ne peux pas démarrer depuis les disques, il me faut un autre périphérique de démarrage... Comme une clef USB par exemple. Une clef sur laquelle il faudra non seulement installer GRUB, mais également les noyaux Linux. Ça tombe bien, tout ce petit monde se trouve traditionnellement au même endroit : dans le dossier "/boot".

On a par contre un petit problème : Proxmox ne permet pas de configurer précisément la manière dont il partitionne les disques. Il n'est donc pas possible de lui dire de placer "/boot" sur la clef. On a deux solutions possibles pour remédier à ça :

  1. Comme Proxmox est basé sur Debian, il est possible d'installer une Debian (qui elle est bien plus configurable), et d'y installer Proxmox par-dessus. C'est faisable, c'est documenté, mais c'est pas officiellement supporté.
  2. On peut installer Proxmox « normalement » puis recréer nous-même le "/boot" sur la clef.

Je suis personnellement parti sur la seconde solution, et c'est la procédure que je vais vous décrire ci-dessous.

Note

Note : Il y a également un emplacement pour une carte SD sur la carte mère du serveur qui peut être utilisé à la place de la clef USB.

Préparation de la clef USB

Pour commencer, on va préparer la clef qui accueillera le nécessaire de boot. Sur cette clef on va devoir créer une table de partition GPT et 2 partitions :

  • La première est plus ou moins fictive et n'aura pas besoin d'être formatée. Il s'agit seulement de réserver de la place pour que GRUB puisse s'installer en mode BIOS malgré la table de partition GPT. Il faudra ajouter le flag bios_grub à cette partition pour que GRUB comprenne bien qu'il peut utiliser cet espace pour son usage.
  • La seconde partition contiendra quant à elle le contenu que l'on trouve habituellement dans /boot : les divers modules de GRUB ainsi que sa configuration, et les noyaux Linux. On attribuera les drapeaux boot et esp à cette partition pour qu'elle soit correctement détectée par la suite.

Voici un petit tableau récapitulatif :

Disque Partition Système de fichier Taille Flags
sdx (table de partition GPT)
  sdx1 pas formaté 1 Go bios_grub
  sdx2 FAT32 > 1 Go boot, esp

Note

Note : J'ai mis 1 Go un peu sans réfléchir pour la première partition lorsque j'ai partitionné ma clef, et comme j'avais la flemme de refaire mes screenshots j'ai laissé comme ça dans ce tuto... Mais en réalité 1 Mo suffit.

Quoi qu'il en soit, ça n'a pas une très grande importance vu la capacité des clefs USB que l'on trouve aujourd'hui. 🙃️

Personnellement, j'ai utilisé l'outil graphique GParted pour formater ma clef. Si vous souhaitez l'utiliser également, voici les étapes suivre :

  1. Sélectionnez le bon disque dans le menu déroulant situé en haut à droite (dans mon cas il s'agit de /dev/sda).
Menu de sélection du disque
  1. Créez la table de partition GPT :
    • Allez dans « Périphérique → Créer une table de partitions... »
    • Sélectionnez « GPT » dans le menu déroulant
    • Puis cliquez sur « Appliquer »
Création de la table de partition GPT
  1. Créez les partitions :
    • Pour la première, donnez-lui une taille de 1 Go et sélectionnez « effacé » comme système de fichiers.
    • Pour la seconde, laissez la taille par défaut pour prendre tout l'espace restant et sélectionnez « fat32 » comme système de fichier.
    • Cliquez sur le bouton pour appliquer le partitionnement.
Appliquer les changements sur GParted
  1. Ajoutez les bons flags :
    • Faites un clic droit sur la première partition, cliquez sur « Gérer les drapeaux » puis cochez « bios_grub » dans la fenêtre qui apparait.
    • On fait la même chose avec la seconde partition, sauf que cette fois-ci on coche « boot » et « esp ».
Gérer les drapeaux des partitions sur GParted

Notre clef est maintenant prête, on peut passer à la suite.

Installation de Proxmox

Il faut à présent effectuer l'installation de Proxmox sur le serveur. Il n'y a rien à signaler de particulier sur la procédure d'installation à un détail près : il faudra décocher la case « Automatically reboot after successful installation » à l'étape du résumé, juste avant de lancer l'installation. On aura en effet besoin d'effectuer quelques manipulations supplémentaires avant de redémarrer. 😄️

Proxmox : résumé de l'installation

Configurer le bootloader

Une fois l'installation terminée avec succès, on va pouvoir procéder à l'installation de GRUB sur la clef USB. Mais pour ça, il nous faut un terminal. Faites donc la combinaison de touches « Ctrl + Alt + F3 » pour accéder à une console.

Monter la partition contenant le système installé

Pour commencer, il nous faut monter la partition système du Proxmox que l'on vient d'installer. On effectuera le montage dans le dossier /mnt qui devrait déjà être présent et vide. La commande permettant de monter la partition varie en fonction des choix que vous avez faits lors de l'installation.

Si vous avez installé Proxmox sur une partition Ext4, votre partition système se trouvera probablement sur sda3 si vous avez un disque SATA. Vous pourrez monter la partition avec une commande similaire à celle-ci :

mount /dev/sda3 /mnt

Si comme moi, vous avez créé un RAID ZFS, la commande de montage sera alors :

zpool import -f -R /mnt rpool

Si tout s'est bien déroulé, vous devriez voir les fichiers du système dans /mnt.

« Chrooter » dans le système installé

Pour installer GRUB sur la clef, il faut se rendre dans le système que l'on vient d'installer. Étant donné qu'on ne peut pas le démarrer, on va utiliser l'utilitaire chroot pour y entrer depuis notre média d'installation.

Mais avant d'entrer dans le système, il y a quelques détails à régler : il nous faut commencer par monter les systèmes de fichiers spéciaux aux bons endroits du système de destination, sinon on aura quelques soucis. Pour se faire exécutez les commandes suivantes :

mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /run /mnt/run
mount --rbind /sys /mnt/sys

Une fois tous les points de montage correctement bindés, il est temps de se glisser dans le système installé :

chroot /mnt bash

Installer le bootloader sur la clef

Maintenant qu'on est entrés, on va pouvoir procéder à l'installation du bootloader sur la clef.

Pour commencer, branchez la clef au serveur si ce n'est pas déjà fait, et repérez-là. Vous pouvez par exemple utiliser la commande "fdisk -l" avant de brancher la clef puis la refaire après avoir branché la clef pour repérer le nouveau disque. Dans mon cas la clef se nomme sdg.

Il ne reste plus qu'à exécuter la commande suivante pour demander à Proxmox d'installer tout le nécessaire au boot de la machine sur la clef :

proxmox-boot-tool init /dev/sdg2

Si tout s'est bien passé, Proxmox devrait avoir rajouté l'UUID de la partition sdg2 dans le fichier "/etc/kernel/proxmox-boot-uuids". Grâce à ce fichier, le contenu de la clef sera automatiquement maintenu à jour par Proxmox lors des mises à jour du système.

Reboot

On peut à présent faire la combinaison de touches « Ctrl + Alt + F4 » pour retourner sur l'installateur, et cliquer sur le bouton « Reboot ». N'oubliez pas de débrancher le média d'installation avant que le serveur ne redémarre ! 😁️

Conclusion

C'était la première fois que j'avais à faire à ce type de serveur, et j'aurais clairement aimé être plus au courant des divers problèmes que j'étais susceptible de rencontrer. Mais avec un peu de persévérance on finit toujours par arriver à ses fins ; et puis on apprend plein de choses ! 😄️

J'espère en tout cas que ce petit article pourra vous aider si vous vous retrouvez dans des situations similaires. Je vous rajoute quelques liens ci-dessous histoire que vous ayez toutes les cartes en main.