Merge pull request #65331 from Mic92/zfs-trim

nixos/zfs: add trim service
This commit is contained in:
Jörg Thalheim 2019-07-26 07:53:33 +01:00 committed by GitHub
commit 741046a4d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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
'';
};
})
];
}