118 lines
6.9 KiB
Markdown
118 lines
6.9 KiB
Markdown
# Fenris
|
||
|
||
Fenris observes an NVMe drive’s real-world use and translates that history into an understandable endurance outlook.
|
||
|
||
## Language
|
||
|
||
**Observation history**:
|
||
The persisted record of drive activity gathered while Fenris monitoring is enabled, retained across restarts and reboots.
|
||
_Avoid_: Calibration data, temporary history
|
||
|
||
**Observed usage habit**:
|
||
The pattern of active, idle, and powered-off hours represented by the observation history, with recent sustained behavior carrying more relevance than distant behavior.
|
||
_Avoid_: Current usage, benchmark workload
|
||
|
||
**Usage-adjusted theoretical lifespan**:
|
||
The theoretical time until the drive’s write endurance is exhausted if its observed usage habit continues; it is an endurance projection, not a predicted hardware-failure date.
|
||
_Avoid_: Future life, actual lifespan, failure date
|
||
|
||
**Projection confidence**:
|
||
The degree to which the observation history is sufficiently long, complete, and stable to support the usage-adjusted theoretical lifespan.
|
||
_Avoid_: Accuracy percentage, certainty
|
||
|
||
**Monitoring period**:
|
||
A span during which Fenris monitoring is enabled; powered-off time remains part of the usage habit, while deliberately disabled time does not.
|
||
_Avoid_: Daemon uptime, calibration window
|
||
|
||
**Observation store**:
|
||
The single SQLite database at `/var/lib/fenris/observations.db` that persists the observation history, monitoring periods, hour observations, day aggregates, and endurance baseline.
|
||
_Avoid_: Data directory, history.jsonl, the database (generic)
|
||
|
||
**Pending publication**:
|
||
The condition where valid acquired observations are retained for recovery but their dependent evidence has not yet been published consistently. Those observations are not part of the reader-visible observation history until publication succeeds; readers retain the last consistent evidence with the pending condition made explicit.
|
||
_Avoid_: Successful collection, fresh published evidence
|
||
|
||
**Store fault**:
|
||
The condition where the observation store is present but cannot be read or trusted — unreadable, corrupt, or written by a newer Fenris — degrading every view that depends on it rather than crashing or guessing.
|
||
_Avoid_: Database error, corruption, broken data
|
||
|
||
**Hour observation**:
|
||
One row per UTC hour in the observation store, recording that hour's usage-habit split into active, idle, powered-off, and unknown seconds, plus write/read deltas, thermal evidence, and coverage.
|
||
_Avoid_: Hourly record, hourly.jsonl entry
|
||
|
||
**Day aggregate**:
|
||
One row per UTC day derived from hour observations; the grain at which usage-habit evidence is judged.
|
||
_Avoid_: Daily summary, daily stats
|
||
|
||
**Local-day evidence**:
|
||
Measured read and write activity attributable to a local calendar day with its recorded timezone and midnight boundaries. Known volumes remain incomplete when gaps or shared local-day evidence prevent an exact total; they are not estimates of the missing activity.
|
||
_Avoid_: Estimated daily total, localised UTC day aggregate
|
||
|
||
**Shared local-day evidence**:
|
||
Measured read or write volume spanning a local midnight that cannot honestly be allocated to either adjacent day. It is retained once, separately from either day's known volume, rather than prorated or counted in both days.
|
||
_Avoid_: Missing bytes, estimated midnight split
|
||
|
||
**Activity selection**:
|
||
The read/write measurement, date and point being inspected in live or historical drive activity. Live activity follows the newest point until deliberate inspection pins a point; historical selection survives refresh, while an expired live pin is explained before following resumes.
|
||
_Avoid_: Projection window, current usage habit
|
||
|
||
**Usage-history window**:
|
||
An exact consecutive span of UTC calendar days ending today, shown from day aggregates; a day without trustworthy evidence remains an explicit gap rather than disappearing or being estimated.
|
||
_Avoid_: Available records, dataset range
|
||
|
||
**Unallocated write evidence**:
|
||
Writes known to belong to a UTC day but which cannot be assigned honestly to a particular hour; they contribute to that day's total but are never distributed across hourly bars.
|
||
_Avoid_: Missing writes, estimated hourly writes
|
||
|
||
**Controller segment**:
|
||
A span of observation history within which the drive's controller identity is unchanged and counters are monotonic; write deltas are never computed across a segment boundary.
|
||
_Avoid_: Counter reset handling, drive swap detection
|
||
|
||
**Degraded identity**:
|
||
The condition where a controller segment's identity key is blank because no identifier rung produced a value; replacement detection then relies on write-counter continuity alone, and projection confidence is capped.
|
||
_Avoid_: Identity error, unknown device, virtual drive
|
||
|
||
**Endurance baseline**:
|
||
The write-endurance value a projection consumes, chosen by precedence: a verified override when one exists, otherwise an unverified override, otherwise a coarse implied baseline derived from vendor wear — each labeled as such.
|
||
_Avoid_: TBW value, failure threshold, max writes
|
||
|
||
**Verified override**:
|
||
A rated-TBW override with complete provenance whose applicability to the detected drive was confirmed by machine match or explicit user attestation; the strongest endurance baseline.
|
||
_Avoid_: Confirmed TBW, trusted value
|
||
|
||
**Unverified override**:
|
||
A rated-TBW override knowingly stored with incomplete provenance; always presented as user-supplied, never as verified.
|
||
_Avoid_: Forced entry, fallback baseline
|
||
|
||
**Sustained regime**:
|
||
The most recent stretch of the observation history over which the observed usage habit has been stable; the interval whose write rate the usage-adjusted theoretical lifespan consumes.
|
||
_Avoid_: Current window, detection period
|
||
|
||
**Habit change**:
|
||
A sustained divergence between recent and earlier daily write rates that starts a new sustained regime.
|
||
_Avoid_: Spike, anomaly
|
||
|
||
**Scenario range**:
|
||
The spread of lifespan projections computed from the 7-, 28-, and 90-day horizons of the observation history, shown in place of a statistical interval.
|
||
_Avoid_: Confidence interval, error bar
|
||
|
||
**Coverage**:
|
||
The share of wall-clock seconds inside monitoring periods whose usage-habit classification is known rather than unknown.
|
||
_Avoid_: Uptime, sample count
|
||
|
||
**Collection run**:
|
||
One scheduled or on-demand execution of the collector that interrogates the drive and extends the observation history.
|
||
_Avoid_: Poll, daemon tick
|
||
|
||
**Release**:
|
||
A published version of Fenris: a version tag, its packages in the channel, and its human-readable change notes, all together; a bare tag is not one.
|
||
_Avoid_: Tag, upload, build
|
||
|
||
**Rollback**:
|
||
Returning to an earlier release by restoring an observation-store snapshot and then installing that release; installing an older package over a newer store is unsupported.
|
||
_Avoid_: Downgrade, version pinning (as a promise)
|
||
|
||
**Deliberate disable**:
|
||
A monitoring pause made through Fenris's own control path, closing the monitoring period so the paused time is excluded from the usage habit.
|
||
_Avoid_: Manual stop, service stop
|