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
labet utilisateuradmin-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.



