mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-24 14:41:17 +00:00
Merge pull request #70601 from Mic92/zfs-trim
nixos/zfs: only enable trim if zfs is enabled
This commit is contained in:
commit
d633ec9787
|
@ -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>
|
||||
|
||||
|
|
|
@ -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'";
|
||||
};
|
||||
})
|
||||
];
|
||||
|
|
Loading…
Reference in a new issue