Ajouter un disque à une machine virtuelle Linux

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles

Cet article vous explique comment attacher un disque persistant à votre machine virtuelle afin de conserver vos données, et ce, même si votre machine virtuelle est remise en service en raison d’une opération de maintenance ou de redimensionnement.

Attacher un nouveau disque à une machine virtuelle

Si vous souhaitez ajouter un nouveau disque vide sur votre machine virtuelle, utilisez la commande az vm disk attach avec le paramètre --new. Si votre machine virtuelle est dans une Zone de disponibilité, le disque est automatiquement créé dans la même zone que la machine virtuelle. Pour plus d'informations, consultez Vue d’ensemble des zones de disponibilité. L’exemple suivant crée un disque nommé myDataDisk avec une taille de 50 Go :

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

Latence plus faible

Dans certaines régions, la latence d’attachement de disque a été réduite. Vous pourrez donc constater une amélioration pouvant atteindre jusqu’à 15 %. Cela est utile si vous avez des basculements planifiés/non planifiés entre machines virtuelles, si vous mettez à l’échelle votre charge de travail ou si vous exécutez une charge de travail avec état à grande échelle telle qu’Azure Kubernetes Service. Cependant, cette amélioration est limitée à la commande d’attachement de disque explicite, az vm disk attach. Vous ne constaterez pas d’amélioration des performances si vous appelez une commande qui peut implicitement effectuer un attachement, comme az vm update. Vous n’avez rien besoin de faire sinon appeler la commande d’attachement explicite pour voir cette amélioration.

Il est actuellement possible de bénéficier d’une latence réduite dans chaque région publique, à l’exception des suivantes :

  • Centre du Canada
  • USA Centre
  • USA Est
  • USA Est 2
  • États-Unis - partie centrale méridionale
  • USA Ouest 2
  • Allemagne Nord
  • Inde Ouest Jio
  • Europe Nord
  • Europe Ouest

Association d'un disque existant

Pour attacher un disque existant, rechercher l’ID de disque et transmettez-le à la commande az vm disk attach. L’exemple suivant interroge pour un disque nommé myDataDisk dans myResourceGroup, puis l’attache à la machine virtuelle nommée myVM :

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

Formater et monter le disque

Vous devez exécuter SSH dans votre machine virtuelle Azure afin de partitionner, de formater et de monter votre nouveau disque pour que votre machine virtuelle Linux puisse l’utiliser. Pour plus d’informations, consultez l’article Utilisation de SSH avec Linux sur Azure. L’exemple suivant établit une connexion à une machine virtuelle à l’aide de l’adresse IP publique 10.123.123.25 avec le nom d’utilisateur azureuser :

ssh azureuser@10.123.123.25

Recherche du disque

Une fois connecté à votre machine virtuelle, recherchez le disque. Dans cet exemple, nous utilisons lsblk pour répertorier les disques.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

Le résultat ressemble à l’exemple suivant :

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

sdc correspond au disque que nous recherchons, car il fait 50 G. Si vous ajoutez plusieurs disques et ne savez pas duquel il s’agit uniquement en vous basant sur la taille, vous pouvez accéder à la page des machines virtuelles du portail, sélectionner Disques et vérifier le numéro d’unité logique (LUN) du disque sous Disques de données. Comparez le numéro LUN du portail au dernier nombre de la partie HTCL de la sortie, qui correspond au numéro d’unité logique (LUN). Une autre option consiste à répertorier le contenu du répertoire /dev/disk/azure/scsi1 :

ls -l /dev/disk/azure/scsi1

La sortie doit ressembler à celle de l’exemple suivant :

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

Formater le disque

Pour formater le disque, utilisez parted. Si la taille du disque est supérieure ou égale à deux tébioctets (Tio), vous devez utiliser le partitionnement GPT. Si elle est inférieure à 2 Tio, vous pouvez utiliser le partitionnement MBR ou GPT.

Notes

Il est recommandé d’utiliser la dernière version de parted disponible pour votre distribution. Si la taille du disque est supérieure ou égale à 2 Tio, vous devez utiliser le partitionnement GPT. Si la taille du disque est inférieure à 2 Tio, vous pouvez utiliser le partitionnement MBR ou GPT.

L’exemple suivant utilise parted sur /dev/sdc, où le premier disque de données se trouve généralement sur la plupart des machines virtuelles. Remplacez sdc par l’option adaptée à votre disque. Nous le formatons également à l’aide du système de fichiers XFS.

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

Utilisez l’utilitaire partprobe pour vérifier que le noyau tient compte de la nouvelle partition et du nouveau système de fichiers. Si vous ne parvenez pas à utiliser partprobe, les commandes blkid ou lsblk ne retournent pas immédiatement l’UUID du nouveau système de fichiers.

Monter le disque

À présent, créez un répertoire afin de monter le système de fichiers à l’aide de mkdir. L'exemple suivant crée un répertoire sous /datadrive :

sudo mkdir /datadrive

Utilisez mount pour monter le système de fichiers. L'exemple suivant monte la partition /dev/sdc1 sur le point de montage /datadrive :

sudo mount /dev/sdc1 /datadrive

Rendre le montage permanent

