Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR 0062: Q-0004: reflink snapshots + full chunk scan for M5a cold backups; spike lvm-thin vs btrfs before M5b warm

  • Status: Accepted
  • Date: 2026-11-02
  • Ledger id: D-0062
  • Tags: sync, engine
  • Supersedes: none
  • Superseded by: none
  • Related: none

Context

F-0035: Cloud Hypervisor snapshots hold RAM and device state, not disk contents, and expose no dirty bitmap; the chunk engine needs its own point-in-time disk primitive. Warm (RPO seconds, D-0020) needs changed-block information, cold backups do not.

Decision

Q-0004: reflink snapshots + full chunk scan for M5a cold backups; spike lvm-thin vs btrfs before M5b warm.

Options: (a) own block dirty tracking: needs a host block layer we control (e.g. dm-era or our own vhost-user-blk backend), large; (b) lvm-thin snapshots + thin_delta; (c) ZFS send (out-of-tree module on Debian, hypothesis); (d) btrfs snapshots/send; (e) reflink file copy (XFS/btrfs) + content-defined chunking of the whole file: simple, reads the full volume per run. Accepted option: (e) for M5a cold backups (interval in minutes); before M5b run a spike comparing (b) and (d) for few-second intervals. Engine trait exposes snapshot_volume / diff hooks so the primitive is swappable. The spike chooses the primitive for M5b.

Some wording was changed for the public repository.

Consequences

  • This decision is binding for all contributors and agents. Changing it requires a new ADR approved by the maintainer (see ADR 0036).

Generated from decision D-0062 in the project decision ledger. Do not edit by hand; changes go through a new decision.