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.
wip/yesman
Jörg Thalheim 5 years ago
parent ffabf51767
commit 1d86714a2b
No known key found for this signature in database
GPG Key ID: B3F5D81B0C6967C4
  1. 39
      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
'';
};
})
];
}

Loading…
Cancel
Save