diff options
author | Jörg Thalheim <Mic92@users.noreply.github.com> | 2019-10-14 11:04:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-14 11:04:35 +0100 |
commit | d633ec9787a7060d0f9bc42941759a3573a1d14b (patch) | |
tree | c514adf41db073a373ae7b66eaa46656d07670cf | |
parent | 283ef6bc6d075f85f049299b11c0f5ef417a9553 (diff) | |
parent | 12880e57e173379ba094d0dd9815f262248729d8 (diff) | |
download | nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar.gz nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar.bz2 nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar.lz nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar.xz nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.tar.zst nixlib-d633ec9787a7060d0f9bc42941759a3573a1d14b.zip |
Merge pull request #70601 from Mic92/zfs-trim
nixos/zfs: only enable trim if zfs is enabled
-rw-r--r-- | nixos/doc/manual/release-notes/rl-2003.xml | 13 | ||||
-rw-r--r-- | nixos/modules/tasks/filesystems/zfs.nix | 16 |
2 files changed, 19 insertions, 10 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml index bdf56acd5451..ab0951e831ce 100644 --- a/nixos/doc/manual/release-notes/rl-2003.xml +++ b/nixos/doc/manual/release-notes/rl-2003.xml @@ -36,6 +36,19 @@ quirk in the boot menu. </para> </listitem> + <listitem> + <para> + By default zfs pools will now be trimmed on a weekly basis. + Trimming is only done on supported devices (i.e. NVME or SSDs) + and should improve throughput and lifetime of these devices. + It is controlled by the <varname>services.zfs.trim.enable</varname> varname. + The zfs scrub service (<varname>services.zfs.autoScrub.enable</varname>) + and the zfs autosnapshot service (<varname>services.zfs.autoSnapshot.enable</varname>) + are now only enabled if zfs is set in <varname>config.boot.initrd.supportedFilesystems</varname> or + <varname>config.boot.supportedFilesystems</varname>. These lists will automatically contain + zfs as soon as any zfs mountpoint is configured in <varname>fileSystems</varname>. + </para> + </listitem> </itemizedlist> </section> diff --git a/nixos/modules/tasks/filesystems/zfs.nix b/nixos/modules/tasks/filesystems/zfs.nix index cfdc0a31020b..baf6da8b6f7f 100644 --- a/nixos/modules/tasks/filesystems/zfs.nix +++ b/nixos/modules/tasks/filesystems/zfs.nix @@ -16,9 +16,7 @@ let inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems; inSystem = any (fs: fs == "zfs") config.boot.supportedFilesystems; - enableAutoSnapshots = cfgSnapshots.enable; - enableAutoScrub = cfgScrub.enable; - enableZfs = inInitrd || inSystem || enableAutoSnapshots || enableAutoScrub; + enableZfs = inInitrd || inSystem; kernel = config.boot.kernelPackages; @@ -395,7 +393,7 @@ in system.fsPackages = [ packages.zfsUser ]; # XXX: needed? zfs doesn't have (need) a fsck environment.systemPackages = [ packages.zfsUser ] - ++ optional enableAutoSnapshots autosnapPkg; # so the user can run the command to see flags + ++ optional cfgSnapshots.enable autosnapPkg; # so the user can run the command to see flags services.udev.packages = [ packages.zfsUser ]; # to hook zvol naming, etc. systemd.packages = [ packages.zfsUser ]; @@ -487,7 +485,7 @@ in systemd.targets.zfs.wantedBy = [ "multi-user.target" ]; }) - (mkIf enableAutoSnapshots { + (mkIf (enableZfs && cfgSnapshots.enable) { systemd.services = let descr = name: if name == "frequent" then "15 mins" else if name == "hourly" then "hour" @@ -525,7 +523,7 @@ in }) snapshotNames); }) - (mkIf enableAutoScrub { + (mkIf (enableZfs && cfgScrub.enable) { systemd.services.zfs-scrub = { description = "ZFS pools scrubbing"; after = [ "zfs-import.target" ]; @@ -552,15 +550,13 @@ in }; }) - (mkIf cfgTrim.enable { + (mkIf (enableZfs && 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 - ''; + serviceConfig.ExecStart = "${pkgs.runtimeShell} -c 'zpool list -H -o name | xargs --no-run-if-empty -n1 zpool trim'"; }; }) ]; |