Étendre un volume EBS sur EC2 sans interruption de service

  • 28 novembre 2025
  • 3 min. à lire

Disque plein à 96% sur votre runner CI/CD ou serveur de prod ? Pas de panique. AWS permet d'étendre un volume EBS à chaud, sans arrêter l'instance. Voici la procédure complète.

Un serveur EC2 qui affiche 96% d’utilisation disque, c’est le genre d’alerte qui fait accélérer le rythme cardiaque. Bonne nouvelle : depuis 2017, AWS permet d’étendre les volumes EBS à chaud, sans downtime ni redémarrage.

L’extension à chaud d’un volume EBS est une opération courante et sans risque, à condition de suivre les étapes dans l’ordre.

Prérequis et précautions

Avant de modifier quoi que ce soit :

Créez un snapshot du volume. C’est rapide, ça ne coûte presque rien, et ça peut sauver votre journée si quelque chose tourne mal.

# Identifier le volume à étendre
df -h

# Exemple de sortie
Filesystem       Size  Used Avail Use% Mounted on
/dev/root         29G   27G  1.2G  96% /

Dans la console AWS, le snapshot se crée en quelques clics : EC2 → Volumes → Actions → Créer un instantané.

Étape 1 : Étendre le volume côté AWS

Via la Console AWS

  1. Ouvrez la console EC2 → Elastic Block StoreVolumes
  2. Sélectionnez le volume à étendre
  3. ActionsModify Volume
  4. Entrez la nouvelle taille (ex : 70 Go au lieu de 30 Go)
  5. Confirmez la modification

Le volume passe en état modifying, puis optimizing. L’optimisation peut prendre du temps (parfois plusieurs heures pour les gros volumes), mais le nouvel espace est disponible dès que l’état quitte modifying.

Via AWS CLI

# Identifier l'ID du volume
aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=i-xxxxxxxxx" \
    --query "Volumes[*].{ID:VolumeId,Size:Size,State:State}" --output table

# Étendre le volume à 70 Go
aws ec2 modify-volume --volume-id vol-xxxxxxxxx --size 70

# Suivre la progression
aws ec2 describe-volumes-modifications --volume-id vol-xxxxxxxxx \
    --query "VolumesModifications[*].{Progress:Progress,State:ModificationState}" --output table

Étape 2 : Étendre la partition Linux

Une fois le volume étendu côté AWS, Linux voit le nouvel espace mais la partition ne l’utilise pas encore.

Vérifier que le nouvel espace est visible

lsblk
# Sortie attendue : le disque affiche la nouvelle taille
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1      259:0    0   70G  0 disk 
├─nvme0n1p1  259:1    0   29G  0 part /        # ← Partition encore à 29G
├─nvme0n1p14 259:2    0    4M  0 part 
├─nvme0n1p15 259:3    0  106M  0 part /boot/efi
└─nvme0n1p16 259:4    0  913M  0 part /boot

Le disque nvme0n1 fait 70G, mais la partition nvme0n1p1 est toujours à 29G.

Étendre la partition avec growpart

# Installer growpart si nécessaire (généralement déjà présent)
sudo apt install cloud-guest-utils   # Debian/Ubuntu
sudo yum install cloud-utils-growpart # Amazon Linux/RHEL

# Étendre la partition 1 du disque nvme0n1
sudo growpart /dev/nvme0n1 1
# Sortie attendue
CHANGED: partition=1 start=227328 old: size=60887999 end=61115327 new: size=146673631 end=146900959

Vérifiez avec lsblk que la partition a bien été étendue.

Étape 3 : Étendre le système de fichiers

La partition est étendue, mais le filesystem doit encore être agrandi pour utiliser l’espace.

Identifier le type de filesystem

df -Th /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/root      ext4   29G   27G  1.2G  96% /

Pour ext4 (Ubuntu, Debian)

