2022-06-17
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 ? 🙃️
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...
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. 😤️
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 :
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.
--------------------------------------------------------------------------------
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 :
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 :
Création de la table de partition GPT
Appliquer les changements sur GParted
Gérer les drapeaux des partitions sur GParted
Notre clef est maintenant prête, on peut passer à la suite.
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
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.
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.
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
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.
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 ! 😁️
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.
https://pve.proxmox.com/wiki/Host_Bootloader
https://forum.proxmox.com/threads/issues-with-hp-p420i-and-smart.79669/#post-418226
--------------------------------------------------------------------------------