From 41306ca50580d66591058211676c463fcb30a2fd Mon Sep 17 00:00:00 2001 From: Peter Hoeg Date: Sun, 12 Feb 2017 23:04:01 +0800 Subject: [PATCH] smartd: set drive timeout --- nixos/modules/services/monitoring/smartd.nix | 31 ++++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/monitoring/smartd.nix b/nixos/modules/services/monitoring/smartd.nix index 4d10299a987..5dcd99a1e71 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}"; + }; + }; };