diff options
-rw-r--r-- | nixos/modules/services/monitoring/smartd.nix | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/nixos/modules/services/monitoring/smartd.nix b/nixos/modules/services/monitoring/smartd.nix index 4d10299a9879..5dcd99a1e71e 100644 --- a/nixos/modules/services/monitoring/smartd.nix +++ b/nixos/modules/services/monitoring/smartd.nix @@ -81,13 +81,32 @@ let description = "Options that determine how smartd monitors the device."; }; + timeout = mkOption { + default = -1; + example = "70"; + type = types.int; + description = '' + Set SCT Error Recovery Control timeout in deciseconds for use in raid configurations. + + Values are as follows: + -1 = do not touch, leave at default + 0 = disable SCT ERT + 70 = default in consumer drives (7 seconds) + + Maximum is disk dependant but probably 60 seconds. + ''; + }; + }; }; -in + deviceTimeout = d: + lib.optionalString (d.timeout > -1) '' + ${pkgs.smartmontools}/bin/smartctl -l scterc,${d.timeout},${d.timeout} --silent errorsonly ${d.device} + ''; -{ +in { ###### interface options = { @@ -222,7 +241,13 @@ in path = [ pkgs.nettools ]; # for hostname and dnsdomanname calls in smartd - serviceConfig.ExecStart = "${pkgs.smartmontools}/sbin/smartd --no-fork --configfile=${smartdConf}"; + serviceConfig = { + ExecStartPre = '' + ${concatMapStringsSep "\n" deviceTimeout cfg.devices} + ''; + ExecStart = "${pkgs.smartmontools}/sbin/smartd --no-fork --configfile=${smartdConf}"; + }; + }; }; |