feat(host/faunus-ater): systemd services for scsi disk configuration

This commit is contained in:
Malte Tammena 2024-02-07 20:29:38 +01:00
parent e188da2c56
commit 358c7fd01a
2 changed files with 69 additions and 0 deletions

View file

@ -20,6 +20,7 @@ in {
./modules/paperless.nix
./modules/photoprism.nix
./modules/restic.nix
./modules/sdparm.nix
./modules/seaweedfs.nix
./modules/timetagger.nix
./modules/trilium.nix

View file

@ -0,0 +1,68 @@
{
pkgs,
lib,
...
}: let
mkScript = disk: settings:
pkgs.writeShellApplication {
name = "sdparm-${disk}";
runtimeInputs = [pkgs.coreutils pkgs.sdparm];
text = let
diskPath = "/dev/disk/by-id/${disk}";
attrList = builtins.concatStringsSep "," (builtins.attrNames settings);
joinWithAssign = key: value: "${key}=${builtins.toString value}";
assignmentList = builtins.concatStringsSep "," (lib.mapAttrsToList joinWithAssign settings);
in ''
echo "=== BEFORE ====================="
sdparm --get "${attrList}" "${diskPath}"
echo "================================"
sdparm --set "${assignmentList}" --save "${diskPath}"
echo "=== AFTER ======================"
sdparm --get "${attrList}" "${diskPath}"
echo "================================"
'';
};
mkService = disk: settings: {
name = "sdparm-${disk}";
value = {
description = "Configure sdparm settings for SCSI ${disk}";
serviceConfig.Type = "oneshot";
serviceConfig.ExecStart = "${mkScript disk settings}/bin/sdparm-${disk}";
wantedBy = ["multi-user.target"];
};
};
diskConfiguration = let
cfg = {
# Disable Y Standby
STANDBY_Y = 0;
# Enable Z Standby
STANDBY_Z = 1;
# Enable Idle A
IDLE_A = 1;
# Enable Idle B
IDLE_B = 1;
# Disable Idle C
IDLE_C = 0;
# 2 secondes until idle A
IACT = 20;
# 10 minutes until idle B
IBCT = 6000;
# 15 minutes until standby
SZCT = 9000;
};
in {
scsi-35000cca05c71c09c = cfg;
scsi-35000cca05c72eb4c = cfg;
scsi-35000cca05c730e70 = cfg;
scsi-35000cca05c737ba0 = cfg;
scsi-35000cca05c73efd4 = cfg;
};
in {
# Create systemd services to configure my SCSI drives
# to spin down eventually to save some money and noise
config.systemd.services = lib.mapAttrs' mkService diskConfiguration;
}