Which SSDs should I buy for Ceph OSDs and BlueStore DB/WAL, and how big should they be?
Sources checked · page updated · the question as people ask it: “I am buying SSDs for a new or expanded Ceph cluster - which drives should I use as OSDs (and as BlueStore DB/WAL devices in front of HDDs), how many per node, and what capacity and endurance do I need?”
Buy enterprise-class SSDs whose maker documents power loss protection, rated 1 DWPD or more (or the TBW equivalent): Ceph's Squid hardware page says many OSD deployments need no more than that and calls 3 DWPD mixed-use drives often overkill. SSD OSDs keep WAL and DB on the same drive, so a separate DB/WAL device is a question only for HDD OSDs, where the general block.db figure depends on the Ceph documentation version (Reef: 1% to 4% of the data device, the latest reference: at least 2.5%) while both say at least 4% for RGW and usually no more than 1% to 2% for RBD. Plan about 8GB of RAM per OSD, one OSD per drive, and evenly sized drives across at least three nodes, Proxmox's minimum for hyper-converged Ceph.
What are you seeing?
Pick the closest symptom to open the matching diagnostic path. This is a guide to what to check and in what order; it does not read your system and does not diagnose it.
Inventory the cluster before ordering
- 1.List the drives Ceph already uses so the order either matches them or replaces them on purpose. Read-only.
ceph device lsReadingLists the storage devices in use. 'ceph device ls-by-host <host>' narrows the list to one host, and 'ceph device get-health-metrics <devid>' returns the health metrics Ceph has stored for a device. - 2.See capacity and fill for every OSD, grouped by host. Proxmox says Ceph performs best when every node carries an evenly sized, evenly distributed set of disks, so the order should keep host totals close to one another.
ceph osd df treeReadingSizes and %USE per OSD under each host. We found no Ceph document defining an imbalance threshold: compare hosts against each other and plan the new drives so no host ends up much larger than its peers. - 3.Check whether an OSD is on rotational media and which min_alloc_size it was built with. That value is fixed at OSD creation, so existing OSDs keep theirs whatever drives you add.
ceph osd metadata osd.<id> | egrep rotational\|allocReadingThis is Ceph's own example for reading those two attributes. Since Octopus for SSD and Pacific for HDD the default is 4KB; an OSD built with another value has to be rebuilt to change it. Drop the grep to print all of that OSD's metadata.
Check how block.db is laid out, and size the next DB device
- 1.Look for spillover first: it is the signal that the DB volume in front of an HDD OSD is too small for what that OSD holds.
ceph health detailReadingBLUEFS_SPILLOVER names OSDs whose separate DB device filled, so metadata spilled back onto the slow device. Ceph lists two remedies. One is to expand the DB logical volume, then stop the OSD daemon and inform BlueFS of the size change with 'ceph-bluestore-tool bluefs-bdev-expand --path /var/lib/ceph/osd/ceph-$ID'. The other is to reprovision the OSD, which Ceph notes involves data migration and recovery. - 2.Map each HDD OSD to the SSD that holds its DB. Read-only.
ceph-volume lvm listReadingFor a logical volume the 'devices' key names the physical drive behind it, and BlueStore volumes carry db_device and wal_device tags. Count how many HDD OSDs point at each DB drive: Ceph's Squid minimum-hardware table pairs 4 to 5 HDD OSDs with a SATA SSD and up to 10 with an NVMe SSD. The list page's printed example predates BlueStore, so field layout in your output may differ. - 3.Work out the per-OSD block.db share from the HDD size and the workload. The general figure differs between Ceph documentation versions, so name the version you follow.ReadingCeph's Reef BlueStore reference puts block.db between 1% and 4% of the data device; the latest reference says at least 2.5% when WAL and DB are offloaded. Both versions say at least 4% for RGW (object) workloads, which lean on block.db for omap metadata, and both say RBD usually needs no more than 1% to 2%. For one 16TB HDD OSD that is 160GB to 320GB at most at the RBD ceiling, 400GB at 2.5% and 640GB at 4%; multiply by the HDD OSDs the DB drive will serve.
- 4.Preview the layout ceph-volume would build for a planned NVMe DB drive. With --report it prints the plan and exits, writing nothing.
ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1ReadingIt shows the data devices and the block.db it would carve from the NVMe drive; with no explicit size it makes block.db as large as possible. With --block-db-size it tries to meet the size and deploys no OSDs if it cannot. Compare its per-OSD figure with the step above. Without --report, ceph-volume asks you to confirm (unless --yes is passed) and then creates OSDs on the listed devices. - 5.After the drives arrive, create each HDD OSD with its DB size set on purpose. This is a deployment step, not a check: it consumes /dev/sdX as an OSD. Proxmox says a previously used disk must first be wiped with 'ceph-volume lvm zap /dev/sdX --destroy', and warns that this will destroy all data on the disk.Destructive. This command destroys what is on the device and cannot be undone. Confirm the device path twice and have a backup of anything you still need before running it.
pveceph osd create /dev/sdX -db_dev /dev/nvme0n1 -db_size <GiB>Reading-wal_dev and -wal_size work the same way for a separate WAL. If -db_size is left out and no Ceph configuration value applies, Proxmox falls back to 10% of the OSD size for DB and 1% for WAL, well above the 1% to 2% Ceph gives for RBD.
Check each node's RAM against the OSDs it will run
- 1.Read the memory target a running OSD uses, including the default. Plain 'ceph config show' lists only non-default settings, so on an OSD left at the default it prints nothing for osd_memory_target; the show-with-defaults form also shows all defaults.
ceph config show-with-defaults osd.<id> | grep osd_memory_targetReadingThe default is 4 GiB; when TCMalloc is available and cache autotuning is enabled, the OSD tries to keep that many bytes mapped in memory. Ceph's Reef page says below 2GB is not recommended, 2GB to 4GB may degrade performance, and more than 4GB can help, above all with fast NVMe OSDs. - 2.Multiply by the OSD count you plan for each node and compare the result with installed RAM.ReadingCeph's Squid page advises about 8GB per BlueStore OSD and Proxmox recommends at least 8 GiB per OSD, so a node with ten OSDs wants about 80GB for them. One ceph-users reply suggested roughly 10GB per NVMe OSD; that is one operator's practice, not a Ceph figure.
Decide which pool the new drives will serve
- 1.Show the CRUSH hierarchy and the per-class hierarchies.
ceph osd tree; ceph osd crush tree --show-shadowReadingceph osd tree gives a simple view of the CRUSH hierarchy, including weights. Each OSD sets its device class to hdd, ssd or nvme at startup from the device behind it, and --show-shadow prints the per-class hierarchies that a class-restricted rule draws from. Confirm which class the new drives will take, and which pools would start using them. - 2.To keep a pool on one class, create a replicated rule limited to that class and point the pool at it.
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>Reading'ceph osd pool set <pool-name> crush_rule <rule-name>' assigns the rule; with host as the failure domain each replica lands on a different host. For a custom tier Ceph provides 'ceph osd crush set-device-class <class> <osd-name>' and 'ceph osd crush rm-device-class <osd-name>'. A Level1Techs reply gave the same advice for a cluster mixing SAS and SATA SSDs: one class and rule per tier, separate pools.
Turn usable capacity into drives and nodes
- 1.Start from the redundancy scheme. A default replicated pool keeps three copies, so raw capacity is three times usable. With host as the rule's failure domain, CRUSH stores each replica on a unique host.ReadingExample: three nodes with four 7.68TB OSDs each give 92.16TB raw, about 30.72TB usable at size 3, before whatever free-space margin you keep.
- 2.For an erasure-coded pool, the space overhead is (k+m)/k, and most deployments need at least k+m failure domains, usually hosts or racks.ReadingA 4+2 profile stores 1.5 times the data and, with host as the failure domain, most deployments of it need at least six hosts. Ceph adds that EC usually needs more failure domains than replication and suits only some components and use cases.
- 3.Spread the order: one drive per OSD daemon, a dedicated (ideally mirrored) OS drive, and the same disk count and sizes in every node. Proxmox's minimum for hyper-converged Ceph is three servers, preferably identical.ReadingWe found no Ceph or Proxmox document giving a recommended number of OSDs per host, so the per-node count falls out of this capacity sum, the RAM check in p3 and the hosts your failure domain needs. Ceph also says that hosting several OSDs on one SAS or SATA HDD is not a good idea.
Choose the endurance class, then confirm PLP per model
- 1.Set the endurance floor. Ceph's Squid hardware page says many OSD deployments need no more than 1 DWPD ('read-optimized'), suggests a model rated 1+ DWPD or the TBW equivalent, and calls 3 DWPD mixed-use drives often overkill at a significantly higher cost.ReadingCeph's Reef page adds that a 0.3 DWPD drive may be fine for OSDs holding sequentially written, read-mostly data but is not a good choice for Ceph Monitor duty, so keep Monitors off the lowest-rated drives.
- 2.Convert a TBW-only rating before holding it against the 1 DWPD line: divide TBW by the capacity in TB, by 365 and by the warranty years the rating covers.ReadingExample: a 7.68TB drive rated 14,016 TBW over five years works out at 14,016 / (7.68 x 365 x 5) = 1.0 DWPD. For the rating you actually need, start from your measured daily writes; in a size-3 pool every client byte is stored on three OSDs.
- 3.Buying more capacity than the data needs also buys endurance.ReadingCeph's Squid page says a larger drive than technically required gives more endurance for a given write workload, because it effectively has greater overprovisioning.
- 4.Confirm power loss protection model by model in the maker's own document. A form factor or an enterprise label does not prove it.ReadingCeph's current hardware page states that production clusters use enterprise-class drives with power loss protection. Makers name it differently: Samsung's 2016 white paper describes it as capacitor-backed, and Solidigm's D7-P5510 brief calls its scheme power-loss imminent (PLI). How PLP works and how to check a drive you already own are on the Ceph Slow on Consumer SSDs page linked below.
Causes, how to confirm each, and whether hardware fixes it
| Cause | How to confirm | Fix | Hardware? |
|---|---|---|---|
| block.db is too small for what the HDD OSD stores, so metadata spills back onto the HDD | BLUEFS_SPILLOVER in ceph health detail, naming the affected OSDs | Expand the DB logical volume, stop the OSD daemon and run ceph-bluestore-tool bluefs-bdev-expand so BlueFS sees the new size; or reprovision the OSD with a larger DB sized to your version's guidance, which Ceph notes involves data migration and recovery. New hardware is needed only when the DB drive has no free space left (see the next cause). | No |
| One DB/WAL SSD carries more HDD OSDs than it can serve, or has no room left to extend | ceph-volume lvm list: count the OSDs whose db_device tag names the same drive and compare with the Squid table (4 to 5 per SATA SSD, up to 10 per NVMe SSD) | Add DB drives so each serves fewer OSDs; Proxmox warns that an overloaded shared DB/WAL device becomes the bottleneck for every OSD linked to it. One forum reply judged a single shared DB/WAL drive per node acceptable with 3x replication across five nodes, as a failure-domain trade-off. | Yes |
| The node's RAM cannot cover the planned OSD count | osd_memory_target from ceph config show-with-defaults, times the planned OSDs, against installed RAM and the roughly 8GB per OSD that Ceph and Proxmox advise | Add RAM (not from the list below, which holds only SSDs), or spread the drives over more nodes | Yes |
| New SSD OSDs would share a pool with HDD or slower SSD OSDs | ceph osd crush tree --show-shadow places the new OSDs in a different device class from the existing ones, and the pool's CRUSH rule is not limited to one class | Create a replicated rule per device class and give each class its own pool | No |
| A separate WAL or DB drive is planned for SSD or NVMe OSDs | ceph osd metadata shows the OSD's devices as non-rotational, and the planned DB drive is no faster than the data drive | Keep WAL and DB on the OSD's own drive; Ceph says a separate device helps only when it is faster than the primary | No |
| The endurance rating does not fit the duty: too low for the measured writes, 0.3 DWPD drives under Monitors, or 3 DWPD bought without a need | The maker's stated DWPD, or TBW converted to DWPD, against your measured daily writes multiplied by the pool's replica count | Buy 1+ DWPD for OSD duty per Ceph's Squid guidance and keep Monitors off 0.3 DWPD drives; pay for a higher class only when the measured rate calls for it | Yes |
| SAS or SATA OSD drives sit behind a RAID controller | The OSD disks are presented as controller volumes rather than whole drives | Use an HBA, as Proxmox advises (not from the list below; /server-parts/hba/it-mode explains IT mode); with NVMe SSDs Ceph says no HBA is needed | Yes |
The list holds enterprise NVMe drives (U.2, U.3, E1.S, E3.S) and SAS SSDs with a stated endurance rating and prints each offer as new or used. Rows qualify by stating 1 DWPD or more, or by stating a TBW figure; a TBW figure is not judged against the 1 DWPD line, so convert it with TBW / (capacity in TB x 365 x warranty years) and check each row's stated rating. Our catalogue has no power loss protection column, so confirm PLP (Solidigm's documents call it PLI) in the maker's own document for each model, and check that your backplane and controller take NVMe or SAS before ordering.
When not to buy: Do not buy separate DB/WAL drives for SSD or NVMe OSDs: Ceph's current page keeps WAL and DB on the device for SSD OSDs, and a separate device pays off only when it is faster than the primary. Do not add drives a node cannot back with about 8GB of RAM each (the list covers neither RAM nor HBAs), do not pay for 3 DWPD without a measured write rate that needs it, and if spillover is the only problem and the DB drive still has free space, extending the DB volume is Ceph's fix without new hardware.
| Product · part number | Cap. | Interface · form · rating | Condition | Price | $/TB | Buy |
|---|---|---|---|---|---|---|
Samsung PM9A3 7.68TB U.2 NVMe MZQL27T6HBLA-00A07 · details | 7.68TB | NVMe-PCIe4 · U.2 · 1 DWPD | REFURB / USED Amazon: Used / LikeNew · sold by Tech on Time (SN RECORDED) | $2,715.99 | $353.64 | Buy on Amazon |
Samsung MZ-QL27T600 7.68TB U.2 NVMe MZ-QL27T600 · details | 7.68TB | NVMe-PCIe4 · U.2 · 1 DWPD | REFURB / USED Amazon: Used / VeryGood · sold by Arsenal PC · seller's note on the listing | $3,499.99 | $455.73 | Buy on Amazon |
Micron 7450 PRO 3.84TB U.3 MTFDKCC3T8TFS · details | 3.84TB | NVMe-PCIe4 · U.3 · 1 DWPD | REFURB / USED Amazon: Used / LikeNew · sold by CorteseInc | $1,990.00 | $518.23 | Buy on Amazon |
Samsung PM9A3 7.68TB U.2 NVMe MZQL27T6HBLA · details | 7.68TB | NVMe-PCIe4 · U.2 · 1 DWPD | NEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded) | $4,099.00 | $533.72 | Buy on Amazon |
Micron 7600 PRO 3.84TB U.2 PCIe5 MTFDLAL3T8THG · details | 3.84TB | NVMe-PCIe5 · U.2 · 1 DWPD | NEW Amazon: New / Unknown · sold by Hard2FindParts | $2,599.00 | $676.82 | Buy on Amazon |
Samsung PM9A3 960GB U.2 NVMe MZQL2960HCJR · details | 0.96TB | NVMe-PCIe4 · U.2 · 1 DWPD | NEW Amazon: New / Unknown · sold by DiscTech (USA) | $798.00 | $831.25 | Buy on Amazon |
WD Ultrastar DC SN655 7.68TB U.3 WUS5EA176ESP7E1 · details | 7.68TB | NVMe-PCIe4 · U.3 · 14,016 TBW | NEW Amazon: New / Unknown · sold by vCloud Choice | $8,334.11 | $1,085.17 | Buy on Amazon |
Samsung PM1643A 1.92TB SAS SSD MZILT1T9HBJR · details | 1.92TB | SAS-12G · 2.5" · 1 DWPD | NEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded) | $2,095.00 | $1,091.15 | Buy on Amazon |
Samsung PM1643a 1.92TB SAS SSD MZILT1T9HBJR-00007 · details | 1.92TB | SAS-12G · 2.5" · 1 DWPD | NEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded) | $2,145.00 | $1,117.19 | Buy on Amazon |
- WD Ultrastar DC SN655 15.36TB U.3 WUS5EA1A1ESP7E1 · 15.36TB · no in-stock offer, so no price is shown
- Samsung PM1643 7.68TB SAS SSD MZILT7T6HMLA-00007 · 7.68TB · no in-stock offer, so no price is shown
- Samsung PM9A3 3.84TB E1.S NVMe MZTL23T8HCLS · 3.84TB · no in-stock offer, so no price is shown
- Samsung PM1643 3.84TB SAS SSD MZILT3T8HALS · 3.84TB · no in-stock offer, so no price is shown
- Samsung PM1643A 3.84TB SAS SSD MZILT3T8HBLS-00007 · 3.84TB · no in-stock offer, so no price is shown
- WD Ultrastar DC SS530 3.84TB SAS WUSTR1538ASS200 · 3.84TB · no in-stock offer, so no price is shown
Prices are Amazon US, re-checked about once a day; newest price in this table . A click here is a click, not a purchase; we earn a commission on qualifying purchases. The table shows what the catalogue holds against the criteria, not an endorsement of any model for your server.
Read next on this site
- Ceph Slow on Consumer SSDs · Why consumer drives without PLP stall Ceph, how PLP works, and how to prove the problem on a running cluster with a sync-write fio test; this page does not repeat it.
- SSD Endurance Calculator · Converts a measured daily write rate into the TBW and DWPD a drive needs.
- Proxmox SSD Wearout Too High · How to measure host writes per day on installed drives, the input the endurance sum on this page starts from.
- Enterprise NVMe U.2 SSDs - Live Prices · The full ranking of U.2, U.3, E1.S and E3.S drives by cost per terabyte, beyond the shortlist here.
- HBA IT mode · What IT mode means, for SAS and SATA OSD nodes that must hand Ceph whole disks instead of RAID volumes.
- U.2 / U.3 adapters · Connector notes worth reading before choosing U.2 or U.3 OSD drives for an existing backplane.
- Proxmox Build - Parts List and Live Cost · A priced parts list for one Proxmox host, a starting point when specifying a node.
Frequently asked questions
Is QLC acceptable for Ceph OSDs?
Ceph's Reef hardware page says QLC SSDs are closing the cost gap with HDDs for object storage, and that a 0.3 DWPD drive may be fine for OSDs holding sequentially written, read-mostly data but not for Monitor duty. We found no Ceph document giving QLC endurance thresholds, so judge a QLC model by its stated rating against your measured writes.
Should I split one large NVMe drive into several OSDs?
Ceph recommends one drive for each OSD daemon and Proxmox one OSD per physical disk. ceph-volume does offer --osds-per-device (its batch page shows '--osds-per-device 2'), but we found no Ceph document recommending a number of OSDs per NVMe drive.
Do NVMe OSD nodes need an HBA?
Ceph's Squid page says that with NVMe SSDs no HBA is needed. For SAS or SATA drives, Proxmox says to avoid RAID controllers and use a host bus adapter.
Is the 4 percent block.db figure right for every cluster?
No. 4% is Ceph's minimum for RGW (object) workloads in both the Reef and the latest BlueStore references; for RBD both say block.db usually needs no more than 1% to 2%. The general figure is where they part: Reef says 1% to 4%, the latest reference at least 2.5%.
Sources
Every technical statement above rests on one of these documents, each read on the date shown. Where a document did not state something, the page says so rather than filling the gap.
- Hardware Recommendations (Squid documentation) - Solid State Drives, RAM, Minimum Hardware Recommendations · checked
- Hardware Recommendations (Reef documentation) - Memory, Solid State Drives, Hard Disk Drives, CPU · checked
- Hardware Recommendations (latest documentation) · checked
- BlueStore Configuration Reference (latest documentation) - Devices, Sizing, Automatic Cache Sizing, Minimum Allocation Size · checked
- BlueStore Configuration Reference (Reef documentation) - Sizing · checked
- Pools · checked
- Erasure code · checked
- CRUSH Maps - device classes · checked
- Proxmox VE Administration Guide - Deploy Hyper-Converged Ceph Cluster (pveceph) · checked
- White Paper: Power Loss Protection in SSDs - How SSDs are Protecting Data Integrity (WHP-SSD-POWERLOSSPROTECTION, 2016, Kristian Vatto) · checked
- Solidigm D7-P5510 Product Brief · checked
- ceph(8) man page · checked
- Device Management · checked
- Health checks - BLUEFS_SPILLOVER · checked
- ceph-volume lvm batch · checked
- ceph-volume lvm prepare · checked
- Configuring Ceph - monitor configuration database commands · checked
- ceph-volume lvm list · checked
Where people hit this
Discussions we opened and read while researching this page. They are evidence that the problem occurs and of what people tried; no specification above is sourced to a forum post.
- ceph-users list (lists.ceph.io) · 2021-05-29 · An operator moving about 1,000 cloned RBD VMs from HDDs to SSDs on Dell R720 and R740 nodes asked for 240GB to 1TB SSD suggestions. One reply recommended the Intel S4510 for its power loss protection and accepted a Samsung 870 EVO or Crucial MX500 only with DB/WAL on an enterprise PLP SSD.
- ceph-users list (lists.ceph.io) · 2025-07-17 · A plan for a roughly 400TB production cluster on OSD nodes with 8GB RAM and 8 cores. The advice quoted back in the thread: many nodes of 7.6TB or 15TB NVMe SSDs, no SAS/SATA and no RAID HBA, M.2 boot, bonded 25GbE, 128GB RAM and 32+ cores per node, five Monitors, and enterprise rather than client SSDs. No models named.
- ceph-users list (lists.ceph.io) · 2020-09-23 · A design with 48 NVMe drives per server drew replies favouring about 10 NVMe per server, more nodes over denser ones, no hardware RAID and around 10GB of memory target per NVMe OSD. The poster settled on SATA/SAS SSD as the most cost-effective choice for the workload.“For NVMe you want to use more like 10 GB per OSD (osd memory target)”
- ceph-users list (lists.ceph.io) · 2020-08-24 · Seven 2TB HDDs behind one 480GB SSD cut into roughly 64GB volumes; the poster asked how large DB and WAL should be given the 1% to 4% guidance. The reply reasoned from Octopus-era RocksDB level sizes, which are version-specific and are not used for sizing on this page.
- Level1Techs · 2025-11-21 · Five nodes, each with four SAS and four SATA SSDs on a tri-mode controller and room for one NVMe drive. The reply: a device class and CRUSH rule per tier with separate pools, one shared NVMe DB/WAL per node acceptable at 3x replication across five nodes, and per-OSD DB/WAL slices important for HDDs but possibly unneeded for all-SSD OSDs.“critical for spinning rust”
- ceph-users list (lists.ceph.io) · 2026-05-26 · Node designs compared for a 16 to 32 node EC 8+3 archive cluster, one variant with 2% of HDD capacity as NVMe block.db. A reply set out pure-HDD, pure-SSD and HDD-with-SSD-DB OSDs mapped to pools by CRUSH rule, and warned that a shared DB SSD under RBD on HDDs wears quickly.“SSD will be worn out fast”
Other enterprise ssd or nvme problems
- Do I need enterprise SSDs for Proxmox, or will consumer drives do?
- Enterprise SSD Percentage Used hit 100%: is it failing, and do you replace it?
- How much power does an enterprise U.2 NVMe SSD draw, and can I make it idle lower?
- Why does my NVMe SSD disappear under load until I power-cycle?
- Proxmox shows high SSD wearout: is the drive dying, and what is writing to it?
- Sabrent Rocket Enterprise or a consumer Sabrent Rocket in a server: what actually differs?
- All questions →