Blog/FinOps·May 28, 2026·7 min read

Disk Rightsizing: The Cost Saving Everyone Ignores

Three moves that eliminate 30–40% of cloud storage waste, with the discipline to prevent it from coming back.

Aditya Mehta

Every team investigates their AWS bill the same way. You open Cost Explorer, sort by service, find EC2 at the top, and dig in. Compute costs are visible, attributable, and spiky, easy to notice, easy to blame. So that's where the optimization effort goes.

Meanwhile, EC2-Other (the line that includes EBS storage) sits quietly at 15–25% of your bill with no individual owner, no spike to investigate, and no one asking questions. It grows slowly, steadily, and invisibly. New volumes are provisioned, old instances are terminated, and the orphaned disks keep accumulating at $0.08/GB/mo.

This guide covers three moves that eliminate the waste. None of them require application changes. All of them can be done in a single afternoon. Together, they typically recover 30–40% of your storage budget. For the average AWS account, that's $15,000–$20,000 per year.

Section 1

Why Disk Waste Is Invisible

01
No usage signal at the volume level

CloudWatch gives you disk read/write IOPS and throughput, but not a "% of provisioned capacity in use" metric. A 2 TB gp3 volume that's 94% empty looks identical to a full one in the AWS console. You're billed for what you provisioned, not what you used.

02
AWS doesn't alert you when a volume is idle

An EBS volume can sit unattached for 18 months and AWS will never send you a notification. There are no built-in Cost Explorer anomalies for storage waste, only for spend increases. Gradual accumulation is invisible to any threshold-based alert.

03
Provisioned ≠ consumed, and you pay for provisioned

When an engineer provisions a 500 GB volume for a database using 80 GB, the other 420 GB costs money every month in perpetuity. The capacity claim is made once; the cost is ongoing. No one reviews provisioned capacity after the fact.

Section 2: The 3-Move Rightsizing Playbook

3 moves to eliminate storage waste

01

Delete unattached EBS volumes: the easiest $300/month

Every EC2 instance termination can leave an orphaned EBS volume behind. The default behavior changed in 2022 (volumes are now deleted on instance termination), but any volume provisioned before that change, or with the "delete on termination" flag unchecked, persists indefinitely. Filter your volumes by "available" state. Every volume in that list is paying rent for nothing.

Where to find it
EC2 → Volumes → Filter: State = available → Sort by Size descending

Red flag: Volumes tagged with a project name that has no running instances. The project is dead, the bill is not.

XamOps scans all accounts for volumes in "available" state, clusters them by age and tag, and surfaces them on the Disk Rightsizing dashboard with one-click deletion and a 30-day safety window.

02

Migrate gp2 to gp3: same performance, 20% cheaper

gp2 is the old general-purpose SSD type. gp3 is newer: 20% cheaper at the same base price, with independently configurable IOPS and throughput. There is no performance regression for general workloads. AWS doesn't migrate you automatically; it's opt-in. Every gp2 volume in your account is a guaranteed 20% refund waiting to happen with zero application impact.

Where to find it
EC2 → Volumes → Filter: Volume type = gp2 → Modify → Volume type = gp3

Red flag: A gp2 volume over 1 TB is costing you significantly more than the equivalent gp3. The per-GB premium compounds fast at scale.

XamOps Disk Rightsizing identifies every gp2 volume across all accounts and regions, validates that the workload doesn't require gp2-specific burst credits, and generates a migration plan with one-click execution.

03

Rightsize over-provisioned volumes: the biggest lever

The hardest move, but the highest impact. An over-provisioned volume is one where CloudWatch shows consistently low utilization relative to provisioned capacity. The typical pattern: an engineer estimates headroom generously, provisions 2× what's needed, and the volume never fills. Rightsizing means snapshotting, resizing, and restoring. Operationally safe, but requires a maintenance window for attached volumes.

Where to find it
CloudWatch → Metrics → EBS → VolumeReadBytes / VolumeWriteBytes + AWS Cost Explorer → Filter: Service = EC2-Other, Group by: Usage Type

Red flag: Volumes where the 90-day P99 utilization is under 40% of provisioned capacity. These are immediate rightsizing candidates.

XamOps pulls 90-day CloudWatch utilization data for every volume, calculates the recommended size, and provides a rightsizing plan with projected savings per volume. High-confidence volumes can be auto-rightsized within a defined maintenance window.

Section 3

The Math: What This Actually Costs

Median numbers for a mid-size engineering org running 200–400 EC2 instances. Your totals will vary, but the ratios are consistent across accounts.

Waste sourceTypical volumeMonthly costRecovery
Unattached volumes3.5 TB avg~$300/moFull (delete)
gp2 → gp3 migration5 TB avg~$400/mo20% savings
Over-provisioned10 TB avg~$800/mo40–50% savings
Total waste~$1,500/mo$18,000/yr

$18,000/year is the median. Larger accounts with longer-running infrastructure and less disk hygiene see $40,000–$80,000/year in recoverable storage waste, more than a junior engineer's annual salary.

Section 4

Disk Policies That Prevent Re-Accumulation

Running the 3-move playbook is a one-time cleanup. Without policy enforcement, the waste starts accumulating again the next day. New gp2 volumes get provisioned, terminations leave orphans, and engineers estimate generously. The fix is policy-as-code, not periodic audits.

1
Require gp3 in new volume provisioning

Add an SCP (Service Control Policy) or Config rule that denies CreateVolume with type = gp2. Existing Terraform modules should default to gp3. No exception needed; gp3 is strictly superior for general workloads.

2
Enable DeleteOnTermination for all new instances

Set delete_on_termination = true in all Launch Templates. For existing instances, update via AWS CLI: aws ec2 modify-instance-attribute. This eliminates the primary source of orphaned volumes.

3
Tag every volume with owner and project at creation

Enforce required tags (Owner, Project, Environment) via AWS Config. Untagged volumes are invisible in organizational billing; tagged volumes can be attributed, reviewed, and challenged.

4
Alert on volumes idle for >14 days

Create a CloudWatch alarm on VolumeReadOps + VolumeWriteOps < threshold for 14 consecutive days on attached volumes. Unattached volumes should trigger an alert at day 3.

Finds it, fixes it, keeps it fixed

Stop paying for empty gigabytes. XamOps makes it automatic.

The 3-move cleanup above can be done manually. The policy enforcement requires coordinating SCPs, Config rules, Launch Template updates, and CloudWatch alarms across every account and region, and keeping them in sync as your infrastructure changes.

XamOps Disk Rightsizing runs the full audit continuously: unattached volume detection, gp2 migration planning, utilization-based rightsizing recommendations, and policy drift alerts. High-confidence actions auto-remediate within defined maintenance windows. Everything else surfaces as a prioritized recommendation with projected savings.

30–40% of your storage budget is probably wasted. XamOps finds it, fixes it, and keeps it fixed.

Unattached volumes, gp2 migration, over-provisioned disks. Automated and continuously monitored across all accounts.

Pricing