104 lines
2.5 KiB
Nix
104 lines
2.5 KiB
Nix
{
|
|
config,
|
|
service_configs,
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
boot.zfs.package = pkgs.zfs;
|
|
boot.initrd.kernelModules = [ "zfs" ];
|
|
|
|
boot.kernelParams = [
|
|
"zfs.zfs_txg_timeout=120" # longer TXG open time = larger sequential writes
|
|
|
|
# vdev I/O scheduler: feed more concurrent reads to the block scheduler so
|
|
# mq-deadline has a larger pool of requests to sort and merge into elevator sweeps.
|
|
# Default async_read_max is 3 — far too few for effective coalescence.
|
|
# 32 was empirically optimal (64 overwhelmed the drives, 3 gave near-zero merges).
|
|
"zfs.zfs_vdev_async_read_max_active=32"
|
|
"zfs.zfs_vdev_async_read_min_active=4"
|
|
|
|
# Merge reads within 128 KiB of each other (default 32 KiB). On HDDs, reading a
|
|
# 128 KiB gap is far cheaper than a mechanical seek (~8 ms).
|
|
"zfs.zfs_vdev_read_gap_limit=131072"
|
|
|
|
# Allow ZFS to aggregate I/Os up to 4 MiB (default 1 MiB), matching the
|
|
# libtorrent piece extent size for larger sequential disk operations.
|
|
"zfs.zfs_vdev_aggregation_limit=4194304"
|
|
];
|
|
|
|
boot.supportedFilesystems = [ "zfs" ];
|
|
boot.zfs.extraPools = [
|
|
service_configs.zpool_ssds
|
|
service_configs.zpool_hdds
|
|
];
|
|
|
|
services.sanoid = {
|
|
enable = true;
|
|
datasets."${service_configs.zpool_ssds}" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 5;
|
|
daily = 7;
|
|
monthly = 3;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/sql" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 12;
|
|
daily = 2;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/jellyfin/cache" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/monero" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/p2pool" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_hdds}" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
};
|
|
|
|
services.zfs = {
|
|
autoScrub.enable = true;
|
|
trim.enable = true;
|
|
};
|
|
}
|