diff --git a/modules/hardware.nix b/modules/hardware.nix index f0ba280..907729c 100644 --- a/modules/hardware.nix +++ b/modules/hardware.nix @@ -44,13 +44,20 @@ Type = "oneshot"; RemainAfterExit = true; }; + path = with pkgs; [ + coreutils + gawk + zfs + ]; script = '' - for dev in /sys/block/sd*; do - [ -f "$dev/queue/rotational" ] || continue - [ "$(cat "$dev/queue/rotational")" = "1" ] || continue - - # skip removable devices (USB sticks report removable=1) - [ "$(cat "$dev/removable")" = "0" ] || continue + # Only tune disks in the hdds pool — not all rotational disks. + # zpool status gives by-id device names; we resolve to /sys/block/. + zpool status hdds | awk '/^\t/ && $1 ~ /^(ata-|nvme-|scsi-)/ {print $1}' | while read -r id; do + link="/dev/disk/by-id/$id" + [ -L "$link" ] || continue + name=$(basename "$(readlink -f "$link")") + dev="/sys/block/$name" + [ -d "$dev" ] || continue echo mq-deadline > "$dev/queue/scheduler" echo 4096 > "$dev/queue/read_ahead_kb" @@ -63,7 +70,7 @@ echo 4096 > "$dev/queue/max_sectors_kb" 2>/dev/null || true - echo "Tuned $(basename "$dev"): mq-deadline, 4M readahead, 15s deadlines" + echo "Tuned $id -> $name: mq-deadline, 4M readahead, 15s deadlines" done ''; };