Aller au contenu

Opérations sur les volumes

Cette page couvre l'ensemble du cycle de vie d'un volume : création, rattachement à une VM, formatage et montage dans le système invité, détachement et suppression. Elle montre aussi comment identifier les volumes à l'intérieur d'une VM lorsque plusieurs sont rattachés.

Créer un volume

Horizon

  1. Accédez à Volumes > Volumes dans la barre latérale gauche.
  2. Cliquez sur Create Volume.
  3. Remplissez le formulaire :
    • Volume Name : un nom descriptif (par exemple data-vol-01).
    • Description : facultative.
    • Volume Source : choisissez No source, empty volume pour un volume vide, ou Snapshot / Image / Volume pour créer à partir d'une source existante.
    • Type : sélectionnez le type de volume (par exemple v-ssd-std). S'il n'est pas indiqué, le type par défaut (v-ssd-std) est utilisé.
    • Size (GB) : la taille souhaitée.
    • Availability Zone : sélectionnez l'AZ correspondant à votre VM.
  4. Cliquez sur Create Volume.

Le volume apparaît dans la liste avec le statut available dès qu'il est prêt.

CLI

openstack volume create data-vol-01 \
    --size 100 \
    --type v-ssd-std \
    --availability-zone ch-zh1-az2

Vérifiez que le volume est prêt :

openstack volume show data-vol-01 -c status -c id

Le statut passe de creating à available.

Ansible

- os_volume:
    display_name: "data-vol-01"
    size: 100
    volume_type: "v-ssd-std"
    availability_zone: "ch-zh1-az2"

Terraform

resource "openstack_blockstorage_volume_v3" "data_vol_01" {
    name              = "data-vol-01"
    size              = 100
    volume_type       = "v-ssd-std"
    availability_zone = "ch-zh1-az2"
}

Rattacher un volume à une instance

Un volume doit être au statut available avant de pouvoir être rattaché. Une fois rattaché, il se comporte comme un disque supplémentaire dans la VM.

Horizon

  1. Accédez à Volumes > Volumes.
  2. Recherchez votre volume et ouvrez le menu d'actions (flèche à droite).
  3. Sélectionnez Manage Attachments.
  4. Cliquez sur + Attach Volume.
  5. Sélectionnez l'instance dans la liste déroulante.
  6. Cliquez sur Attach Volume.

CLI

openstack server add volume <INSTANCE-NAME> <VOLUME-NAME>

Exemple :

openstack server add volume my-vm data-vol-01

Note

L'argument facultatif --device, qui permet de spécifier un nom de périphérique (par exemple /dev/sdb), ne doit pas être utilisé : il ne fonctionne pas de manière fiable et pourrait être supprimé dans de futures versions d'OpenStack.

Formater et monter le volume

Après le rattachement, connectez-vous à la VM pour identifier, formater et monter le nouveau disque.

Identifier le disque

lsblk

Sortie :

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
└─sda1   8:1    0   20G  0 part /
sdb      8:16   0  100G  0 disk

Le nouveau volume apparaît comme sdb (100 GB dans cet exemple).

Partitionner et formater

Installez parted si nécessaire :

sudo apt-get install parted   # Debian/Ubuntu
sudo yum install parted       # RHEL/CentOS

Créez une partition et un système de fichiers :

sudo parted -s /dev/sdb mklabel msdos mkpart primary ext4 0% 100%
sudo mkfs -t ext4 -L datavol /dev/sdb1

Tip

Utiliser un label (-L datavol) facilite le montage et le suivi du volume par la suite : vous n'avez pas besoin de connaître le nom exact du périphérique, et /etc/fstab peut référencer LABEL=datavol au lieu de /dev/sdb1.

Pour XFS au lieu d'ext4 :

sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs -L datavol /dev/sdb1

Monter

sudo mkdir -p /mnt/data
sudo mount -L datavol /mnt/data

Vérifiez :

df -h /mnt/data

Persistance après redémarrage

Ajoutez une entrée dans /etc/fstab pour que le volume soit monté automatiquement au démarrage :

LABEL=datavol /mnt/data ext4 noatime,nodiratime,user_xattr,nofail 0 0

Warning

Utilisez l'option nofail pour éviter que la VM ne bloque le processus de démarrage si le volume n'est pas disponible (par exemple en raison de problèmes réseau). Ne retirez nofail que si vous souhaitez que la VM refuse de démarrer sans le volume.

Note

L'option de montage nobarrier n'est pas recommandée. Les volumes sont accédés via un cache ; ignorer l'ordre correct des validations du journal peut corrompre votre système de fichiers en cas de problème matériel.

Détacher et supprimer un volume

Détacher

Avant de détacher le volume, démontez-le dans la VM :

sudo umount /mnt/data

Détachez ensuite le volume via Horizon ou la CLI.

Horizon : accédez à Volumes > Volumes, ouvrez le menu d'actions du volume, sélectionnez Manage Attachments et cliquez sur Detach Volume.

CLI :

openstack server remove volume <INSTANCE-NAME> <VOLUME-NAME>

Warning

Détacher un volume encore monté est techniquement possible, mais les accès IO ultérieurs à ce périphérique dans la VM renverront des erreurs d'I/O. Démontez toujours le volume en premier.

Après le détachement, vérifiez que le volume est revenu au statut available :

openstack volume show <VOLUME-NAME> -c status

Supprimer

Une fois détaché, le volume peut être supprimé. Cette opération est irréversible.

openstack volume delete <VOLUME-NAME>

Le volume passe au statut deleting et disparaît de openstack volume list.

Identifier les volumes à l'intérieur d'une VM

Lorsque plusieurs volumes sont rattachés à la même instance, vous pouvez associer les ID de volume OpenStack aux périphériques de bloc dans le système invité.

Les volumes apparaissent sous /dev/disk/by-id/ sous la forme scsi-0QEMU_QEMU_HARDDISK_<ID>, où <ID> est un préfixe de l'ID de volume OpenStack.

Exemple, côté OpenStack :

openstack volume show data-vol-01 -c id -c attachments
| id          | 71bd47d8-b51e-4f12-9c51-0445fc36c9e4             |
| attachments | Attached to my-vm on /dev/sdb                     |

Dans la VM :

ls /dev/disk/by-id/
scsi-0QEMU_QEMU_HARDDISK_71bd47d8-b51e-4f12-9

Le fragment 71bd47d8-b51e-4f12-9 correspond au début de l'ID de volume 71bd47d8-b51e-4f12-9c51-0445fc36c9e4.