Fixing BLUESTORE_SPILLOVER warnings

BLUESTORE_SPILLOVER means an OSD's RocksDB metadata has moved from its fast DB device onto slower HDD. This page covers how to confirm it, fix it safely and size DB devices so it does not return.

On this page

Fixing BLUESTORE_SPILLOVER warnings before OSD metadata slows the cluster

A BLUESTORE_SPILLOVER warning means one or more OSDs are storing part of their BlueStore metadata on the slow device, usually the HDD, because the faster DB device that was meant to hold it has run out of room. The first question is whether it is urgent. In most clusters it is a performance and planning problem rather than an immediate outage: the OSD keeps working, but lookups that would have hit the SSD now touch the spinning disk, and latency rises under load. Confirm the scope before you act. Check which OSDs are listed, whether they share one DB device, and whether client latency or slow requests have changed since the warning appeared. A warning on a single OSD in a healthy cluster can wait for planned work. A warning spreading across many OSDs that also show slow ops needs a faster response.

Spillover happens when the BlueStore DB partition, which holds RocksDB metadata such as object maps and allocation information, fills up. The overflow is written to the main data device, so every affected OSD pays a penalty on metadata access. This is the expected failure mode for HDD-based OSDs that share SSDs for WAL and DB, as the Ceph hardware recommendations advise. One shared SSD may serve several OSDs, so one undersized DB device can spill several drives at once. Before you choose a fix, record the DB and WAL sizes in use, the device layout, and the Ceph release in the cluster, and ask your vendor or the release documentation whether compaction or DB resizing behaves as you expect on that version.

The fix is planned work, not a single command. Options include manual compaction to reclaim space, expanding or migrating the DB device to a larger partition, and sizing DB devices correctly for any new OSDs you add. Each option touches live OSDs, so plan the order, the recovery impact and a rollback point before you start, and test the procedure on one OSD first. Confirm with your own environment which steps your cephadm deployment supports, how long each OSD takes to return to service, and what you will monitor during the change. Your team can do this work in-house, or a partner can scope it as a fixed-scope engagement with written deliverables for the check, the change and the verification.

How to confirm spillover on a specific OSD

Start with the cluster-wide view. Run ceph health detail to list each OSD that has spilled metadata. The line for each OSD names the daemon and the amount of BlueFS data on the slow device. Read the OSD IDs first, then check whether they share a DB device, because one failing or filling SSD affects every OSD it serves.

  • Affected OSD IDs: Note every ID listed. A pattern across several OSDs usually points to a shared DB device or to a sizing decision made when the OSDs were deployed, not to one drive.
  • Reported spilled amount: Record the figure so you can compare it with later checks and see whether it is growing.
  • Health code and severity: Confirm the code is BLUESTORE_SPILLOVER and note the severity, since your runbook should set different response times for each.
  • Muted alerts: Check whether the warning was muted with ceph health mute. A muted warning still exists, but it stops appearing in routine checks.

Save the full output with a timestamp before you change anything, so you can show the state at the start of the incident.

Compaction, DB expansion or DB migration: which fix fits

BLUESTORE_SPILLOVER has four common fixes, and they differ in how much they change and how much recovery load they add. Start with the least invasive option that matches your device layout, then move down the list only when the earlier fixes do not clear the warning.

Online compaction

Online compaction asks a running OSD to compact its RocksDB database without stopping it. It reclaims space on the DB device and can clear spillover when the DB is only slightly over its share, but it does not add capacity. Check whether the OSD's DB usage drops after compaction, and watch client latency while it runs, since compaction competes with client I/O on the same host.

Offline compaction

Offline compaction stops the OSD, runs the compaction tool against its database, and restarts it. It can reclaim space that online compaction leaves behind, at the cost of a short outage for that OSD. Plan it as a maintenance action in a window where losing one OSD is acceptable, and confirm the exact procedure for your Ceph release before running it on production data.

Expanding the DB logical volume

If the DB sits on a logical volume with free space in the same volume group, you can grow that volume and then tell BlueFS to use the new size. This keeps the OSD ID and data in place and avoids moving data, but it only works when the layout has room. Confirm the expansion command and the BlueStore resize behavior for your release, and check that the device is not already at its limit.

Migrating DB to a new device

The BlueFS migrate approach moves the DB contents from the current device to a larger one without rebuilding the OSD. It suits a fuller DB SSD that needs a bigger home, and it avoids the full recovery that a rebuild triggers. Stop the OSD for the move, confirm the target device is enterprise-class and at least as fast, and verify the OSD starts cleanly and spillover clears before you restart the next one.

Redeploying the OSD

