From 5d26338bb36087b6300e856791aa0bac12e765c8 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Jul 2026 21:41:29 +0200 Subject: [PATCH] feat: Improve detection of valid data disk (#1275) --- src/utils.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/src/utils.sh b/src/utils.sh index 4769147..06763fa 100644 --- a/src/utils.sh +++ b/src/utils.sh @@ -415,22 +415,74 @@ cpu() { return 0 } -hasDisk() { +getDisk() { + local name="${DISK_NAME:-data}" path enabled "${DISK_DISABLE:-}" && return 1 - [ -b "/disk" ] && return 0 - [ -b "/disk1" ] && return 0 - [ -b "/dev/disk1" ] && return 0 - [ -b "${DEVICE:-}" ] && return 0 + for path in "/disk" "/disk1" "/dev/disk1" "${DEVICE:-}"; do + if [ -n "$path" ] && [ -b "$path" ]; then + printf '%s\n' "$path" + return 0 + fi + done - [ -z "${DISK_NAME:-}" ] && DISK_NAME="data" - [ -s "$STORAGE/$DISK_NAME.img" ] && return 0 - [ -s "$STORAGE/$DISK_NAME.qcow2" ] && return 0 + for path in "$STORAGE/$name.img" "$STORAGE/$name.qcow2"; do + if [ -s "$path" ]; then + printf '%s\n' "$path" + return 0 + fi + done return 1 } +hasDisk() { + + getDisk >/dev/null + return $? + +} + +hasData() { + + local path + local rc=0 tmp="" + local bytes=102400 + + path=$(getDisk) || return 1 + local source="$path" + + if [[ "${path,,}" == *.qcow2 ]]; then + + tmp=$(mktemp) || { + warn "failed to create a temporary file while inspecting \"$path\"." + return 0 + } + + if ! qemu-img dd -f qcow2 -O raw bs="$bytes" count=1 \ + "if=$path" "of=$tmp" >/dev/null 2>&1; then + rm -f "$tmp" + warn "failed to inspect disk \"$path\", assuming it contains data." + return 0 + fi + + source="$tmp" + + fi + + cmp -s -n "$bytes" "$source" /dev/zero || rc=$? + [ -n "$tmp" ] && rm -f "$tmp" + + case "$rc" in + 0) return 1 ;; + 1) return 0 ;; + esac + + warn "failed to inspect disk \"$path\", assuming it contains data." + return 0 +} + getCountry() { local url=$1