diff --git a/flake.nix b/flake.nix index d1cdcde..8f9b7d1 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ ./disko.nix # disko partitionierung ./hardware/hardware-configuration.nix # generiertes hardware-configuration.nix ./configuration.nix # deine eigentliche Config + ./modules/zfs.nix disko.nixosModules.disko nixos-hardware.nixosModules.common-pc-ssd ]; diff --git a/modules/zfs.nix b/modules/zfs.nix new file mode 100644 index 0000000..b6d36b0 --- /dev/null +++ b/modules/zfs.nix @@ -0,0 +1,40 @@ +{ config, pkgs, lib, ... }: + +{ + #### 1. Pool-Eigenschaften (permanent) ############################## + # wird von systemd-Units bei jedem Boot angewendet + services.zfs = { + trim.enable = true; # weekly zpool trim + autoScrub = { + enable = true; # weekly scrub + interval = "Sun 04:00"; # optional ändern + pools = [ "rpool" "tank" ]; + }; + autoSnapshot = { + enable = true; + frequent = 4; # alle 15 min, 4 Aufbewahrung + hourly = 24; + daily = 7; + weekly = 4; + monthly = 3; + }; + }; + + #### 2. ARC-Größe begrenzen (z. B. 8 GiB) ########################### + # 8 * 1024^3 = 8589934592 + boot.kernelParams = [ "zfs.zfs_arc_max=8589934592" ]; # ≈ 16 % von 48 GB RAM :contentReference[oaicite:0]{index=0} + + #### 3. Zusätzliche Module / Tools ################################## + environment.systemPackages = with pkgs; [ + zfs # zpool, zfs + zfs-prune-snapshots + arc_summary + ]; + + #### 4. Optional: Sanoid statt OpenSolaris-Snapshots ################ + # services.sanoid.enable = true; + # services.sanoid.datasets."tank/media" = { + # hourly = 24; daily = 7; monthly = 3; + # }; +} +