Amazon Elastic Compute Cloud
Guide de l'utilisateur pour les instances Linux

Amazon EBS et NVMe sur des instances Linux

Les volumes EBS sont exposés en tant que périphériques de stockage en mode bloc NVMe sur les instances basées sur Nitro. Les noms de périphériques sont /dev/nvme0n1, /dev/nvme1n1, etc. Les noms du périphérique que vous spécifiez dans un mappage de périphérique de stockage en mode bloc sont modifiés par les noms du périphérique NVMe (/dev/nvme[0-26]n1). Le pilote du périphérique de stockage en mode bloc peut attribuer les noms du périphérique NVMe dans un autre ordre que celui que vous avez spécifié pour les volumes dans le mappage de périphérique de stockage en mode bloc.

Note

Les garanties de performance EBS définies sur la page Description détaillée d'Amazon EBS s'appliquent quelle que soit l'interface du périphérique de stockage en mode bloc.

Installation ou mise à niveau du pilote NVMe

Pour accéder aux volumes NVMe, les pilotes NVMe doivent être installés. Les instances peuvent prendre en charges les volumes EBS NVMe, les volumes de stockage d'instance NVMe, les deux types de volumes NVMe ou aucun volume NVMe. Pour plus d'informations, consultez Résumé des fonctions de réseautage et de stockage.

Les AMI suivantes incluent les pilotes NVMe requis :

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 ou version ultérieure

  • Red Hat Enterprise Linux 7.4 ou version ultérieure

  • SUSE Linux Enterprise Server 12 SP2 ou version ultérieure

  • CentOS 7 ou version ultérieure

  • FreeBSD 11.1 ou version ultérieure

Pour plus d'informations sur les pilotes NVMe des instances Windows, consultez Amazon EBS et NVMe sur des instances Windows dans le Amazon EC2 Guide de l'utilisateur pour les instances Windows.

Si vous utilisez une AMI qui n'inclut pas le pilote NVMe, vous pouvez installer le pilote sur votre instance à l'aide de la procédure suivante.

Pour installer le pilote NVMe

  1. Connectez-vous à votre instance.

  2. Mettez à jour le cache de votre package pour obtenir les mises à jour de packages nécessaires, comme suit.

    • Pour Amazon Linux 2, Amazon Linux, CentOS et Red Hat Enterprise Linux :

      [ec2-user ~]$ sudo yum update -y
    • Pour Ubuntu et Debian :

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 et versions ultérieures incluent le package linux-aws, qui contient les pilotes NVMe et ENA requis par les instances basées sur Nitro. Mettez à niveau le package linux-aws pour recevoir la version la plus récente, comme suit :

    [ec2-user ~]$ sudo apt-get upgrade -y linux-aws

    Pour Ubuntu 14.04, vous pouvez installer le package linux-aws le plus récent, comme suit :

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. Redémarrez votre instance pour charger la dernière version du noyau.

    sudo reboot
  5. Reconnectez-vous à votre instance après son redémarrage.

Identification du périphérique EBS

EBS utilise la virtualisation d'E/S d'une racine unique (SR-IOV) afin de fournir des volumes attachés sur les instances basées sur Nitro à l'aide de la spécification NVMe. Ces périphériques dépendent des pilotes NVMe standard du système d'exploitation. Habituellement, ces pilotes détectent les périphériques attachés en analysant le bus PCI au démarrage de l'instance, puis créent des nœuds de périphériques selon l'ordre dans lequel les périphériques répondent, et non selon la spécification des périphériques dans le mappage de périphérique de stockage en mode bloc. Sous Linux, les périphériques NVMe sont nommés selon le modèle /dev/nvme<x>n<y>, où <x> correspond à l'ordre d'énumération et, pour EBS, <y> correspond à 1. Lors de démarrages consécutifs de l'instance, il arrive que les périphériques répondent à la détection dans un ordre différent, d'où un changement de nom des périphériques.

Nous vous recommandons d'utiliser des identificateurs stables pour les volumes EBS au sein de votre instance, par exemple :

  • Pour les instances basées sur Nitro, les mappages de périphériques de stockage en mode bloc spécifiés dans la console Amazon EC2 lorsque vous attachez un volume EBS ou durant les appels de l'API AttachVolume ou RunInstances sont capturés dans le champ de données propre au fournisseur de l'identification du contrôleur NVMe. Avec les AMI Amazon Linux ultérieures à la version 2017.09.01, nous fournissons une règle udev qui lit ces données et crée un lien symbolique vers le mappage de périphérique de stockage en mode bloc.

  • Les volumes EBS NVMe ont l'ID de volume EBS comme numéro de série dans l'identification du périphérique.

  • Lors du formatage d'un périphérique, un UUID est généré, qui persiste pendant toute la durée de vie du système de fichiers. Il est possible de spécifier une étiquette de périphérique au même moment. Pour de plus amples informations,veuillez consulter Rendre un volume Amazon EBS disponible à l'utilisation sur le Linux et Démarrage à partir du mauvais volume.

