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 with Full, Lite and Dense views. Linux and macOS support is documented below; Windows x86_64 release binaries are also available. Feature coverage varies by platform.
brew install diskwatchInstall
brew install diskwatchcargo install diskwatch --lockedUse a current stable Rust toolchain for source builds. Linux needs no additional system libraries; macOS uses built-in tools.
Linux and macOS: x86_64 and ARM64, plus Linux static and armv5te variants. On Windows, extract diskwatch-windows-x86_64.tar.gz and run diskwatch-windows-x86_64.exe.
git clone https://github.com/matthart1983/diskwatch.git && cd diskwatch && cargo build --release --lockedRun ./target/release/diskwatch after building, or copy it to a directory on your PATH.
Quick start
- 1Open the tabbed interface$
diskwatch - 2Open the dense view$
diskwatch --view dense - 3Use an 80×24 terminal$
diskwatch --lite
Install smartmontools for full SMART attribute tables. Device access may need elevated permissions. Without it, macOS can show the basic diskutil health flag; unavailable measurements remain unavailable.
Tabs in detail
Switch with 1–8.
Keys
| Key | Action |
|---|---|
| 1–8 | Switch tabs |
| V / L | Cycle Full, Lite and Dense / jump to Lite |
| ↑ / ↓ / j / k | Move selection (Devices, FS) |
| p | Pause / resume sampling |
| q / Esc | Quit |
| --diag | Print collected state and exit (no TUI) |
Linux and macOS measurements
This table describes Linux and macOS collectors, not Windows feature parity. Latency percentiles describe tick-averaged samples, not individual I/O completion times.
| Metric | macOS | Linux |
|---|---|---|
| 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-file process attribution | Sampled open files / process I/O | Sampled open files / process I/O |
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.