Redeploying removes the OSD, recreates it with a DB device sized for the workload, and lets Ceph backfill its data. It is the most disruptive option because every object on that OSD must be rebuilt across the cluster, so it adds recovery load for a long period. Use it when the layout cannot be fixed in place, and schedule it with recovery settings reviewed and capacity headroom confirmed.

Fix options and when each fits

This table compares four ways to clear BLUESTORE_SPILLOVER: compaction, in-place DB expansion, migrating the DB to a new device and redeploying the OSD. Read each row against your hardware and your tolerance for downtime, and start with the least disruptive option that the warning's cause allows.

OptionWhen it fitsWhat it touchesDowntime and data movementWhat to verify afterward
CompactionSpillover is small and the DB has free space on its device to reclaimRocksDB on the OSD's DB device, run against one OSD at a timeOSD must be stopped or compacted online per your Ceph release; data movement is minimalConfirm the spillover warning clears and check that BlueFS usage on the DB device drops
In-place DB expansionThe DB partition or logical volume can grow because the underlying device has unallocated spaceThe DB logical volume and BlueFS size on the OSDOSD restart needed; little or no data movementConfirm the new DB size is visible to the OSD and that spillover stops growing
DB migration to a new deviceThe DB device is undersized but the host has a larger SSD or NVMe to move metadata ontoDB volume, BlueFS data and the OSD's device linksOSD stopped during migration; metadata copied, not object dataCheck OSD starts cleanly, health returns to OK and spillover no longer reports
Full OSD redeployThe DB layout is wrong at the design level, or in-place steps are not supported for the release in useThe whole OSD: data, DB and WAL are recreated and refilled from replicas or erasure-coded peersHeavy data movement and recovery load while the OSD rebuilds; plan for backfill timeWatch recovery finish, confirm PG states return to active and clean, and update the service spec for new OSDs

Sequence for a planned spillover fix

This sequence moves an affected cluster from a BLUESTORE_SPILLOVER warning to a verified, documented state with one OSD or host at a time changed. Each step ends with a check, so you know whether to continue, escalate or roll back before touching the next device.

  1. Confirm which OSDs spill and by how much

    Run ceph health detail and record every OSD named in the BLUESTORE_SPILLOVER entry, along with its host and the amount of metadata reported on the slow device. On each affected OSD, check BlueFS usage with the bluefs stats tool available on your release, and confirm the command name in your version's documentation first. Save the list of OSD IDs, hosts and spilled sizes in your change record. The check: every OSD in the health output appears in your list, and the sizes match what the BlueFS output reports.

  2. Check cluster health and recovery state

    Run ceph -s and ceph health detail to confirm that the spillover warning is the only active issue. Run ceph osd df to check how much free space each OSD has, since a cluster near its nearfull ratio leaves little margin for rebalancing during the fix. If any OSD is down, or any placement groups are degraded, misplaced or backfilling, pause and resolve that first. The check: the cluster reports only the spillover warning, all OSDs are up and in, and placement groups are active and clean.

  3. Plan one OSD or host at a time

    Choose the fix path for each OSD: compaction first, then DB expansion or migration if compaction does not clear the spill. Before any OSD is stopped, run ceph osd ok-to-stop against its ID and set the noout flag so the cluster does not start rebalancing during the work. Work through one OSD or one host at a time, and confirm your failure domain can tolerate that device being out. Write the rollback step for each device in the change record. The check: ok-to-stop succeeds for the selected OSD, and the plan lists the device, the owner and the rollback action.

  4. Run compaction on the affected OSD

    Compaction rewrites the RocksDB data on the DB device and can release space held by obsolete entries, so it is the least invasive option to try first. Run ceph tell osd.<id> compact against one affected OSD and wait until the command returns and the OSD is back in service. Then repeat the BlueFS check from the first step. Compaction does not add capacity to a DB device that is simply too small, so a spill that persists after compaction moves you to the next step. The check: the BlueFS usage on the slow device drops, or the spillover entry for that OSD clears.

  5. Expand or migrate the DB device

    If compaction does not resolve the spill, either extend the existing DB logical volume and grow BlueFS into the new space, or attach a larger DB device and migrate the metadata onto it. Both paths use ceph-bluestore-tool against an OSD that is stopped, so run them in the window you planned, with the OSD down and the noout flag set. Keep the original DB device intact until the OSD starts cleanly and the cluster has returned to active and clean. Confirm the exact subcommands and flags for your release before running them. The check: the device size or BlueFS layout reflects the change, and the OSD starts and joins the cluster without errors.

  6. Confirm the warning clears and BlueFS returns

    Bring the OSD back into service, unset noout, and wait for placement groups to return to active and clean before touching the next OSD or host. Run ceph health detail and confirm that BLUESTORE_SPILLOVER no longer appears for the device you changed. Recheck the BlueFS usage on the slow device, which should show that metadata is back on the DB device or that the slow usage is reduced to what you expected. The check: the spillover warning is gone for the device, and the slow device counters show no spilled metadata or a clearly lower amount.

  7. Document the change and update DB sizing

    Record each OSD ID, the fix path used, the commands and their output, the device sizes before and after, and the time each change was made. Store this record where your operations team keeps change history, and link it to the original health alert. Then update the OSD service specification or your deployment runbook so that new OSDs use a DB device sized for your expected metadata growth, and confirm that sizing with your hardware vendor and the Ceph hardware recommendations for your release. The check: every changed OSD appears in the record, and the sizing rule for new OSDs is written down and reviewed.