Pour vous assurer que le lecteur est remonté automatiquement après un redémarrage, vous devez l’ajouter au fichier /etc/fstab. Il est aussi vivement recommandé d’utiliser l’UUID (identificateur unique universel) dans /etc/fstab pour faire référence au lecteur plutôt que de se contenter du nom de l’appareil (par exemple /dev/sdc1). Si le système d’exploitation détecte une erreur disque pendant le démarrage, l’utilisation de l’UUID évite que le disque incorrect ne soit monté sur un emplacement donné. Les disques de données restants reçoivent alors les mêmes ID d’appareil. Pour rechercher l’UUID du nouveau lecteur, utilisez l’utilitaire blkid :

sudo blkid

La sortie doit ressembler à celle-ci :

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

Notes

si vous ne modifiez pas correctement le fichier /etc/fstab, il se peut que le système ne puisse plus démarrer. En cas de doute, reportez-vous à la documentation de la distribution pour obtenir des informations sur la modification adéquate de ce fichier. Il est par ailleurs vivement recommandé de créer une sauvegarde du fichier /etc/fstab avant de le modifier.

Ouvrez ensuite le fichier /etc/fstab dans un éditeur de texte. Ajoutez une ligne à la fin du fichier, en utilisant la valeur UUID de l’appareil /dev/sdc1 créé lors des étapes précédentes et le point de montage /datadrive. Avec l’exemple de cet article, la nouvelle ligne se présente comme suit :

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

Quand vous avez terminé de modifier le fichier, enregistrez et fermez l’éditeur.

Vous pouvez également exécuter la commande suivante pour ajouter le disque au fichier /etc/fstab :

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

Notes

La suppression ultérieure d’un disque de données sans modifier fstab pourrait entraîner l’échec du démarrage de la machine virtuelle. La plupart des distributions fournissent les options fstab nofail et/ou nobootwait. Ces options permettent à un système de démarrer même si le disque n’est pas monté au moment du démarrage. Pour plus d’informations sur ces paramètres, consultez la documentation de votre distribution.

L’option nofail garantit que la machine virtuelle démarre même si le système de fichiers est endommagé ou si le disque n’existe pas au moment du démarrage. Sans cette option, vous pouvez être confronté au comportement décrit dans Cannot SSH to Linux VM due to FSTAB errors (Connexion SSH vers machine virtuelle Linux impossible en raison d’erreurs FSTAB)

La console série de machine virtuelle Azure peut servir pour accéder à la console sur votre machine virtuelle si la modification de fstab a entraîné un échec de démarrage. Plus de détails dans la documentation relative à la console série.

Prise en charge de TRIM/UNMAP pour Linux dans Azure

Certains noyaux Linux prennent en charge les opérations TRIM/UNMAP pour ignorer les blocs inutilisés sur le disque. Cette fonctionnalité est particulièrement utile pour informer Azure que des pages supprimées ne sont plus valides et peuvent être ignorées. Cette fonctionnalité permet d’économiser de l’argent sur les disques qui sont facturés en fonction de la quantité de stockage consommée, comme les disques standard non managés et les captures instantanées de disque.

Il existe deux façons d’activer la prise en charge de TRIM sur votre machine virtuelle Linux. Comme d’habitude, consultez votre distribution pour connaître l’approche recommandée :

  • Utilisez l’option de montage discard dans /etc/fstab, par exemple :

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • Dans certains cas, l’option discard peut avoir un impact sur la performance. Vous pouvez également exécuter la commande fstrim manuellement à partir de la ligne de commande ou l’ajouter à votre crontab pour l’exécuter régulièrement :

sudo apt install util-linux
sudo fstrim /datadrive

Dépannage

Lorsque vous ajoutez des disques de données à une machine virtuelle Linux, vous pouvez rencontrer des erreurs si un disque n’existe pas sur le LUN 0. Si vous ajoutez un disque manuellement à l’aide de la commande az vm disk attach -new et que vous spécifiez un LUN (--lun) au lieu de laisser la plateforme Azure déterminer le LUN approprié, vérifiez qu’un disque existe déjà ou existera sur le LUN 0.

Prenons l’exemple suivant montrant un extrait de code de sortie de lsscsi:

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

Les deux disques de données existent sur le LUN 0 et sur le LUN 1 (la première colonne dans les détails de sortie lsscsi[host:channel:target:lun]). Les deux disques doivent être accessibles à partir de la machine virtuelle. Si vous aviez manuellement spécifié le premier disque à ajouter au LUN 1 et le deuxième disque au LUN 2, les disques peuvent ne pas s’afficher correctement à partir de votre machine virtuelle.

Notes

La valeur Azure host est égale à 5 dans ces exemples, mais elle peut varier selon le type de stockage que vous sélectionnez.

Ce comportement de disque n’est pas dû à un problème d’Azure, mais dépend de la façon dont le noyau Linux suit les spécifications SCSI. Lorsque le noyau Linux analyse le bus SCSI à la recherche des périphériques connectés, un périphérique doit être présent sur le LUN 0 pour que le système puisse continuer l’analyse des autres périphériques. Par conséquent :

  • Examinez la sortie de lsscsi après l’ajout d’un disque de données pour vérifier que vous disposez d’un disque sur le LUN 0.
  • Si le disque ne s’affiche pas correctement dans votre machine virtuelle, vérifiez qu'un disque existe sur le LUN 0.

Étapes suivantes