DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 14 / 474 min readUpdated October 7, 2026

EBS : volumes, snapshots et types de disque

À la fin de ce tutoriel, vous saurez attacher un volume EBS gp3 à une EC2, le formater, prendre un snapshot, et restaurer un volume depuis ce snapshot — en Region ca-central-1.

Niveau : Débutant · Temps estimé : 55–70 min · Versions testées : EC2/EBS Console 2026, Amazon Linux 2023, AWS CLI v2 · Dernière vérification : 2026-09-11 · Region lab : ca-central-1

← Précédent : EC2 + SSM · Hub : Démarrer avec AWS

Publish : HOLD

Prérequis

  • Profil CLI lab et utilisateur admin-lab (Démarrer avec AWS, IAM)
  • Savoir lancer / terminer une EC2 et ouvrir SSM (EC2 + SSM)
  • Region fixée : ca-central-1 (Canada) pour toute la série lab
  • Budget d’alerte actif
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
# PowerShell : $env:AWS_PROFILE='lab'; $env:AWS_DEFAULT_REGION='ca-central-1'

Coût estimé lab (ca-central-1, ordres de grandeur 2026) :

Ressource Ordre de grandeur Remarque
Volume gp3 10 Gio ~0,08–0,10 USD/mois hors Free Tier Facturé tant qu’il existe (même détaché)
Snapshot Coût au Go stocké (incrémental) Première snap ≈ taille utilisée ; suivantes delta
EC2 t3.micro Free Tier / ~0,01 USD/h Terminez après le lab
Volume root 8 Go Inclus avec l’instance Supprimé avec terminate (selon DeleteOnTermination)

Free Tier (12 premiers mois) inclut souvent un quota EBS limité — supprimez volumes + snapshots en fin de lab. Un volume « available » oublié facture tous les mois.

Ce que nous allons construire

EC2 lab-ec2-ebs (Amazon Linux 2023) — ca-central-1a
├── Volume root (créé avec l’AMI)
└── Volume data /dev/xvdf → nvme1n1 (gp3, 10 Gio, encrypté)
    ├── formaté xfs, monté sur /data
    ├── Snapshot snap-… (sauvegarde point-in-time)
    └── Volume restauré /dev/xvdg → nvme2n1 depuis le snapshot

(Schéma — alt : « EC2 avec volume EBS data, snapshot et restauration ».)

Rappel certif : un volume EBS vit dans une seule AZ. Vous ne pouvez pas attacher un volume créé en ca-central-1a à une instance en ca-central-1b. Les snapshots, eux, sont régionaux : vous pouvez créer un nouveau volume dans une autre AZ de la même Region à partir du snapshot.

Étape 1 — Choisir le type de volume (repères SA)

Type Usage Notes 2026
gp3 Usage général (défaut lab) IOPS et débit réglables indépendamment de la taille
gp2 Ancien général Préférer gp3 pour les nouveaux volumes
io2 Bases critiques IOPS provisionnés élevés
st1 / sc1 Throughput / froid Rarement pour un OS boot
io2 Block Express Ultra perf Hors Free Tier typique

Pour ce lab : gp3, 10 Gio, chiffrement activé (KMS géré AWS par défaut).

Piège : ne pas confondre taille (Gio) et performance. Sur gp3, 3000 IOPS de base suffisent largement pour un lab ; provisionner 16000 IOPS « pour voir » coûte cher sans bénéfice pédagogique.

Étape 2 — Instance de travail (si besoin)

Si vous n’avez plus d’EC2 running :

AMI_ID=$(aws ssm get-parameters 
  --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 
  --query 'Parameters[0].Value' --output text 
  --region ca-central-1 --profile lab)

SG_ID=$(aws ec2 describe-security-groups 
  --filters Name=group-name,Values=sg-lab-web 
  --query 'SecurityGroups[0].GroupId' --output text 
  --region ca-central-1 --profile lab)

# Si SG absent (None), recréez-le (tuto EC2) avant de continuer.

INSTANCE_ID=$(aws ec2 run-instances 
  --image-id "$AMI_ID" 
  --instance-type t3.micro 
  --security-group-ids "$SG_ID" 
  --iam-instance-profile Name=lab-ec2-profile 
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lab-ec2-ebs}]' 
  --region ca-central-1 --profile lab 
  --query 'Instances[0].InstanceId' --output text)

echo "$INSTANCE_ID"
aws ec2 wait instance-running --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab

Récupérez AZ (critique pour create-volume) :

AZ=$(aws ec2 describe-instances 
  --instance-ids "$INSTANCE_ID" 
  --query 'Reservations[0].Instances[0].Placement.AvailabilityZone' 
  --output text 
  --region ca-central-1 --profile lab)

echo "AZ=$AZ"