Sizing DB devices for new OSDs so spillover does not return

The fix for recurring spillover is to size the DB device correctly before the next OSD is created, because a DB partition cannot be grown in place without rebuilding the OSD. DB size depends on how many OSDs share the device, the capacity of each data drive, and the workload the cluster will carry, including object counts, small-file patterns and metadata-heavy operations. No single ratio of DB space to data space should be treated as a universal rule. The Ceph sizing guidance and a benchmark on your own hardware are the inputs to use, and the numbers you record should be the basis for the purchase order.

The Ceph hardware recommendations set the baseline design: a dedicated drive per OSD, and moving WAL and DB off HDDs onto shared SSDs when OSDs are HDD-based. The same guidance calls for enterprise-class SSDs for metadata, because a consumer device that stalls under sustained writes will slow every OSD that depends on it. Confirm with your drive vendor that the endurance and write performance of the candidate devices suit a shared DB role. Also plan the failure domain: if one shared SSD serves many OSDs, losing it takes all of them down together, so the number of OSDs per DB device should be a recorded design decision.

Build headroom into the capacity plan rather than waiting for the warning. Spillover typically appears after a cluster has been filling for some time, so the sizing review should check how the DB devices will behave at the nearfull threshold of the planned capacity, not only on day one. Ask your cluster design team to document the DB size per OSD, the number of OSDs per shared device, the expansion path for adding hosts, and the monitoring that will alert before DB usage reaches its limit. This sizing decision belongs to the broader cluster design work covering hardware, media, failure domains and capacity, so it should be reviewed there and not settled as a one-off fix during an incident.

Risks during a DB device change

A DB device change touches OSD metadata, recovery traffic and cluster state at the same time. The risks below compound each other, so confirm health, versions and recovery before the first change and keep the rollback path in view.

Losing a shared SSD

One DB SSD often serves several HDD-backed OSDs. If that device fails during a migration or expansion, every OSD that depends on it goes down together, and the cluster must rebuild each affected OSD's data across the remaining hosts. Before you start, map which OSDs share each DB device with ceph osd metadata and confirm the failure domain can absorb losing all of them. Treat the SSD as the highest-risk component in the change.

Recovery load slowing clients

Moving or recreating a DB device forces OSDs to rebuild or re-read metadata, and that work competes with client I/O. Applications can see higher latency or slow requests while recovery runs. Check current recovery settings and client latency baselines before you begin, and agree on a window with application owners. Changing recovery priority is a tuning decision, so confirm the effect on a non-production copy first.

Repeated repair loops

Repeating a repair or redeployment on the same OSD without finding the cause can turn one warning into a cycle of rebuilds. Each pass adds recovery load and can hide a failing drive. If an OSD returns to the same spillover or error after a change, stop and check the underlying device's health and logs before running the procedure again. Record each attempt so the team can see the pattern.

Mismatched versions across tooling

Commands, cephadm and the cluster itself must be on compatible releases, or output and behavior may differ from the documentation you followed. A host running a different package set than the cluster can produce misleading status or fail mid-procedure. Confirm the running release on every daemon, the cephadm version on each admin host, and the procedure's release notes before you run anything that changes OSD metadata.

Skipping backups and health checks

A DB device change rewrites OSD metadata, and a mistake can make an OSD unusable. Without a recent configuration export, a verified backup of data you cannot rebuild, and a clean health baseline, you cannot tell whether a new warning came from the change or was already present. Capture ceph health detail, the OSD tree and device layout before starting, and confirm that your backup restore has been tested for the data it protects.

Questions teams ask before fixing spillover

Is BLUESTORE_SPILLOVER an emergency?

Usually not on its own. The warning means some BlueStore metadata has moved from the faster DB device onto the slower main device, so reads and writes that touch that metadata can slow down. Data is not lost and the OSD keeps running. The urgency depends on how much spillover exists, how fast it is growing, and whether the cluster is already under load or near full. Check whether slow ops or nearfull warnings appear alongside it, because those combinations need attention sooner. Confirm the current state with ceph health detail and the per-OSD BlueFS counters before deciding how quickly to act.

