plainstackBook a free call
← All guides

Storage8 min read

EBS volume types explained: gp2, gp3, io1, io2, st1, sc1

If you're unsure which to pick, you want gp3. Here's why, and when that's wrong.

By Plainstack/

There are six EBS volume types. Most teams only ever need one of them, but the naming gives no clue which, and the AWS documentation explains them in terms of what they do rather than when to pick one.

Here is the short version, and then what each is actually for.

The six, in one table

| Type | Media | What it's for | Rough cost position | | --- | --- | --- | --- | | gp3 | SSD | The default. Almost everything. | Baseline | | gp2 | SSD | The previous default. Nothing new. | ~20% more than gp3 | | io2 | SSD | Latency-critical databases needing guaranteed IOPS | Several times gp3 | | io1 | SSD | The older provisioned-IOPS type | Several times gp3 | | st1 | HDD | Big sequential reads — logs, data processing | Cheaper per GB, slow random | | sc1 | HDD | Cold, rarely-touched bulk data | Cheapest per GB |

General-purpose SSD: gp2 and gp3

These are the disks you attach to an EC2 instance without thinking about it. Both are SSD-backed and suit almost every workload — application servers, small and medium databases, container hosts, build agents.

gp2 ties performance to size. You get 3 IOPS per provisioned gigabyte. That means the only way to buy more performance is to buy more storage you don't need. Volumes under 1 TB use a burst-credit system to exceed their baseline temporarily, which works until a sustained workload drains the credits and performance falls off a cliff you didn't know was there.

gp3 separates them. Every volume gets 3,000 IOPS and 125 MB/s included, no matter its size, and you can provision more of either independently. A 100 GB gp3 volume has the same baseline performance as a 1 TB one.

So gp3 is cheaper and faster for most volumes, which is unusual enough to be worth acting on. The migration is online — no snapshot, no detach, no downtime — with two cases worth checking first.

Provisioned IOPS SSD: io1 and io2

These exist for one situation: a database where you need a specific IOPS number guaranteed, with low latency variance, and where the cost of not having it is worse than the cost of having it.

They bill separately for provisioned IOPS on top of storage, and that charge is substantial. io2 supersedes io1 — better durability and higher IOPS-per-GB ratios at similar pricing, so there's rarely a reason to choose io1 today.

The common mistake is choosing them defensively. During a migration, when nobody was certain what the workload needed, provisioned IOPS felt like the safe option. Then it stayed for three years. If you're using 2,000 of 20,000 provisioned IOPS, gp3 will do the job at a fraction of the price — check consumed against provisioned before you assume you need it.

Throughput HDD: st1 and sc1

Spinning disk. Cheap per gigabyte, good at large sequential reads, and genuinely bad at random access — they are not bootable and will make a database miserable.

st1 suits log processing, data warehouse staging, and streaming workloads that read big contiguous blocks. sc1 is colder and cheaper still, for data you keep but rarely touch.

Both are niche. If your workload isn't obviously sequential, they're a false economy — the price per gigabyte looks attractive right up until something needs a random read.

What actually drives the bill

Choosing the type is the small decision. Three things matter more:

You pay for provisioned size, not used size. A 500 GB volume holding 40 GB costs the same as a full one. Nothing in the console tells you.

Volumes grow but never shrink. You can expand in place; reducing means creating a new volume, copying, and swapping. So provision small and let it grow, rather than sizing for three years out on day one.

Unattached volumes bill at full price forever. Every volume in the available state is costing money and doing nothing, and they accumulate every time an instance terminates with delete-on-termination switched off.

Those three explain far more of a typical EBS bill than the type ever does. The EBS cost guide covers them, along with snapshots, which are more subtle than they look.

Choosing, in one pass

Decide

Which volume type should this be?

Almost anythinggp3. Application servers, container hosts, most databases, build agents. Start here and only move if you can measure a reason to.
Still on gp2Move it to gp3. Cheaper and usually faster, online migration, no downtime. Check baseline IOPS first on volumes above about 1 TB.
Database needing guaranteed low latencyio2 — but confirm consumed IOPS against provisioned first. Most workloads that were put on provisioned IOPS out of caution belong on gp3.
Large sequential reads onlyst1, or sc1 if it's genuinely cold. Never for anything doing random access, and never as a boot volume.

Not sure what your storage is actually costing relative to everything else? The free teardown reads an AWS Cost Explorer export in your browser and splits the bill by service — including the EC2 — Other bucket where EBS hides. No signup, nothing uploaded.

Check your own account

Does this apply to you? Find out in two seconds.

Drop a Cost Explorer export into the free teardown. It reads your service mix and tells you which of these patterns show up in your bill — in your browser, with no upload and no email.