sudo resize2fs /dev/nvme0n1p1
# Sortie attendue
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/nvme0n1p1 is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 9
The filesystem on /dev/nvme0n1p1 is now 18334203 (4k) blocks long.

Pour xfs (Amazon Linux, RHEL, CentOS)

sudo xfs_growfs /

XFS utilise le point de montage (/) plutôt que le device.

Vérification finale

df -h /
Filesystem       Size  Used Avail Use% Mounted on
/dev/root         67G   27G   41G  40% /

De 96% à 40% d’utilisation. Mission accomplie.

Cas particuliers

Volume root vs volume data

La procédure est identique pour les volumes root (/) et les volumes data montés séparément. La seule différence : pour un volume data, vous pouvez le démonter, ce qui simplifie certaines opérations.

Disques nommés /dev/xvda vs /dev/nvme0n1

Les instances récentes (Nitro) utilisent le naming nvme. Les anciennes instances utilisent xvda, xvdb, etc.

# Instances Nitro (t3, m5, c5, etc.)
sudo growpart /dev/nvme0n1 1
sudo resize2fs /dev/nvme0n1p1

# Anciennes instances (t2, m4, etc.)
sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1

Volume sans partition (rare)

Certains volumes n’ont pas de table de partition — le filesystem est directement sur le device. Dans ce cas, sautez l’étape growpart :

# Vérifier : si lsblk ne montre pas de partition enfant
lsblk
# nvme1n1    259:1    0  100G  0 disk /data  ← Pas de partition

# Étendre directement le filesystem
sudo resize2fs /dev/nvme1n1   # ext4
sudo xfs_growfs /data          # xfs

Automatiser la surveillance

Pour éviter de vous retrouver à nouveau à 96%, mettez en place une alerte CloudWatch :

# Créer une alarme CloudWatch pour l'espace disque
aws cloudwatch put-metric-alarm \
    --alarm-name "DiskSpaceAlert-i-xxxxxxxxx" \
    --metric-name "disk_used_percent" \
    --namespace "CWAgent" \
    --statistic Average \
    --period 300 \
    --threshold 80 \
    --comparison-operator GreaterThanThreshold \
    --dimensions Name=InstanceId,Value=i-xxxxxxxxx Name=path,Value=/ \
    --evaluation-periods 2 \
    --alarm-actions arn:aws:sns:eu-west-1:123456789:alerts

Cela nécessite l’agent CloudWatch installé sur l’instance. Alternativement, un simple cron avec notification :

# /etc/cron.daily/check-disk-space
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
    echo "Alerte: utilisation disque à ${USAGE}%" | mail -s "Disk Alert $(hostname)" admin@example.com
fi

Récapitulatif des commandes

# 1. Snapshot (console AWS ou CLI)
aws ec2 create-snapshot --volume-id vol-xxx --description "Backup avant extension"

# 2. Étendre le volume (console AWS ou CLI)
aws ec2 modify-volume --volume-id vol-xxx --size 70

# 3. Vérifier que Linux voit le nouvel espace
lsblk

# 4. Étendre la partition
sudo growpart /dev/nvme0n1 1

# 5. Étendre le filesystem
sudo resize2fs /dev/nvme0n1p1    # ext4
# ou
sudo xfs_growfs /                 # xfs

# 6. Vérifier
df -h /

L’extension de volume EBS à chaud est une opération devenue banale dans l’écosystème AWS. Pas de downtime, pas de migration de données, juste quelques commandes. Le plus long reste souvent l’optimisation côté AWS, qui tourne en arrière-plan sans impact sur vos opérations.

Pensez au snapshot avant, pensez au monitoring après. Entre les deux, l’opération ne prend que quelques minutes.

Nicolas Verlhiac

Nicolas Verlhiac

Full stack software expert | E-commerce & CRM

Nous sommes spécialisés dans la création de solutions technologiques innovantes qui aident les entreprises à rester compétitives et à prospérer.

tracking-thumb