netwatch ~ ~/labs/diskwatch.md
preview·v0.1.1
cd~/labs/diskwatch
← all tools
diskwatch.tui

diskwatch

Single-host disk diagnostics in your terminal.

DiskWatch is the terminal you open when the disk light won’t stop blinking — before you reach for iostat, iotop, smartctl, lsblk, df, du, and a panic. Where lsblk shows you which disks exist, DiskWatch shows you what’s happening on them: capacity trending, IO throughput, p99 latency, SMART health, and the files being written right now — and tells you why in plain English when something’s anomalous.

Eight tabs, cross-platform on macOS and Linux. Read-only by design — it surfaces what’s eating disk, it doesn’t delete anything. No daemon, no persisted DB.

$cargo install diskwatch
~ $ diskwatchtui
diskwatch TUI demo
// diskwatch · loops · no audio▶ playing
// 01 · install

Install

macOS / Linux · Homebrew
$brew install matthart1983/tap/diskwatch
Cargo
$cargo install diskwatch
From source
$git clone https://github.com/matthart1983/diskwatch.git && cd diskwatch && cargo build --release

Rust 1.75+ only if building from source. No system deps on Linux; macOS uses preinstalled ioreg / diskutil / system_profiler.

// 02 · optional: smartmontools
Optional: smartmontools

Install smartmontools (brew install smartmontools / apt install smartmontools) for full SMART attribute tables. Without it, the SMART tab falls back to the basic verified/failing flag from diskutil.

// 03 · tabs in detail

Tabs in detail

Switch with 1–8.

1 · Overview5 KPI tiles (capacity, IO, p99 latency, health, insights), per-device summary, aggregate IO sparkline, top insights, and a segmented capacity bar.
2 · DevicesBlock-device table with model, firmware, serial, used %, and SMART status, plus a detail panel for the selected device. Replaces lsblk, nvme list, diskutil list, hdparm -I.
3 · VolumesAPFS containers (macOS) with nested volumes, role, mount, FileVault; mdraid arrays (Linux) with members, slot state [UUUU], and resync/recovery progress.
4 · FSMounted filesystems with inline usage bars, threshold colors, and system/user/removable classification. Replaces df -h, df -i, mount, findmnt.
5 · IOPer-device read/write throughput, a 48s sparkline, and p50 + p99 latency (read and write) over a 60s rolling window.
6 · SMARTFull NVMe / ATA attribute tables when smartctl is on PATH; a degraded banner with install instructions when not. Always shows the basic verified/failing flag.
7 · Hot FilesPaths by event rate via FSEvents (macOS) / inotify (Linux). Honest footer: this tab can’t show bytes/sec or process attribution without root.
8 · InsightsAnomaly cards over the collected state: capacity warnings, SMART failures, NVMe wear, drive temperature, p99 latency outliers, IO-dominant devices, hot-file runaway, removable drives.
// 04 · keys

Keys

KeyAction
1–8Switch tabs
↑ / ↓ / j / kMove selection (Devices, FS)
pPause / resume sampling
q / EscQuit
--diagPrint collected state and exit (no TUI)
// 05 · what’s real, what’s deferred

What’s real, what’s deferred

DiskWatch is explicit about what each platform can and can’t measure without elevated access.

MetricmacOSLinux
Device model / serial / firmware✓ system_profiler + IOKit✓ /sys/block/*/device
Per-device used bytes✓ via APFS container map✓ summed from sysinfo mounts
Read/write byte rates (split)✓ IOKit Statistics✓ /proc/diskstats
p50 / p99 latency✓ tick-averaged over 60s✓ tick-averaged over 60s
True per-op p99 (histogram)— needs IOReport entitlement— needs eBPF biolatency
SMART attributes✓ smartctl if installed✓ smartctl if installed
Hot files (paths)✓ FSEvents✓ inotify
Hot files (bytes / pid)— needs root fs_usage— needs eBPF biosnoop
// 06 · anti-goals

Anti-goals

Not multi-host — use NetWatch Cloud if you need a fleet view. Not a daemon — no long-running collector, no persisted DB. Not a deduper / cleaner — it surfaces what’s eating disk, it doesn’t delete anything; mutation is a different tool. Not a backup product, and not a benchmark — it measures what’s happening, not what’s possible.

// related