{
  "slug": "version-mirroring",
  "term": "Version mirroring",
  "aliases": [],
  "definition": "Version mirroring records a data block's generation both with the block and in parity metadata to help detect inconsistent updates.",
  "note": "The FAST 2008 design compares replicated version metadata before reusing blocks for parity updates. Identity checks must precede version comparisons: a misdirected block can carry a misleadingly high version. This describes the paper's single-error model, not a universal RAID guarantee. [parity]\n\nWhere the check runs changes its I/O cost. The paper uses logical identity on user reads and version comparison during scrubbing and parity calculations; comparing versions on every user read would additionally require the parity block. This is a design trade-off, not a measured overhead for current arrays. [parity]\n\nHesela's executable counterexample gives two histories with identical stored bytes, valid local checksums and one-bit stamps. One requires restoring data; the other requires replacing parity. Either forced choice is wrong for one history. The observer lacks an independent expected value or generation. [hesela-stamps]\n\nFinite counters also need a lifetime bound. RFC 1982 leaves half-space comparisons undefined and does not recover an unknown number of wraps. It defines DNS serial arithmetic, not a RAID format; the one-bit example is a separate modulo-stamp model. [rfc1982]",
  "status": "research",
  "advantages": [],
  "limitations": [],
  "related": [
    "lost-write",
    "misdirected-write",
    "parity-pollution",
    "serial-number-arithmetic",
    "identity-discrepancy"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-03",
  "citations": [
    {
      "id": "parity",
      "title": "Krioukov et al. Parity Lost and Parity Regained. FAST 2008, sections 3.2 and 4.6",
      "url": "https://www.usenix.org/legacy/event/fast08/tech/full_papers/krioukov/krioukov_html/main.html",
      "accessed": "2026-11-03"
    },
    {
      "id": "rfc1982",
      "title": "Elz and Bush. RFC 1982: Serial Number Arithmetic, sections 3-5 (1996)",
      "url": "https://www.rfc-editor.org/rfc/rfc1982.html",
      "accessed": "2026-11-01"
    },
    {
      "id": "hesela-stamps",
      "title": "Hesela: identical one-bit stamps, opposite required repairs; executable synthetic histories",
      "url": "https://hesela.dev/research/version-mirroring/README.md",
      "accessed": "2026-11-01"
    },
    {
      "id": "hesela-integrity",
      "title": "Hesela: checksum, identity and freshness boundaries",
      "url": "https://hesela.com/analyses/checksums-identity-and-lost-writes/",
      "accessed": "2026-11-01"
    }
  ],
  "provenance": [
    "The counterexample is original finite arithmetic, not a replay of the paper's model checker, a product assessment or a measured error frequency.",
    "Research status refers to the scoped design reviewed here; it does not assert support in a particular shipping product."
  ]
}