Exemple : ca-central-1a. Exportez aussi INSTANCE_ID si vous l’avez noté à la main.

Étape 3 — Créer et attacher le volume data

VOLUME_ID=$(aws ec2 create-volume 
  --availability-zone "$AZ" 
  --size 10 
  --volume-type gp3 
  --encrypted 
  --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=lab-ebs-data}]' 
  --query VolumeId --output text 
  --region ca-central-1 --profile lab)

echo "$VOLUME_ID"

aws ec2 wait volume-available --volume-ids "$VOLUME_ID" 
  --region ca-central-1 --profile lab

aws ec2 attach-volume 
  --volume-id "$VOLUME_ID" 
  --instance-id "$INSTANCE_ID" 
  --device /dev/xvdf 
  --region ca-central-1 --profile lab

Vérification état :

aws ec2 describe-volumes 
  --volume-ids "$VOLUME_ID" 
  --region ca-central-1 --profile lab 
  --query 'Volumes[0].{State:State,AZ:AvailabilityZone,Type:VolumeType,Enc:Encrypted,Attach:Attachments[0].State}'

Attendu : State=in-use, Attach=attached, Enc=True.

Console équivalente : EC2 → Volumes → Create volume → même AZ que l’instance → Attach → device /dev/xvdf.

Étape 4 — Formater et monter (via SSM)

Ouvrez une session SSM (aws ssm start-session --target "$INSTANCE_ID" …), puis :

# Voir les disques (nvme sur la plupart des types Nitro)
lsblk

# Souvent le volume apparaît comme /dev/nvme1n1 plutôt que xvdf
# Identifiez le disque SANS partition root (nvme0n1 = root typique)
sudo mkfs -t xfs /dev/nvme1n1
sudo mkdir -p /data
sudo mount /dev/nvme1n1 /data
echo "hello-ebs" | sudo tee /data/demo.txt
df -h /data
cat /data/demo.txt

Piège Nitro : le nom --device /dev/xvdf est un alias côté API ; le noyau expose /dev/nvme1n1. Ne formatez jamais nvme0n1 (root) par erreur — vérifiez la taille (~10G) dans lsblk.

Persistance au reboot (fstab avec UUID) :

UUID=$(sudo blkid -s UUID -o value /dev/nvme1n1)
echo "UUID=$UUID /data xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
sudo umount /data && sudo mount -a
cat /data/demo.txt

nofail évite un boot bloqué si le volume data est détaché.

Étape 5 — Snapshot

Un snapshot est une sauvegarde incrémentale stockée dans S3 (géré par AWS), régional. Pour un lab propre, arrêtez les écritures ou umount si possible ; un snapshot « à chaud » est cohérent au niveau bloc mais pas forcément applicatif (bases = flush d’abord).

SNAP_ID=$(aws ec2 create-snapshot 
  --volume-id "$VOLUME_ID" 
  --description "lab-ebs-data demo" 
  --tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=lab-ebs-data-snap}]' 
  --query SnapshotId --output text 
  --region ca-central-1 --profile lab)

echo "$SNAP_ID"
aws ec2 wait snapshot-completed --snapshot-ids "$SNAP_ID" 
  --region ca-central-1 --profile lab

aws ec2 describe-snapshots --snapshot-ids "$SNAP_ID" 
  --region ca-central-1 --profile lab 
  --query 'Snapshots[0].{State:State,Progress:Progress,Size:VolumeSize}'

Étape 6 — Restaurer un volume depuis le snapshot

VOLUME_RESTORE=$(aws ec2 create-volume 
  --availability-zone "$AZ" 
  --snapshot-id "$SNAP_ID" 
  --volume-type gp3 
  --encrypted 
  --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=lab-ebs-restore}]' 
  --query VolumeId --output text 
  --region ca-central-1 --profile lab)

aws ec2 wait volume-available --volume-ids "$VOLUME_RESTORE" 
  --region ca-central-1 --profile lab

aws ec2 attach-volume 
  --volume-id "$VOLUME_RESTORE" 
  --instance-id "$INSTANCE_ID" 
  --device /dev/xvdg 
  --region ca-central-1 --profile lab

Sur l’instance (nouveau device, souvent /dev/nvme2n1) :

lsblk
sudo mkdir -p /data-restore
sudo mount /dev/nvme2n1 /data-restore
cat /data-restore/demo.txt
# → hello-ebs

Ne refaites pas mkfs sur le volume restauré : vous effaceriez les données du snapshot. Montez uniquement.

Vous venez de prouver sauvegarde + restauration sans recopier les fichiers à la main. Variante SA : créer le volume restauré dans une autre AZ de ca-central-1 (ex. 1b) pour migrer après panne AZ — le snapshot le permet ; le volume source non.