AMI Amazon Linux

Avec l'AMI Amazon Linux 2017.09.01 ou ultérieure (y compris Amazon Linux 2), vous pouvez exécuter la commande ebsnvme-id comme suit afin de mapper le nom de périphérique NVMe à un ID de volume et un nom de périphérique :

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /dev/sdf

Amazon Linux crée également un lien symbolique entre le nom du périphérique du mappage de périphérique de stockage en mode bloc (par exemple, /dev/sdf) et le nom du périphérique NVMe.

Autres AMI Linux

Avec la version 4.2 ou une version ultérieure du noyau, vous pouvez exécuter la commande nvme id-ctrl comme suit pour mapper un périphérique NVMe à un ID de volume. Commencez par installer le package de ligne de commande NVMe, nvme-cli, à l'aide des outils de gestion du package pour votre distribution Linux.

L'exemple suivant permet d'obtenir l'ID de volume et le nom de périphérique. Le nom de périphérique est disponible via une extension du contrôleur NVMe spécifique au fournisseur (octets 384:4095 de l'identification du contrôleur) :

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : vol01234567890abcdef mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."

La commande lsblk répertorie les périphériques disponibles ainsi que leurs points de montage (le cas échéant). Vous pouvez ainsi déterminer quel nom de périphérique utiliser. Dans cet exemple, /dev/nvme0n1p1 est monté comme périphérique racine et /dev/nvme1n1 est attaché mais pas monté.

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:3 0 100G 0 disk nvme0n1 259:0 0 8G 0 disk nvme0n1p1 259:1 0 8G 0 part / nvme0n1p128 259:2 0 1M 0 part

Utilisation des volumes EBS NVMe

Pour formater et monter un volume EBS NVMe, consultez Rendre un volume Amazon EBS disponible à l'utilisation sur le Linux.

Si vous utilisez la version 4.2 du noyau Linux ou une version ultérieure, tout changement apporté à la taille d'un volume EBS NVMe sera automatiquement appliqué à l'instance. Pour des noyaux Linux plus anciens, il se peut que vous ayez besoin de détacher et de rattacher le volume EBS ou de redémarrer l'instance afin que le changement de taille soit effectif. Avec une version 3.19 ou ultérieure du noyau Linux, vous pouvez exécuter la commande hdparm comme suit pour forcer une nouvelle analyse du périphérique NVMe :

[ec2-user ~]$ sudo hdparm -z /dev/nvme1n1

Lorsque vous détachez un volume EBS NVMe, l'instance n'a pas la possibilité de vider les caches du système de fichiers ou les métadonnées avant le détachement du volume. Ainsi, avant de détacher un volume EBS NVMe, veuillez d'abord le synchroniser et le démonter. Si le volume ne se détache pas, vous pouvez tenter une commande force-detach, tel que décrit dans Détacher un volume Amazon EBS d'une instance.

Expiration de l'intégration des E/S

Les volumes EBS associés à des instances basées sur Nitro utilisent le pilote NVMe par défaut fourni par le système d'exploitation. La plupart des systèmes d'exploitation spécifient un délai d'attente pour les opérations d'E/S soumises aux périphériques NVMe. Le délai d'attente par défaut est de 30 secondes. Il peut être modifié à l'aide du paramètre de démarrage nvme_core.io_timeout. Avec des noyaux Linux antérieurs à la version 4.6, ce paramètre est nvme.io_timeout.

Si la latence d'E/S dépasse la valeur de ce paramètre de délai d’attente, le pilote NVMe Linux fait échouer l'E/S et renvoie une erreur dans le système de fichiers ou l'application. Selon l'opération d'E/S, le système de fichiers ou l'application peut retenter l'erreur. Dans certains cas, il est possible de remonter le système de fichiers en lecture seule.

Pour bénéficier d'une expérience similaire à celles des volumes EBS attachés aux instances Xen, nous vous recommandons de définir nvme_core.io_timeout sur la valeur la plus élevée possible. Pour les noyaux actuels, le maximum est 4294967295, alors que pour les noyaux précédents, le maximum est 255. Selon la version de Linux, il se peut que la temporisation soit déjà réglée à la valeur maximale prise en charge. Par exemple, la temporisation est réglée sur 4294967295 par défaut pour les AMI Linux Amazon 2017.09.01 et ultérieures.

Vous pouvez vérifier la valeur maximale pour votre distribution de Linux en écrivant une valeur plus élevée que la valeur maximale suggérée dans /sys/module/nvme_core/parameters/io_timeout et en recherchant l'erreur Numerical result out of range au moment d'enregistrer le fichier.