From c9a3886cd57437f2fcfa9ffc858fecb8169f9136 Mon Sep 17 00:00:00 2001 From: Gerg-L Date: Mon, 20 Feb 2023 21:02:28 -0500 Subject: [PATCH] switched to zfs on gerg-desktop --- imports/boot.nix | 6 +- systems/desktop.nix | 137 +++++++++++++++++++++++++++++++++++++------- zfs/mount.sh | 19 ++++++ zfs/zfs_setup.sh | 105 +++++++++++++++++++++++++++++++++ 4 files changed, 242 insertions(+), 25 deletions(-) create mode 100644 zfs/mount.sh create mode 100644 zfs/zfs_setup.sh diff --git a/imports/boot.nix b/imports/boot.nix index 1caaffe..ebc93e2 100644 --- a/imports/boot.nix +++ b/imports/boot.nix @@ -1,4 +1,4 @@ -_: { +_: {lib, ...}: { environment.etc = { "issue" = { text = "[?12l[?25h"; @@ -17,11 +17,11 @@ _: { }; loader = { systemd-boot = { - enable = true; + enable = lib.mkDefault true; consoleMode = "max"; editor = false; }; - efi.canTouchEfiVariables = true; + efi.canTouchEfiVariables = lib.mkDefault true; timeout = 0; }; }; diff --git a/systems/desktop.nix b/systems/desktop.nix index 214d036..426269b 100644 --- a/systems/desktop.nix +++ b/systems/desktop.nix @@ -1,10 +1,11 @@ inputs: { pkgs, settings, + config, ... }: { imports = [ - (import ../imports/boot.nix inputs) + # (import ../imports/boot.nix inputs) (import ../imports/dwm.nix inputs) (import ../imports/fonts.nix inputs) (import ../imports/git.nix inputs) @@ -27,8 +28,10 @@ inputs: { networkmanagerapplet #gui connection control vlc #play stuff ]; - networking.hostName = settings.hostname; - boot.kernelPackages = pkgs.linuxPackages_latest; + networking = { + hostName = settings.hostname; + hostId = "288b56db"; + }; hardware.cpu.amd.updateMicrocode = true; #user managment users = { @@ -39,30 +42,120 @@ inputs: { }; }; boot = { + zfs.devNodes = "/dev/disk/by-id/"; + kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; + kernelParams = ["nohibernate" "zfs.zfs_arc_max=17179869184"]; + supportedFilesystems = ["zfs" "vfat"]; initrd = { kernelModules = ["amdgpu"]; - availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"]; - supportedFilesystems = ["ext4" "vfat"]; + availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" "hid_generic"]; includeDefaultModules = false; }; + loader = { + efi = { + canTouchEfiVariables = false; + }; + generationsDir.copyKernels = true; + systemd-boot.enable = false; + grub = { + enable = true; + efiInstallAsRemovable = true; + version = 2; + copyKernels = true; + efiSupport = true; + zfsSupport = true; + mirroredBoots = [ + { + path = "/boot/efis/nvme-SHPP41-500GM_SSB4N6719101A4N0E"; + devices = ["/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N0E"]; + } + { + path = "/boot/efis/nvme-SHPP41-500GM_SSB4N6719101A4N22"; + devices = ["/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N22"]; + } + ]; + }; + }; + }; + systemd.services.zfs-mount.enable = false; + services.zfs = { + autoScrub.enable = true; + trim.enable = true; + }; + fileSystems."/" = { + device = "rpool/nixos/root"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; }; - fileSystems = { - "/" = { - device = "/dev/disk/by-uuid/9e5c0a74-753a-4ebe-b8f1-5c7bdde21deb"; - fsType = "ext4"; - label = "nixos"; - noCheck = false; - mountPoint = "/"; - neededForBoot = true; - }; - "/boot" = { - device = "/dev/disk/by-uuid/79C3-9AB6"; - fsType = "vfat"; - label = "BOOT"; - noCheck = false; - mountPoint = "/boot"; - neededForBoot = true; - }; + fileSystems."/home" = { + device = "rpool/nixos/home"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; }; + + fileSystems."/var" = { + device = "rpool/nixos/var"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; + }; + + fileSystems."/var/lib" = { + device = "rpool/nixos/var/lib"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; + }; + + fileSystems."/var/log" = { + device = "rpool/nixos/var/log"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; + }; + + fileSystems."/boot" = { + device = "bpool/nixos/root"; + fsType = "zfs"; + options = ["X-mount.mkdir"]; + }; + + fileSystems."/boot/efis/nvme-SHPP41-500GM_SSSB4N6719101A4N0E" = { + device = "/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N0E-part2"; + fsType = "vfat"; + options = [ + "X-mount.mkdir" + "x-systemd.idle-timout=1min" + "x-systemd.automount" + "noauto" + "nofail" + ]; + }; + fileSystems."/boot/efis/nvme-SHPP41-500GM_SSB4N6719101A4N22" = { + device = "/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N22-part2"; + fsType = "vfat"; + options = [ + "X-mount.mkdir" + "x-systemd.idle-timout=1min" + "x-systemd.automount" + "noauto" + "nofail" + ]; + }; + swapDevices = [ + { + device = "/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N0E-part4"; + discardPolicy = "both"; + randomEncryption = { + enable = true; + allowDiscards = true; + }; + } + { + device = "/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N22-part4"; + discardPolicy = "both"; + randomEncryption = { + enable = true; + allowDiscards = true; + }; + } + ]; } diff --git a/zfs/mount.sh b/zfs/mount.sh new file mode 100644 index 0000000..2334cc4 --- /dev/null +++ b/zfs/mount.sh @@ -0,0 +1,19 @@ +#!/bin/sh +DISK='/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N22 /dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N0E' +set -e +zpool import -f rpool +zpool import -f bpool +zfs load-key rpool/nixos +mount -t zfs rpool/nixos/root /mnt/ + +mount -t zfs rpool/nixos/home /mnt/home + +mount -t zfs rpool/nixos/var /mnt/var +mount -t zfs rpool/nixos/var/lib /mnt/var/lib +mount -t zfs rpool/nixos/var/log /mnt/var/log + +mount -t zfs bpool/nixos/root /mnt/boot + +for i in ${DISK}; do + mount -t vfat ${i}-part2 /mnt/boot/efis/${i##*/} +done diff --git a/zfs/zfs_setup.sh b/zfs/zfs_setup.sh new file mode 100644 index 0000000..959bc70 --- /dev/null +++ b/zfs/zfs_setup.sh @@ -0,0 +1,105 @@ +#!/bin/sh +DISK='/dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N22 /dev/disk/by-id/nvme-SHPP41-500GM_SSB4N6719101A4N0E' + +INST_PARTSIZE_SWAP=16 +INST_PARTSIZE_RPOOL= + +set -e + +for i in ${DISK}; do + +blkdiscard -f $i + +sgdisk --zap-all $i +sgdisk -a1 -n1:24K:+1000K -t1:EF02 $i +sgdisk -n2:01M:+1G -t2:EF00 $i +sgdisk -n3:0:+4G -t3:BE00 $i +sgdisk -n4:0:+${INST_PARTSIZE_SWAP}G -t4:8200 $i + +if test -z $INST_PARTSIZE_RPOOL; then + sgdisk -n5:0:0 -t5:BF00 $i +else + sgdisk -n5:0:+${INST_PARTSIZE_RPOOL}G -t5:BF00 $i +fi + +sync && udevadm settle && sleep 3 + +cryptsetup open --type plain --key-file /dev/random $i-part4 ${i##*/}-part4 +mkswap /dev/mapper/${i##*/}-part4 +swapon /dev/mapper/${i##*/}-part4 +done + +zpool create \ +-o compatibility=grub2 \ +-o ashift=12 \ +-o autotrim=on \ +-O acltype=posixacl \ +-O canmount=off \ +-O compression=lz4 \ +-O devices=off \ +-O normalization=formD \ +-O relatime=on \ +-O xattr=sa \ +-O mountpoint=/boot \ +-R /mnt \ +bpool \ +mirror \ +$(for i in ${DISK}; do + printf "$i-part3 "; + done) + +zpool create \ +-o ashift=12 \ +-o autotrim=on \ +-R /mnt \ +-O acltype=posixacl \ +-O canmount=off \ +-O compression=zstd \ +-O dnodesize=auto \ +-O normalization=formD \ +-O relatime=on \ +-O xattr=sa \ +-O mountpoint=/ \ +rpool \ +mirror \ +$(for i in ${DISK}; do + printf "$i-part5 "; + done) + +zfs create \ +-o canmount=off \ +-o mountpoint=none \ +-o encryption=on \ +-o keylocation=prompt \ +-o keyformat=passphrase \ +rpool/nixos + +zfs create -o mountpoint=legacy rpool/nixos/root +mount -t zfs rpool/nixos/root /mnt/ + +zfs create -o mountpoint=legacy rpool/nixos/home +mkdir /mnt/home +mount -t zfs rpool/nixos/home /mnt/home + +zfs create -o mountpoint=legacy rpool/nixos/var +mkdir /mnt/var +mount -t zfs rpool/nixos/var /mnt/var +zfs create -o mountpoint=legacy rpool/nixos/var/lib +mkdir /mnt/var/lib +mount -t zfs rpool/nixos/var/lib /mnt/var/lib +zfs create -o mountpoint=legacy rpool/nixos/var/log +mkdir /mnt/var/log +mount -t zfs rpool/nixos/var/log /mnt/var/log + +zfs create -o mountpoint=none bpool/nixos +zfs create -o mountpoint=legacy bpool/nixos/root +mkdir /mnt/boot +mount -t zfs bpool/nixos/root /mnt/boot +zfs create -o mountpoint=legacy rpool/nixos/empty +zfs snapshot rpool/nixos/empty@start + +for i in ${DISK}; do + mkfs.vfat -n EFI ${i}-part2 + mkdir -p /mnt/boot/efis/${i##*/} + mount -t vfat ${i}-part2 /mnt/boot/efis/${i##*/} +done