fixed nfs mounts

This commit is contained in:
Leyla Becker 2025-08-27 17:51:11 -05:00
parent 1c079fa479
commit ca2b188560
5 changed files with 120 additions and 15 deletions

View file

@ -57,7 +57,6 @@ nix multi user, multi system, configuration with `sops` secret management, `home
- auto turn off on power loss - nut - auto turn off on power loss - nut
- zfs email after scrubbing # TODO: test this - zfs email after scrubbing # TODO: test this
- SMART test with email results - SMART test with email results
- fix nfs
- samba mounts - samba mounts
- offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs) - offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs)
- Create Tor guard/relay server - Create Tor guard/relay server

View file

@ -135,6 +135,85 @@
}; };
}; };
# NFS support for mobile device - optimized for frequent disconnections
boot.supportedFilesystems = ["nfs"];
fileSystems = {
"/mnt/leyla_documents" = {
device = "defiant:/exports/leyla_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr" # Allow interruption of NFS calls
"timeo=30" # 3 second timeout (30 deciseconds)
"retrans=2" # Only 2 retries before giving up
"x-systemd.idle-timeout=300" # 5 minute idle timeout for mobile
"x-systemd.device-timeout=15" # 15 second device timeout
"bg" # Background mount - don't block boot
"fsc" # Enable caching
"_netdev" # Network device - wait for network
"x-systemd.requires=network-online.target" # Require network to be online
"x-systemd.after=network-online.target" # Start after network is online
"x-systemd.mount-timeout=30" # 30 second mount timeout
];
};
"/mnt/users_documents" = {
device = "defiant:/exports/users_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"nofail"
"soft"
"intr"
"timeo=30"
"retrans=2"
"x-systemd.idle-timeout=300"
"x-systemd.device-timeout=15"
"bg"
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=30"
];
};
"/mnt/media" = {
device = "defiant:/exports/media";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr"
"timeo=30"
"retrans=2"
"x-systemd.idle-timeout=300"
"x-systemd.device-timeout=15"
"bg"
# Mobile-optimized read settings
"rsize=8192" # Smaller read size for mobile
"wsize=8192" # Smaller write size for mobile
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=30"
];
};
};
# Enable network-online.target for better network dependency handling
systemd.services.NetworkManager-wait-online.enable = true;
# Enable touchpad support (enabled default in most desktopManager). # Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true; # services.xserver.libinput.enable = true;

View file

@ -140,12 +140,20 @@
options = [ options = [
"x-systemd.automount" "x-systemd.automount"
"noauto" "noauto"
"user"
"noatime" "noatime"
"nofail" "nofail"
"soft" "soft"
"x-systemd.idle-timeout=600" "intr" # Allow interruption of NFS calls
"fsc" "timeo=50" # 5 second timeout (50 deciseconds) - longer than mobile
"retrans=3" # 3 retries for desktop
"x-systemd.idle-timeout=600" # 10 minute idle timeout for desktop
"x-systemd.device-timeout=30" # 30 second device timeout
"bg" # Background mount - don't block boot
"fsc" # Enable caching
"_netdev" # Network device - wait for network
"x-systemd.requires=network-online.target" # Require network to be online
"x-systemd.after=network-online.target" # Start after network is online
"x-systemd.mount-timeout=60" # 60 second mount timeout for desktop
]; ];
}; };
@ -155,11 +163,17 @@
options = [ options = [
"x-systemd.automount" "x-systemd.automount"
"noauto" "noauto"
"user"
"nofail" "nofail"
"soft" "soft"
"intr"
"timeo=50"
"retrans=3"
"x-systemd.idle-timeout=600" "x-systemd.idle-timeout=600"
"bg"
"fsc" "fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
]; ];
}; };
@ -169,21 +183,30 @@
options = [ options = [
"x-systemd.automount" "x-systemd.automount"
"noauto" "noauto"
"user"
"noatime" "noatime"
"nofail" "nofail"
"soft" "soft"
"intr"
"timeo=50"
"retrans=3"
"x-systemd.idle-timeout=600" "x-systemd.idle-timeout=600"
"noatime" "x-systemd.device-timeout=30"
"nodiratime" "bg"
"relatime" # Desktop-optimized read settings
"rsize=32768" "rsize=32768" # Larger read size for desktop
"wsize=32768" "wsize=32768" # Larger write size for desktop
"fsc" "fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=60"
]; ];
}; };
}; };
# Enable network-online.target for better network dependency handling
systemd.services.NetworkManager-wait-online.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
cachefilesd cachefilesd
]; ];

View file

@ -15,7 +15,7 @@ in {
export_directory = lib.mkOption { export_directory = lib.mkOption {
type = lib.types.path; type = lib.types.path;
description = "what are exports going to be stored in"; description = "what are exports going to be stored in";
default = "/export"; default = "/exports";
}; };
directories = lib.mkOption { directories = lib.mkOption {
type = lib.types.listOf (lib.types.submodule ({config, ...}: { type = lib.types.listOf (lib.types.submodule ({config, ...}: {

View file

@ -61,8 +61,6 @@
# loopback # loopback
"127.0.0.1" "127.0.0.1"
"::1" "::1"
# local network
# "192.168.0.0/24"
# tailscale # tailscale
"100.64.0.0/10" "100.64.0.0/10"
"fd7a:115c:a1e0::/48" "fd7a:115c:a1e0::/48"
@ -84,7 +82,7 @@
); );
}; };
}; };
networking.firewall.interfaces.${config.services.tailscale.interfaceName} = let networking.firewall = let
ports = [ ports = [
111 111
config.host.network_storage.nfs.port config.host.network_storage.nfs.port
@ -94,6 +92,12 @@
20048 20048
]; ];
in { in {
# Allow NFS on Tailscale interface
interfaces.${config.services.tailscale.interfaceName} = {
allowedTCPPorts = ports;
allowedUDPPorts = ports;
};
# Allow NFS on local network (assuming default interface)
allowedTCPPorts = ports; allowedTCPPorts = ports;
allowedUDPPorts = ports; allowedUDPPorts = ports;
}; };