Les SSD NVMe constituent un vrai palier en termes de performances, mais il nécessitent de bien connaître l’environnement matériel dans lequel les exploiter. Par défaut, tous les BIOS sont compatibles NVMe mais seuls les BIOS UEFI peuvent booter dessus. Enfin ça c’est la théorie car avec un peu d’astuce, on quand même utiliser un SSD NVMe en tant que partition racine Linux d’un vieux serveur avec BIOS legacy.

NVMe : avantages et connecteurs

Dans le monde des SSD, l’interface NVMe est ce qui se fait de mieux car elle permet des latences très courtes, une gestion de profondeur de queue améliorée, et d’autres optimisations encore (source : Intel et anandtech.com). En pratique, NVMe donne accès à des débits de lecture-écriture gigantesques de l’ordre de 1 ou 2 Go/sec selon les modèles.

L’interface NVMe passe toujours par un bus de transport PCIe, mais plusieurs types de connecteurs sont disponibles comme le M.2 ou U.2 alias SFF-8639 (mini-SAS) qui est utilisé par les SSD NVMe professionnels en 2,5 pouces (exemple : Intel P3600).

Le connecteur femelle M.2 qui est utilisé par NVMe (une encoche) et AHCI (une encoche) est également compatible avec des SSD SATA (deux encoches). Il ne faut donc pas confondre M.2 (le connecteur physique) avec NVMe (l’interface) ni PCIe (le bus de transport). Quant à mSATA, c’est encore un autre connecteur qui n’a rien à voir avec NVMe ni PCIe, mais juste un connecteur SATA en plus petit.

De gauche à droite : M.2 (NVMe à 1 encoche) / M.2 (SATA à 2 encoches) / mSATA

Une alternative au NVMe qui reste en PCIe : AHCI

Le NVMe n’est pas la seule interface qui utilise le bus PCIe, on trouve aussi des SSD AHCI dont les performances sont respectables et qui sont réputés mieux compatibles avec les ordinateurs anciens (discussion ici). Le HP Z Turbo Drive est un exemple de SSD PCIe fonctionnant en AHCI. Cette carte PCIe x4 utilise en fait un SSD M.2 AHCI (modèle Samsung XP941) à l’intérieur.

Pour donner un exemple matériel, la station de travail HP z230 est réputée compatible avec les SSD PCIe AHCI selon le changelog du BIOS, même pour le boot, mais incompatible avec le boot sur NVMe (selon les forums officiels).

Aucun ordinateur est 100% incompatible NVMe

Prérequis pour booter sur un SSD NVMe…

On peut trouver des cartes mères vendu comme compatibles avec NVMe et d’autres non. A mon sens, aucune carte mère est incompatible avec un SSD NVMe pourvu qu’elle ait un connecteur PCIe x4. Même une vieille carte mère pourra exploiter un espace de stockage NVMe. Par contre, il faut absolument une carte mère récente pour booter sur un stockage NVMe. Pour connaitre la compatibilité d’un modèle particulier vous pouvez vous référer à la liste à puces ci-dessous ou tout simplement vous référer à la documentation de votre matériel ou aux forums du constructeur.

Plus précisément, pour booter sur un SSD NVMe, il faut un BIOS qui soit UEFI, et qui soit compatible NVMe. Donc pour récapituler :

  • si vous n’avez pas de BIOS UEFI, vous ne pourrez pas booter sur un SSD NVMe.
  • si vous avez un BIOS UEFI, mais que celui-ci n’est pas compatible NVMe (exemple : HP z230) vous ne pourrez pas booter sur un SSD NVMe.
  • si vous avez un BIOS UEFI, et que celui-ci est compatible NVMe (exemple : HP z240) alors vous pourrez booter sur un SSD NVMe.
  • dans tous les cas : vous pourrez quand même utiliser le SSD NVMe comme stockage accessoire et comme partition système, mais pas comme partition de boot (/boot sous Linux).

Finalement, il est rarement utile d’employer un SSD NVMe en tant que partition système, où un simple modèle SATA fera aussi bien. On pense par exemple aux environnements ESXi qui utilisent parfois une simple carte SD comme partition système pour l’hyperviseur. Par contre la technologie NVMe excelle dans des applications gourmandes en IO telles que le cache entrée-sortie (L2ARC sur ZFS par exemple), ou encore le stockage d’images de machines virtuelles. Ces applications ne nécessitent pas de booter dessus ; ces applications sont possibles sur une vieille machine.

…et si vous voulez quand même booter sur du NVMe avec un vieux matériel

Première méthode : l’amorçage sur un autre support

J’ai voulu malgré tout utiliser un SSD NVMe en tant que partition système sur un vieux serveur HP DL360 Gen8 dont le BIOS n’est pas compatible UEFI. On peut installer l’OS Debian dessus, mais le BIOS se trouvera incapable d’amorcer dessus car il ne le voit carrément pas.

Qu’à cela ne tienne, il vous suffit de créer une partition amorçable /boot sur un média extérieur tel qu’une carte SD ou une clé USB. J’ai choisi la carte SD sur l’emplacement interne de la carte mère. Les cartes SD récentes se payent le luxe d’être compatibles avec la commande TRIM.

Ainsi une table des partitions normale sur un SSD NVMe dans un serveur récent ressemble à cela (avec partition EFI) :

Une table des partitions sur un SSD NVMe dans un vieux serveur (pas EFI) ressemble à ci-dessous. J’ai rajouté la partition /boot sur le SSD (sdb).

Seconde méthode : gestionnaire d’amorçage comme Clover

Dans la même idée, vous pouvez utiliser un vieux matériel pour amorcer sur un gestionnaire de boot comme Clover. Ce logiciel est bien connu des amateurs de Hackintosh. Ensuite, le gestionnaire de boot pourra se substituer au BIOS pour amorcer sur un SSD NVMe.

Cette solution vise particulièrement les machines sous Windows puisque n’importe quelle distribution Linux pourra utiliser la première méthode ci-dessus. Voici plus d’explications sur la procédure à suivre pour Windows.

Conclusion

Voilà je l’espère de quoi clarifier la situation entre toutes ces normes et ces incompatibilités possibles. Dernier conseil : si vous utilisez un convertisseur M.2 vers PCIe x4 (exemple ici), connectez-le sur un port de la carte mère x8 ou x16 car les connecteurs physiques x4 ne supportent pas toujours 4 voies, ce qui conduit à des performances bridées.

Pour en savoir plus sur l’utilisation d’un SSD sous Linux et de la commande trim, vous pouvez consulter mon guide ultime sur le SSD.