From 1c56aea8fb3069eacaceb4e584a0458f88e8b1c6 Mon Sep 17 00:00:00 2001 From: Menno van Leeuwen Date: Fri, 15 Nov 2024 22:43:52 +0100 Subject: [PATCH] adds automount to zfs --- config/nixos/hardware/mennos-server.nix | 8 +- config/nixos/hardware/mennos-server/zfs.nix | 158 +------------------- 2 files changed, 14 insertions(+), 152 deletions(-) diff --git a/config/nixos/hardware/mennos-server.nix b/config/nixos/hardware/mennos-server.nix index a9d23c4..76ef551 100644 --- a/config/nixos/hardware/mennos-server.nix +++ b/config/nixos/hardware/mennos-server.nix @@ -22,12 +22,18 @@ # Enable oepngl and 32-bit support hardware.opengl = { - driSupport32Bit = true; enable = true; + driSupport = true; + driSupport32Bit = true; }; # Enable NVIDIA Docker support + # test with: $ docker run --rm -it --device=nvidia.com/gpu=all ubuntu:latest nvidia-smi hardware.nvidia-container-toolkit.enable = true; + virtualisation.docker = { + enable = true; + enableNvidia = true; + }; hardware.nvidia = { # Modesetting is required. diff --git a/config/nixos/hardware/mennos-server/zfs.nix b/config/nixos/hardware/mennos-server/zfs.nix index fbd6ba3..5997198 100644 --- a/config/nixos/hardware/mennos-server/zfs.nix +++ b/config/nixos/hardware/mennos-server/zfs.nix @@ -5,18 +5,17 @@ # ZFS system services services.zfs = { - autoSnapshot = { - enable = false; # TODO: Enable this when we're ready to do so - frequent = 4; # Keep 4 15-minute snapshots - hourly = 24; # Keep 24 hourly snapshots - daily = 7; # Keep 7 daily snapshots - weekly = 4; # Keep 4 weekly snapshots - monthly = 12; # Keep 12 monthly snapshots - }; autoScrub = { enable = true; interval = "weekly"; }; + autoMount = true; + pools.datapool = { + import = true; + }; + pools.backup = { + import = true; + }; }; # Install ZFS utilities @@ -27,147 +26,4 @@ # If you want to keep compression settings boot.kernelParams = [ "zfs.zfs_compressed_arc_enabled=1" ]; - - # TODO: Enable this when we're ready to do so - # environment.etc."local/bin/zfs-backup.sh" = { - # mode = "0755"; - # text = '' - # #!/bin/bash - # set -euo pipefail - - # DATE=$(date +%Y%m%d-%H%M) - # DATASETS="music astro photos stash isos ai audiobooks vms old_backups services" - # RETAIN_SNAPSHOTS=24 - # BACKUP_POOL="backup" - # SOURCE_POOL="datapool" - - # log() { - # echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" - # } - - # ensure_backup_pool() { - # if ! zpool list "$BACKUP_POOL" >/dev/null 2>&1; then - # log "ERROR: Backup pool '$BACKUP_POOL' does not exist!" - # return 1 - # fi - # } - - # check_dataset_exists() { - # local pool=$1 - # local dataset=$2 - # zfs list "$pool/$dataset" >/dev/null 2>&1 - # return $? - # } - - # create_backup_dataset() { - # local dataset=$1 - # local source_pool="$SOURCE_POOL" - # local backup_pool="$BACKUP_POOL" - - # # Get properties from source dataset - # local props=$(zfs get -H -o property,value all "$source_pool/$dataset" | \ - # grep -E '^(compression|recordsize|atime|relatime|xattr|acltype)' | \ - # awk '{printf "-o %s=%s ", $1, $2}') - - # log "Creating backup dataset $backup_pool/$dataset with matching properties" - # # shellcheck disable=SC2086 - # zfs create -p ${props} "$backup_pool/$dataset" - - # # Set some backup-specific properties - # zfs set readonly=on "$backup_pool/$dataset" - # zfs set snapdir=visible "$backup_pool/$dataset" - # log "Successfully created backup dataset $backup_pool/$dataset" - # } - - # get_latest_snapshot() { - # local pool=$1 - # local dataset=$2 - # local snapshot - # snapshot=$(zfs list -t snapshot -H -o name "$pool/$dataset" 2>/dev/null | grep backup- | tail -n1) || true - # echo "$snapshot" - # } - - # # Ensure backup pool exists - # ensure_backup_pool - - # for ds in $DATASETS; do - # log "Processing dataset $ds" - - # # Check if source dataset exists - # if ! check_dataset_exists "$SOURCE_POOL" "$ds"; then - # log "Skipping $ds - source dataset $SOURCE_POOL/$ds does not exist" - # continue - # fi - - # # Create backup dataset if it doesn't exist - # if ! check_dataset_exists "$BACKUP_POOL" "$ds"; then - # log "Backup dataset $BACKUP_POOL/$ds does not exist" - # create_backup_dataset "$ds" - # fi - - # # Create new snapshot - # local snapshot_name="$SOURCE_POOL/$ds@backup-$DATE" - # log "Creating new snapshot $snapshot_name" - # zfs snapshot "$snapshot_name" - - # LATEST_BACKUP=$(get_latest_snapshot "$BACKUP_POOL" "$ds") - - # if [ -z "$LATEST_BACKUP" ]; then - # log "No existing backup found - performing full backup of $ds" - # zfs send "$snapshot_name" | zfs receive -F "$BACKUP_POOL/$ds" - # else - # LATEST_SOURCE=$(get_latest_snapshot "$SOURCE_POOL" "$ds" | grep -v "backup-$DATE" | tail -n1) - # if [ -n "$LATEST_SOURCE" ]; then - # log "Performing incremental backup of $ds from $LATEST_SOURCE to backup-$DATE" - # zfs send -i "$LATEST_SOURCE" "$snapshot_name" | zfs receive -F "$BACKUP_POOL/$ds" - # else - # log "No suitable source snapshot found for incremental backup - performing full backup of $ds" - # zfs send "$snapshot_name" | zfs receive -F "$BACKUP_POOL/$ds" - # fi - # fi - - # log "Cleaning up old snapshots for $ds" - - # # Cleanup source snapshots - # if snapshots=$(zfs list -t snapshot -H -o name "$SOURCE_POOL/$ds" | grep backup-); then - # echo "$snapshots" | head -n -$RETAIN_SNAPSHOTS | while read -r snap; do - # log "Removing source snapshot: $snap" - # zfs destroy "$snap" - # done - # fi - - # # Cleanup backup snapshots - # if snapshots=$(zfs list -t snapshot -H -o name "$BACKUP_POOL/$ds" | grep backup-); then - # echo "$snapshots" | head -n -$RETAIN_SNAPSHOTS | while read -r snap; do - # log "Removing backup snapshot: $snap" - # zfs destroy "$snap" - # done - # fi - # done - - # log "Backup completed successfully" - # ''; - # }; - - # systemd.services.zfs-backup = { - # description = "ZFS Backup Service"; - # requires = [ "zfs.target" ]; - # after = [ "zfs.target" ]; - # path = [ pkgs.zfs ]; - # serviceConfig = { - # Type = "oneshot"; - # ExecStart = "/etc/local/bin/zfs-backup.sh"; - # User = "root"; - # }; - # }; - - # systemd.timers.zfs-backup = { - # description = "Run ZFS backup every 4 hours"; - # wantedBy = [ "timers.target" ]; - # timerConfig = { - # OnBootSec = "15min"; - # OnUnitActiveSec = "4h"; - # RandomizedDelaySec = "5min"; - # }; - # }; }