Scality Blog | Object storage, AI data infrastructure & cyber resilience

Silent data corruption: Detecting bit rot in storage

Written by Joshua Silvia | Nov 2, 2026, 3:22:43 AM

Most storage failures announce themselves. A drive stops responding, a server drops off the network, an alert fires. Silent data corruption does not. A few bits on a disk change, or a block is written to the wrong place, and the storage system returns the damaged data on the next read as if nothing had happened. The common name for the slow, unannounced decay of stored data is bit rot, and at petabyte scale it is a question of when, not if.

The defense against it is not a better drive. It is a system that records what each piece of data should look like, checks it regularly, and repairs it from a good copy before the damage spreads to every copy that exists. This post looks at where silent corruption comes from, how object storage detects it, and how to tell whether detection is actually running.

Where silent corruption comes from

Corruption can enter at several points between an application and the physical media:

  • Media decay. Magnetic and flash media degrade over time. Most errors are caught and corrected by the drive's own error-correcting codes, but a small fraction is not, and some of those are returned as valid data.
  • Firmware and controller faults. Drive and controller firmware can write data to the wrong location, report a write as complete when it was not, or return stale data from cache.
  • Memory errors. A bit flipped in server memory before data is written ends up on disk as valid-looking corrupted data. Error-correcting memory reduces but does not remove the risk.
  • Network and transfer errors. Data damaged in transit between client and server, or between servers during replication or repair, is stored as received.
  • Software defects. Bugs in any layer that handles data can damage it in ways no hardware check will see.

The individual probabilities are small. Multiplied by billions of objects and years of retention, they are not.

Why redundancy alone does not solve it

Replication and erasure coding protect against losing data. They do not, by themselves, protect against storing the wrong data. If a corrupted fragment is never read, the corruption is never noticed. If it is read and returned without verification, the client receives bad data. And if a repair process copies a corrupted fragment to rebuild another, the damage is multiplied.

The weak point is time. Corruption that goes undetected for long enough can coincide with an ordinary failure elsewhere. A cluster that believes it has three good copies, of which one is silently corrupted, effectively has two, and losing a server then leaves one.

How object storage detects corruption

Detection rests on checksums: small values computed from data when it is written, stored separately, and recomputed when the data is read. A mismatch means the data has changed. Object storage applies checksums at several layers, and each catches a different class of problem.

CheckWhen it runsWhat it catchesWhat it misses
Transfer checksum on uploadWhen the client writes the objectDamage between client and storageAnything that happens after the write
Per-fragment or per-block checksum on readEvery time data is readCorruption in data that is actively readData that is rarely or never read
Background scrubbingOn a schedule, across all stored dataCorruption in cold data before it is neededDamage that occurs between scrub passes
Application-level fixity checkWhen the owner of the data runs itEnd-to-end changes, including software defectsNothing on its own; it depends on someone running it

Read-time checks protect hot data. Background scrubbing protects everything else, and it is the layer that most often turns out to be disabled, throttled to nothing, or never completing a full pass. Archives and long-retention data, which are read least, depend on it most.

Scrubbing at scale

A scrub reads every stored byte, recomputes its checksum and compares the result. At petabyte scale a full pass is a large background workload, and it competes with client traffic, rebuilds and rebalances for the same disks. The usual compromise is a continuous, throttled scrub that completes a full pass over a defined period, such as a few weeks or a quarter.

The period matters. A scrub cycle sets the longest time corruption can sit undetected in cold data, which is the window in which a second failure could turn a recoverable problem into data loss. Shorter cycles cost more I/O. Longer ones leave a wider window. Either way, the cycle should be a stated figure, measured and reported, not an assumption.

Repair: what happens when a mismatch is found

Detection is only useful if it leads to repair. When a checksum mismatch is found, the system should treat the affected fragment or copy as missing, reconstruct it from the remaining good copies or fragments, verify the result, and write it to healthy media. The event should also be logged, because a cluster of mismatches on one drive or server is an early warning of hardware about to fail.

The same verification logic applies when data is moved deliberately. Migrations and hardware refreshes are moments when corruption can be introduced or carried over, and the approach in the post on verifying migrated data is the end-to-end version of what scrubbing does continuously. Rebuild speed also matters here, because a corruption repair is a small rebuild, and the factors discussed in what affects recovery time apply.

Where Scality RING fits

Scality RING protects data with erasure coding or replication, selectable per policy, and distributes data across nodes so that reconstruction draws on many devices in parallel. Self-healing runs as a background task on the same cluster that serves clients, which is the mechanism by which missing or damaged data is restored to full protection without operator intervention.

RING emits operational metrics and logs that the operator keeps locally, so background activity, repair events and their distribution across drives and servers can be monitored rather than assumed. That visibility is what turns integrity checking from a property claimed in documentation into one an operations team can report on.

Questions to ask about silent corruption

  • Are checksums verified on every read, and are mismatches logged?
  • Is background scrubbing enabled, and how long does a full pass take at current capacity?
  • When did the last full pass complete, and how many mismatches did it find?
  • Are mismatches tracked by drive and server to spot failing hardware early?
  • Do data owners with long retention requirements run their own fixity checks, and how often?

Silent corruption cannot be prevented entirely. It can be found early, repaired from good copies and tracked over time, and that is the difference between a statistic in a reliability model and an incident.