How long does a spillover fix take?

The duration depends on the fix you choose. Compaction on a single OSD is usually the fastest step to try, while expanding or migrating a DB device means draining and rebuilding OSDs, which takes longer because recovery traffic moves across the cluster. The main drivers are the number of affected OSDs, the amount of data that must be rebalanced, the recovery settings your team allows during business hours, and how many change windows you can use. Ask for a written plan that lists the steps per OSD and the expected recovery load, since no fixed duration is safe to assume without measuring your own cluster.

Can our own team fix spillover without outside help?

Often yes, if your team already runs cephadm clusters, understands OSD and BlueStore layout, and has a tested rollback. The steps are documented and a single OSD can be checked and compacted without stopping the cluster. The risk rises when many OSDs are affected, when the DB device is shared across several OSDs, or when recovery competes with client traffic. Outside help is most useful for planning the sequence, validating the procedure on one OSD, and reviewing the capacity math for new DB devices. Be honest about the time your staff can spare during the work and whether they have seen a recovery of this kind before.

What does DeployOpen need from us to start?

A fixed-scope engagement starts with access and information. Typically you should be ready to provide:

  • Read access to the cluster through cephadm and the Ceph CLI, with the health output and OSD inventory
  • Host details for the OSD nodes, including drive models, DB device layout and network topology
  • Benchmark or performance data from the cluster, and recent recovery and client latency history
  • Written change windows, approval contacts and a rollback owner
  • Confirmation of how backups and snapshots are handled before any device work starts

The more complete the inventory, the more accurate the written scope and the fewer surprises during execution.

What does a spillover quote depend on?

A quote follows from the written scope, so it depends on what is in that scope. Main cost drivers are the number of hosts and OSDs affected, whether the work is limited to compaction and checks or includes DB device expansion or migration, the amount of testing and validation required in your environment, and the number of change windows. Recurring items may include follow-up monitoring review or a retainer for ongoing support, and these are separate from the one-time work. DeployOpen does not publish a price list, so ask for a quote that lists each deliverable, the assumptions behind it, and what would change the scope.

Can a spillover fix be reversed if something goes wrong?

Partly. Compaction is generally low risk, and an OSD that fails a check can be stopped and handled as a normal OSD problem. Expanding or migrating a DB device changes the on-disk layout, so the safe path is to drain or remove one OSD at a time, rebuild it with the new layout, and wait for recovery to finish before touching the next one. Reverting means redeploying the OSD with the old layout, which again moves data. Ask for the rollback procedure in writing, confirm that you have a verified backup or recovery path for the affected pools, and agree a stop condition before work begins.

How do we size DB devices for new OSDs so spillover does not return?

Start from the expected object count and workload, not from a fixed ratio alone. The Ceph hardware recommendations advise moving WAL and DB to shared SSDs for HDD-based OSDs and using enterprise-class SSDs for metadata, so the DB device should be an enterprise SSD with headroom for growth. Benchmark a representative workload before buying, because no two clusters behave alike. Check the current DB usage on existing OSDs, plan for recovery and expansion, and keep spare capacity on the DB device. Confirm the sizing rules for your Ceph release with the official documentation and your hardware vendor before ordering.

How DeployOpen scopes and delivers spillover fixes

DeployOpen handles a BLUESTORE_SPILLOVER fix as a written, fixed-scope engagement. Before any change, the scope names the affected OSDs, the hosts and drive models involved, the current ceph daemon osd.<id> perf dump and ceph health detail output, the chosen remedy (compaction, DB device expansion, or DB migration to a new device), the rollback path, and the acceptance checks. Deliverables and a timeline are agreed in the same document, so you know what you are paying for and what you must provide, such as a maintenance window, spare capacity in the cluster, and access to the hosts through cephadm.

During delivery, the work happens inside your cloud accounts, data centers or air-gapped network. Engineers confirm BlueFS spillover per OSD, check the DB device fill level and the balance of recovery against client I/O, and run the chosen procedure one OSD at a time so that PG states stay healthy between steps. Verification is evidence-based: the BlueFS counters are rechecked after each OSD, the health checks return to a clean state, and the cluster is observed through at least one full recovery cycle. Where your cluster runs the Ceph monitoring stack, the alert rules that fired are confirmed to clear.

The handover includes a change record: what was done on each host, the command output before and after, the sizing assumptions used for the DB device, and a runbook for the next expansion of new OSDs. This is the document your change board and auditors will ask for. DeployOpen can also operate the cluster under a retainer, covering health review, capacity forecasting against DB sizing, and upgrades to supported Ceph releases, if your team wants that support after the fix. Ask any partner to confirm which Ceph release your cluster runs and which support window applies to it before you sign.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.