diff options
author | Jörg Thalheim <joerg@thalheim.io> | 2019-07-24 13:41:22 +0100 |
---|---|---|
committer | Jörg Thalheim <joerg@thalheim.io> | 2019-07-25 12:47:43 +0100 |
commit | 1d86714a2b6a9737104a06a27b7564c2c775c6ab (patch) | |
tree | 3ab4326f7f019156f7894b5a89babad128116472 /nixos | |
parent | ffabf517671e05c0f2d6f7c1c63e18e630edd6f9 (diff) | |
download | nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar.gz nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar.bz2 nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar.lz nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar.xz nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.tar.zst nixlib-1d86714a2b6a9737104a06a27b7564c2c775c6ab.zip |
nixos/zfs: add trim service
Introduces a trim timer similar to the fstrim service. According to zpool(8) for consumer hardware periodic manual TRIM is preferred over automatic TRIM that ZFS implements. The period of one week is based on recommendations of fstrim.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/tasks/filesystems/zfs.nix | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/nixos/modules/tasks/filesystems/zfs.nix b/nixos/modules/tasks/filesystems/zfs.nix index f7f07bad9522..ac06b6caee30 100644 --- a/nixos/modules/tasks/filesystems/zfs.nix +++ b/nixos/modules/tasks/filesystems/zfs.nix @@ -1,8 +1,6 @@ { config, lib, pkgs, utils, ... }: # -# todo: -# - crontab for scrubs, etc -# - zfs tunables +# TODO: zfs tunables with utils; with lib; @@ -13,6 +11,7 @@ let cfgSnapshots = config.services.zfs.autoSnapshot; cfgSnapFlags = cfgSnapshots.flags; cfgScrub = config.services.zfs.autoScrub; + cfgTrim = config.services.zfs.trim; inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems; inSystem = any (fs: fs == "zfs") config.boot.supportedFilesystems; @@ -268,14 +267,26 @@ in }; }; - services.zfs.autoScrub = { - enable = mkOption { - default = false; - type = types.bool; + services.zfs.trim = { + enable = mkEnableOption "Enables periodic TRIM on all ZFS pools."; + + interval = mkOption { + default = "weekly"; + type = types.str; + example = "daily"; description = '' - Enables periodic scrubbing of ZFS pools. + How often we run trim. For most desktop and server systems + a sufficient trimming frequency is once a week. + + The format is described in + <citerefentry><refentrytitle>systemd.time</refentrytitle> + <manvolnum>7</manvolnum></citerefentry>. ''; }; + }; + + services.zfs.autoScrub = { + enable = mkEnableOption "Enables periodic scrubbing of ZFS pools."; interval = mkOption { default = "Sun, 02:00"; @@ -535,5 +546,17 @@ in }; }; }) + + (mkIf cfgTrim.enable { + systemd.services.zpool-trim = { + description = "ZFS pools trim"; + after = [ "zfs-import.target" ]; + path = [ packages.zfsUser ]; + startAt = cfgTrim.interval; + script = '' + zpool list -H -o name | xargs -n1 zpool trim + ''; + }; + }) ]; } |