netwatch ~ ~/labs/diskwatch.md
preview·v0.7.0
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 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.

~ $ diskwatchtui
// diskwatch · loops · no audio▶ play demo
// 01 · install

Install

macOS / Linux · Homebrew
$brew install diskwatch
Cargo
$cargo install diskwatch --locked

Use a current stable Rust toolchain for source builds. Linux needs no additional system libraries; macOS uses built-in tools.

Release binaries
Download releases →

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.

From source
$git clone https://github.com/matthart1983/diskwatch.git && cd diskwatch && cargo build --release --locked

Run ./target/release/diskwatch after building, or copy it to a directory on your PATH.

// 02 · quick start

Quick start

  1. 1
    Open the tabbed interface
    $diskwatch
  2. 2
    Open the dense view
    $diskwatch --view dense
  3. 3
    Use an 80×24 terminal
    $diskwatch --lite
// 03 · optional: smartmontools
Optional: smartmontools

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.

// 04 · 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 · SMARTNVMe/ATA health and attributes where smartctl and device permissions allow; missing coverage is reported.
7 · Hot FilesPaths by event rate. Process attribution joins sampled open files and per-process I/O; it can miss short-lived writers and sees only accessible processes.
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.
// 05 · keys

Keys

KeyAction
1–8Switch tabs
V / LCycle Full, Lite and Dense / jump to Lite
↑ / ↓ / j / kMove selection (Devices, FS)
pPause / resume sampling
q / EscQuit
--diagPrint collected state and exit (no TUI)
// 06 · linux and macos measurements

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.

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-file process attributionSampled open files / process I/OSampled open files / process I/O
// 07 · 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