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.
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) :
1 2 3 4 5 |
Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs Périphérique Début Fin Secteurs Taille Type /dev/nvme0n1p1 2048 976895 974848 476M Système EFI /dev/nvme0n1p2 976896 1000214527 999237632 476,5G Système de fichiers Linux |
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).
1 2 3 4 5 6 7 8 9 10 |
Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/nvme0n1p1 2048 1000214527 1000212480 477G 83 Linux Disque /dev/sdb : 488,5 MiB, 512229376 octets, 1000448 secteurs Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sdb1 * 2048 999423 997376 487M 83 Linux |
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.
Bonjour,
Merci pour votre article plutôt clair et détaillé.
A tout hasard, je rencontre un problème avec un nvme M.2 intel760p 1TO.
Le souci se situe au niveau du suspend, dès que le pc passe en mode S3 (suspend to ram) impossible de réveiller la machine, le pc freeze.
J’utilise linux au quotidien et j’ai aussi essayé sur un windows.. Même résultat.
J’ai même pris une carte pcie pour l’enficher dedans et le mettre en disque secondaire et il plante aussi la machine dès que je passe en suspend.
C’est sur une carte mère récente asus 320M-K, tout fonctionne sauf le suspend avec le disque enficher dans la cm.
SI vous avez une idée
Ah, les incompatibilités matérielles…
J’essayerais peut-être de mettre à jour le BIOS de la carte mère, puis de jouer avec les réglages BIOS concernant la gestion de l’énergie PCIe et des modes ACPI d’économie d’énergie.
Regarder aussi ce post et les liens qu’il donne.
En dernier recours, utiliser la veille prolongée (hibernate) plutôt que le suspend.
Et parfois, quand certaines configurations particulières sont récalcitrantes, il n’y a tout simplement pas de solution !
Merci d’avoir pris le temps de répondre.
Je crois que j’ai joué avec tout les paramètres noyau que je pu trouver de çi de la.
Mon bois et à jour (06/19) et il n ‘ya pas de paramètre acpi pour l’énergie PCIe.
Comme vous dites, je crois qu’il n ya pas de solution parfois.
J’ai remis mon ancien M.2 épaulé par un hdd un peu plus gros.
C’est dommage c’est un bon ssd de 1TO avec des débits de 750Mo/s en écriture, je l’ai mis en vente..
Pour l’histoire une mise à jour du bios de ma carte asus 320M-K a résolu le problème du mode S3, bueno 🙂
La mise à jour est sortie le 01/08/2019
Content pour vous !
Cela dit, au wattmètre, le suspend n’économise presque pas d’énergie sur ma carte mère. Du coup soit je reste en idle avec le gouvernor CPU qui va bien, soit j’éteins le PC. Et pour l’arrêt des disques durs mécaniques j’utilise un switch en façade.
Bonjour,
Il faut signaler une troisième méthode : on peut rajouter le driver DXE NVMe dans le bios du PC.
ça nécessite de flasher le
https://www.win-raid.com/t871f50-Guide-How-to-get-full-NVMe-support-for-all-Systems-with-an-AMI-UEFI-BIOS.html
Je l’ai fait avec succès sur un serveur Fuji TS140 :
https://twitter.com/gillesaurejac/status/995418694875537409
Bon, sur mon serveur Fuji il n’y a pas d’utilitaire à ma connaissance pour flasher un BIOS modifié, j’ai donc du passer par un programmateur d’eeprom mais ça vaut le coût parce que j’ai depuis un serveur qui boote nativement en NVMe et qui dépote !
A noter que certaines cartes mères ont un driver NVMe DXE incomplet, ou compressé, qui ne supporte pas le réveil depuis le mode S3…
Le fait de remplacer le driver NVMe DXE incomplet par un driver complet résoud justement ce problème.
Top, merci de l’information !
J’avais vu sur win-raid.com que le flash de BIOS était possible sous certaines conditions, sans chercher plus loin.
J’ai été confronté au problème avec un HP z230, et il me semble que le BIOS n’est pas un AMI. Dommage…
FAUX. J’ai personnellement une vieille CM ne reconnaissant pas les SSD NVME et qui boote sur un NVME …
Bonjour, j’ai l’impression que vous vous êtes contredit dans la même phrase : si votre vieille CM ne reconnait pas les SSD NVME, je ne vois pas comment elle boote dessus. En outre, n’hésitez pas à développer ce que vous pensez être faux. Dans le point 3.1 je développe justement un workaround pour les vieilles CM comme vous, mais le boot se fait sur un autre support, pour utiliser ensuite le NVMe comme partition système.
Effectivement je n’ai pas été clair. Le faux évoque le fait qu’une vieille carte mère n’étant pas uefi peut démarrer sur un nvme.
Votre affirmation « si vous n’avez pas de BIOS UEFI, vous ne pourrez pas booter sur un SSD NVMe. » est erronée. ». Cela se fait via un intermédiaire qui lui est reconu ; une clé USB qui lance un linux sur nvme. Donc ne jetez pas encore vos CM … ceci dit, en l’espèce, un bon ssd reste une bien meilleure option 😉
Ah, mais je maintiens que si vous n’avez pas de BIOS UEFI, vous ne pourrez pas booter sur un SSD NVMe. Nous utilisons un intermédiaire comme vous dites, c’est sur celui-ci que nous bootons et non le NVMe.
Je vais clarifier dans l’article que la partition système peut se trouver sur le NVMe mais pas le /boot.
Bonne soirée
Pas tout à fait vrai.
J’ai réussi et cela fonctionne parfaitement, sur un HP Z230 par exemple.
https://github.com/matDOTviguier/z230nvmebios/wiki
Bonjour,
Je vous remercie pour cette contribution à très forte valeur ajoutée, bien que je ne l’aie pas encore testée.
Malgré leur conception de plus de 10 ans, j’apprécie ces petites stations z230 pour leurs taille, leur compatibilité RAM ECC, leurs sorties DisplayPort, leurs BIOS relativement à jour, leurs pièces détachées facilement trouvables, etc. La durabilité de ce matériel me permet aussi de contenir ma production de déchets électroniques.
Puisque vous me semblez être un expert j’ai deux questions pour vous : peut-on faire mieux qu’un Xeon E3-1285L v3 (mon choix jusqu’alors) et est-ce que la sortie vidéo avec cet APU Intel HD Graphics P4600 va bien jusqu’à 4K ?
Et bien que cela ne soit pas le sujet, si vous ne connaissez pas les HBA NVMe de chez HighPoint je vous conseille de regarder leur catalogue 🙂
Bonne journée