Hesela / Research library
Research & analyses
Storage engineering, examined through sources, measurements and reproducible methods.
133 analyses · Page 2 of 5
Newest firstWhy deleted NFS files become .nfs files
Silly rename, open-file preservation and a misleading Linux comment: trace NFS deletion from the 1985 paper to a pinned implementation and RFC erratum.
Btrfs tree logs: why a read-only mount can still replay writes
Separate Btrfs fsync logging, transaction commit, read-only mount recovery and destructive log clearing, with a reproducible Linux 6.15/6.16 option audit.
F2FS: when a successful fsync is not a recovery promise
A pinned Linux source audit separates F2FS checkpoints, roll-forward recovery and the fsync success path when checkpointing is disabled.
Fast file clones: where the copying cost goes
Separate reflinks, hard links and in-kernel copies; trace deferred costs, Btrfs maintenance, shared-space accounting and FAST 2020's research limits.
NVMe multipath: ANA access states and Linux path policies
Separate NVMe namespace identity from ANA access states: NSID scope, identifier lifetime, Linux path policies and controller-level queue accounting.
Optical disc lifetime: error thresholds, percentiles and uncertainty
Optical-disc lifetime is not a warranty: CD/DVD error units, survival estimates, Blu-ray HTL/LTH, and a source-level check of M-DISC longevity claims.
Soft updates: consistent metadata without a full journal
Why write ordering can leave reclaimable space instead of unsafe pointers, and why background fsck and metadata consistency do not prove application durability.
XFS delayed logging: which commit is durable?
Separate XFS commit from persistence, relogging from deferred recovery, and journal atomicity from online visibility.
Ext4 journal replay: why old writes must sometimes be skipped
JBD2 replay, checksum failure paths and ambiguous log tails, with source-checked recovery boundaries and reproducible counterexamples.
Filesystem aging: the state SSD warm-up does not describe
Separate filesystem layout history, free-space fragmentation and SSD conditioning, with three USENIX studies and a reproducible allocation counterexample.
io_uring: completion is not a durable commit
io_uring write ordering, protection information, cancellation CQEs and linked timeouts: what each result proves, and what still needs synchronization.
RocksDB: a WAL sync is not a memtable flush
RocksDB WAL sync, flush, tracking, snapshots and backups: which recovery boundary each crosses, and why a successful open need not prove completeness.
SMB handles and leases: reconnect is not write durability
Durable and persistent SMB handles, caching leases and write-through protect different boundaries. Learn what to verify after a disconnect or failover.
SQLite WAL checkpoint starvation: success is not completion
Measured SQLite WAL checkpoints, stale-snapshot retries and read-only contracts: why successful SQL or integrity_check does not prove completion or freshness.
ZFS ZIL and SLOG: the boundary between logging and persistence
ZIL, SLOG and transaction groups protect different boundaries. Pinned OpenZFS code explains indirect records, sync settings and misleading log-byte counters.
Backup verification is not a restore test
Separate backup completion, integrity, freshness and usable recovery, with reproducible SQLite and rsync experiments and explicit limits.
O_DIRECT alignment: query the file, not a fixed block size
Query O_DIRECT per-file alignment and distinguish cache hints, prefetch, NOWAIT and mincore residency from actual I/O and durable writes.
Parity declustering: less load per disk, not fewer reads
An executable eight-disk example separates repair-read volume, survivor load and stripe width, with evidence from ASPLOS, Panasas and OpenZFS dRAID.
Persistent memory: DAX is not a durable commit
ADR, eADR and MAP_SYNC protect different boundaries. A source-linked review and executable crash-state example separate addressability, visibility, persistence and atomicity.
Reed-Solomon recovery needs more than a fragment count
Exact GF(7) examples separate MDS recovery, missing fragments and silent corruption, showing why even a unique decoded answer can be wrong.
Replica repair: what has actually converged?
Replica repair coverage, quorum overlap and set reconciliation: why matching keys, successful responses and compact summaries do not prove identical durable state.
Snapshots and backups: which failures can you recover from?
Separate snapshot consistency, independent recovery copies and RPO/RTO targets, with source-backed OpenZFS, PostgreSQL and VSS examples.
Sparse files, preallocation and thin-pool capacity
File size, allocated blocks and thin-pool headroom are different measurements. Learn what preallocation, hole punching and zero-filled reads actually establish.
512e, 4Kn and alignment: geometry is not durability
Separate logical and physical sectors, partition starts and individual writes. Four reproducible examples show why aligned partitions do not guarantee whole-sector I/O.
Bloom filters: optimize the lookup, not each filter
LSM lookup costs, filter retention and counting limits, with reproducible allocation, deletion and memory examples grounded in primary sources.
Content-defined chunking: boundaries are not identity
Reproducible FastCDC examples show how file framing, parameter changes and terminal chunks alter measured reuse, even when file contents remain unchanged.
Crash-consistency tests: the oracle is part of the result
What ALICE, CrashMonkey/ACE, SQLite and Ananke actually test: fault boundaries, separate recovery outcomes and an executable correctness-oracle example.
GitLab's 2017 database loss: reconciling the incident records
GitLab's public records give conflicting loss-window endpoints and rough impact estimates for the 31 January 2017 database incident. The later postmortem describes partial recovery from surviving Git repositories. Comparing these accounts clarifies which figures describe initial impact, which describe recovery, and where the final losses remain unknown.
Key-value separation: the cleaning bill moves elsewhere
WiscKey, HashKV and BlobDB separate value movement from key sorting. A reproducible byte model shows when value-log cleaning can erase the saving.
Linux atomic writes: untorn does not mean durable
Atomic writes, durable completion and powersafe overwrite protect different boundaries. Check Linux request geometry and SQLite's outside-range assumption.
Looking for a technology? Browse technology cards or open the knowledge corpus.