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 '';