From b36e87600d858f34b8cb90932e87dc61ef0aa28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 1 Apr 2025 16:22:34 +0200 Subject: [PATCH] zfs: properly disable zfs-based swap --- disk-deactivate/disk-deactivate | 2 ++ disk-deactivate/zfs-swap-deactivate.jq | 10 ++++++++++ flake.nix | 1 + 3 files changed, 13 insertions(+) create mode 100644 disk-deactivate/zfs-swap-deactivate.jq diff --git a/disk-deactivate/disk-deactivate b/disk-deactivate/disk-deactivate index 9ddb2de..f7c678d 100755 --- a/disk-deactivate/disk-deactivate +++ b/disk-deactivate/disk-deactivate @@ -4,5 +4,7 @@ set -efux -o pipefail disk=$(realpath "$1") lsblk -a -f >&2 +# since we currently cannot recursively deactivate swaps on zfs volumes, we need to deactivate all of them. +lsblk --output-all --json | jq -r -f "$(dirname "$0")/zfs-swap-deactivate.jq" | bash -x lsblk --output-all --json | jq -r --arg disk_to_clear "$disk" -f "$(dirname "$0")/disk-deactivate.jq" | bash -x lsblk -a -f >&2 diff --git a/disk-deactivate/zfs-swap-deactivate.jq b/disk-deactivate/zfs-swap-deactivate.jq new file mode 100644 index 0000000..0a8ec87 --- /dev/null +++ b/disk-deactivate/zfs-swap-deactivate.jq @@ -0,0 +1,10 @@ +def turnOffSwaps: + if (.name | test("^zd[0-9]+$")) and .type == "disk" then + "swapoff /dev/" + .name + else + [] + end +; + +.blockdevices | map(turnOffSwaps) | flatten | join("\n") + diff --git a/flake.nix b/flake.nix index dc18b01..cc2ee86 100644 --- a/flake.nix +++ b/flake.nix @@ -71,6 +71,7 @@ checkJqSyntax = pkgs.runCommand "check-jq-syntax" { nativeBuildInputs = [ pkgs.jq ]; } '' echo '{ "blockdevices" : [] }' | jq -r -f ${./disk-deactivate/disk-deactivate.jq} --arg disk_to_clear foo + echo '{ "blockdevices" : [] }' | jq -r -f ${./disk-deactivate/zfs-swap-deactivate.jq} touch $out '';