Étape 7 — Vérification

aws ec2 describe-volumes 
  --filters Name=tag:Name,Values=lab-ebs-data,lab-ebs-restore 
  --region ca-central-1 --profile lab 
  --query 'Volumes[].{Id:VolumeId,Name:Tags[?Key==`Name`]|[0].Value,State:State,Size:Size,AZ:AvailabilityZone}'

aws ec2 describe-snapshots 
  --owner-ids self 
  --filters Name=tag:Name,Values=lab-ebs-data-snap 
  --region ca-central-1 --profile lab 
  --query 'Snapshots[].{Id:SnapshotId,State:State,Progress:Progress}'

Checklist : volume gp3 encrypté · monté sur /data · snapshot completed · volume restauré lit demo.txt.

Nettoyage

Dans la session SSM : sudo umount /data /data-restore (si montés).

aws ec2 detach-volume --volume-id "$VOLUME_ID" 
  --region ca-central-1 --profile lab
aws ec2 detach-volume --volume-id "$VOLUME_RESTORE" 
  --region ca-central-1 --profile lab
aws ec2 wait volume-available --volume-ids "$VOLUME_ID" "$VOLUME_RESTORE" 
  --region ca-central-1 --profile lab

aws ec2 delete-volume --volume-id "$VOLUME_ID" 
  --region ca-central-1 --profile lab
aws ec2 delete-volume --volume-id "$VOLUME_RESTORE" 
  --region ca-central-1 --profile lab
aws ec2 delete-snapshot --snapshot-id "$SNAP_ID" 
  --region ca-central-1 --profile lab

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab

Contrôle anti-facture :

aws ec2 describe-volumes --region ca-central-1 --profile lab 
  --filters Name=status,Values=available,in-use 
  --query 'Volumes[].{Id:VolumeId,Size:Size,State:State}'
aws ec2 describe-snapshots --owner-ids self 
  --region ca-central-1 --profile lab 
  --query 'Snapshots[].SnapshotId'

Les snapshots oubliés coûtent chaque mois — vérifiez aussi EC2 → Snapshots dans la console.

Erreurs fréquentes

Symptôme Cause probable Correction
InvalidAvailabilityZone / attach fails Volume et instance dans des AZ différentes Recréer le volume dans la même AZ ($AZ)
device xvdf invisible Nitro = nom nvme lsblk ; monter /dev/nvmeXn1 (~10G)
mount: wrong fs type Volume neuf non formaté mkfs -t xfs une seule fois sur le data neuf
Données perdues après restore mkfs sur le volume restauré Monter sans reformater
Snapshot long Première sauvegarde pleine Attendre snapshot-completed (souvent quelques minutes)
VolumeInUse à la suppression Encore attaché / monté umount → detach-volume → wait → delete-volume
Facturation résiduelle Snapshot / volume non deleted Lister et supprimer
Boot bloqué après fstab UUID faux / volume détaché sans nofail Mode recovery ou corriger fstab ; utilisez nofail

Lab bonus (5 min) — agrandir un volume gp3

Sans recréer le volume :

aws ec2 modify-volume --volume-id "$VOLUME_ID" --size 15 
  --region ca-central-1 --profile lab
# Attendre optimization state = completed, puis sur l’instance :
# sudo xfs_growfs /data

Utile en prod pour scaler le disque data sans downtime long. Vérifiez l’état :

aws ec2 describe-volumes-modifications --volume-ids "$VOLUME_ID" 
  --region ca-central-1 --profile lab

Quiz (5 questions)

1. Un volume EBS est rattaché à : – A. Toute la Region automatiquement
– B. Une seule Availability Zone
– C. Un seul compte AWS sans AZ

2. Un snapshot EBS sert surtout à : – A. Remplacer Security Groups
– B. Sauvegarder / restaurer un volume (image point-in-time)
– C. Accélérer le réseau VPC

3. Pourquoi préférer gp3 à gp2 pour un nouveau volume lab ? – A. gp3 est obligatoire pour SSM
– B. Meilleur contrôle IOPS/débit et choix moderne par défaut
– C. gp3 est gratuit illimité

4. Sur une instance Nitro, après attach de /dev/xvdf, vous voyez surtout : – A. Obligatoirement /dev/xvdf dans lsblk
– B. Un device /dev/nvmeXn1 à identifier par la taille
– C. Le volume monté automatiquement sur /data

5. Un volume EBS détaché (available) de 10 Gio en ca-central-1 : – A. Est gratuit tant qu’aucune instance ne l’utilise
– B. Continue d’être facturé au Go·mois
– C. Est automatiquement snapshoté puis effacé

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent EC2 + SSM
→ Suivant EFS partage de fichiers
Aussi S3 bucket sécurité · VPC

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *