guides

How to Audit EBS Waste Across Regions

Use a repeatable regional review to find unattached EBS volumes, old gp2 capacity, and storage cleanup opportunities.

3 min read
Updated 2026-03-10

How to audit EBS waste across regions

EBS waste usually shows up as several issues at once. You often have unattached volumes, older gp2 capacity, and forgotten storage sitting in secondary regions. This guide gives you a repeatable process to see it all before cleanup begins.

On this page

What to look for

  • unattached volumes in the available state
  • old gp2 volumes that may be better migrated to gp3
  • disks with weak or missing ownership tags
  • stale storage left behind after instance cleanup or migration work

Step 1: Enumerate all enabled regions

Do not start from memory. Build your region list first.

aws ec2 describe-regions --query 'Regions[].RegionName' --output text

Use that list as your audit checklist. One forgotten region can hold a meaningful portion of your storage waste.

Step 2: Find unattached volumes in every region

for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
  echo "=== $region unattached volumes ==="
  aws ec2 describe-volumes \
    --region "$region" \
    --filters Name=status,Values=available \
    --query 'Volumes[].{VolumeId:VolumeId,Size:Size,VolumeType:VolumeType,CreateTime:CreateTime,Tags:Tags}' \
    --output table
done

Capture:

  • volume ID
  • size
  • volume type
  • age
  • Name or environment tags

If the disk might be useful for recovery, flag snapshot-first as a possible next step.

Step 3: List remaining gp2 volumes

for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
  echo "=== $region gp2 volumes ==="
  aws ec2 describe-volumes \
    --region "$region" \
    --filters Name=volume-type,Values=gp2 \
    --query 'Volumes[].{VolumeId:VolumeId,Size:Size,State:State,CreateTime:CreateTime,Tags:Tags}' \
    --output table
done

This is not a deletion pass. It is an optimization review. Keep migration candidates separate from clearly orphaned disks so the cleanup list stays manageable.

Step 4: Classify what needs action

Use three buckets:

  1. Delete or snapshot-then-delete: unattached disks with no clear recovery value
  2. Right-size or migrate: gp2 or oversized storage still in active use
  3. Investigate ownership: items with unclear tags, recent activity, or uncertain production risk

That saves the team from risky all-at-once cleanup decisions.

Step 5: Put rough savings next to every item

You only need enough precision to rank what to fix first.

  • Unattached storage = ongoing storage cost until removal
  • gp2 migration candidates = recurring savings after migration
  • annualize monthly estimates so leadership sees real long-term value

The queue is easier to act on when every item has an owner and a clear savings frame.

Where OpsCurb helps

OpsCurb surfaces unattached EBS volumes and gp2 migration candidates in the same Core Scan Role-first review. That shortens the path from inventory to a first-scan brief with owner-ready next steps.

Next steps: