mirror of
https://codeberg.org/privacy1st/nix-git
synced 2024-12-23 02:36:05 +01:00
spin-down-hdd
This commit is contained in:
parent
b07e59d12d
commit
15dc4c195a
13
examples/case-esac.sh
Normal file
13
examples/case-esac.sh
Normal file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eu -o pipefail
|
||||
|
||||
x='some-test'
|
||||
|
||||
case "${x}" in
|
||||
*'_'*|*'-'*)
|
||||
echo "The string contains _ or -"
|
||||
;;
|
||||
*)
|
||||
echo 'No pattern matched'
|
||||
;;
|
||||
esac
|
@ -54,11 +54,6 @@
|
||||
# # -i 120: Spin down after 2 minutes (120 seconds) of inactivity.
|
||||
# ExecStart = "${pkgs.hd-idle}/bin/hd-idle -a /dev/disk/by-id/XXX-XXX-XXX -i 120";
|
||||
|
||||
# Note about the `script` settings below.
|
||||
# If the disk is spun-down (in standby mode):
|
||||
# - The standby timeout has been set before already, otherwise it would be spinning.
|
||||
# - Don't set the standby timeout again, as this will spin up the disk.
|
||||
|
||||
{ lib, config, options, pkgs, modulesPath, ... }:
|
||||
with lib;
|
||||
let
|
||||
@ -77,11 +72,6 @@ in
|
||||
};
|
||||
|
||||
config = mkIf (length cfg > 0) {
|
||||
# TODO: Is this required or is it enough to use `${pkgs.hdparm}` in the systemd service script?
|
||||
environment.systemPackages = with pkgs; [
|
||||
hdparm
|
||||
];
|
||||
|
||||
# For each element (e.g. "ata-WDC_WD40EFRX-68N32N0_WD-WCC7K0CPF0N1") in `cfg` create this config:
|
||||
# systemd.services."hdparm-ata-WDC_WD40EFRX-68N32N0_WD-WCC7K0CPF0N1" = {
|
||||
# description = ...;
|
||||
@ -95,7 +85,28 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
${pkgs.hdparm}/bin/hdparm -C /dev/disk/by-id/${id} | ${pkgs.busybox}/bin/grep 'standby' || ${pkgs.hdparm}/bin/hdparm -S 24 /dev/disk/by-id/${id}
|
||||
set -eu -o pipefail
|
||||
# Get IDE power mode status and remove any whitespace characters for easier pattern matching.
|
||||
result="$(${pkgs.hdparm}/bin/hdparm -C /dev/disk/by-id/${id} | ${pkgs.coreutils}/bin/tr -d '[:space:]')"
|
||||
case "''${result}" in
|
||||
*'/dev/disk/by-id/${id}:drivestateis:standby'*|*'/dev/disk/by-id/${id}:drivestateis:sleeping'*)
|
||||
printf '%s\n' 'Disk is in standby or sleeping.'
|
||||
# Don't set idle timeout as this would spin up the disk.
|
||||
# It has already been set before, otherwise the disk would be spinning.
|
||||
;;
|
||||
*'/dev/disk/by-id/${id}:drivestateis:active/idle'*)
|
||||
printf '%s\n' 'Disk is active. Set idle timeout to 10 minutes.'
|
||||
${pkgs.hdparm}/bin/hdparm -S 24 /dev/disk/by-id/${id}
|
||||
;;
|
||||
*'/dev/disk/by-id/${id}:drivestateis:unknown'*)
|
||||
printf '%s\n' 'Disk is not supported by hdparm.'
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
printf '%s%s\n' 'Unknown hdparm output: ' "''${result}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
};
|
||||
}) cfg);
|
||||
|
Loading…
Reference in New Issue
Block a user