diff --git a/disk-deactivate/disk-deactivate.jq b/disk-deactivate/disk-deactivate.jq index 6e444039..cf6e9430 100644 --- a/disk-deactivate/disk-deactivate.jq +++ b/disk-deactivate/disk-deactivate.jq @@ -1,7 +1,7 @@ # since lsblk lacks zfs support, we have to do it this way def remove: if .fstype == "zfs_member" then - "zpool destroy -f \(.label)" + "if type zpool >/dev/null; then zpool destroy -f \(.label); zpool labelclear -f \(.label); fi" elif .fstype == "LVM2_member" then [ "vg=$(pvs \(.path) --noheadings --options vg_name | grep -o '[a-zA-Z0-9-]*')", @@ -14,8 +14,8 @@ def remove: # maybe its zfs [ # the next line has some horrible escaping - "zpool=$(zdb -l \(.path) | sed -nr $'s/ +name: \\'(.*)\\'/\\\\1/p')", - "if [[ -n \"${zpool}\" ]]; then zpool destroy -f \"$zpool\"; fi", + "zpool=$(if type zdb >/dev/null; then zdb -l \(.path) | sed -nr $'s/ +name: \\'(.*)\\'/\\\\1/p'; fi)", + "if [[ -n \"${zpool}\" ]]; then zpool destroy -f \"$zpool\"; zpool labelclear -f \"$zpool\"; fi", "unset zpool" ] else diff --git a/lib/types/zpool.nix b/lib/types/zpool.nix index 0510b940..df391f2b 100644 --- a/lib/types/zpool.nix +++ b/lib/types/zpool.nix @@ -148,6 +148,10 @@ in in '' readarray -t zfs_devices < <(cat "$disko_devices_dir"/zfs_${config.name}) + if [ ''${#zfs_devices[@]} -eq 0 ]; then + echo "no devices found for zpool ${config.name}. Did you misspell the pool name?" >&2 + exit 1 + fi # Try importing the pool without mounting anything if it exists. # This allows us to set mounpoints. if zpool import -N -f '${config.name}' || zpool list '${config.name}'; then