nix-git/examples/disk-state.sh

45 lines
1.0 KiB
Bash

#!/usr/bin/env bash
#
# Watch disk power state (HDD spin-up and spin-down events).
#
# Arguments.
disk='/dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-WCC7K0CPF0N1'
# Assert that this script is run as root.
if [ "$(id -u)" -ne 0 ]; then
printf '%s\n' 'Error: This script has to be run as root user.' 1>&2
exit 1
fi
trap ctrl_c INT
function ctrl_c() {
echo "End: $(date +"%Y-%m-%dT%H:%M:%S%z")"
exit 0
}
function notify-spin-down(){
while hdparm -C "${disk}" | grep 'active/idle' >/dev/null; do
sleep 15s
done
echo "$(date +"%Y-%m-%dT%H:%M:%S%z"): ${disk} has spun down"
}
function notify-spin-up(){
while hdparm -C "${disk}" | grep 'standby' >/dev/null; do
sleep 15s
done
echo "$(date +"%Y-%m-%dT%H:%M:%S%z"): ${disk} has spun up"
}
function main(){
echo "Start: $(date +"%Y-%m-%dT%H:%M:%S%z")"
hdparm -C "${disk}" | grep 'active/idle' >/dev/null && notify-spin-down
hdparm -C "${disk}" | grep 'standby' >/dev/null && {
while :; do
notify-spin-up
notify-spin-down
done
}
echo "${disk} has unknown state"
}
main