Version 2.3.2: Fix détection UUID disques + priorité WWN
All checks were successful
Tests et Vérifications / Tests unitaires BATS (push) Successful in 15s
Tests et Vérifications / Vérification ShellCheck (push) Successful in 8s
Tests et Vérifications / Vérification syntaxe Bash (push) Successful in 3s
Tests et Vérifications / Résumé des tests (push) Successful in 1s

Corrections majeures:
- Fix regex awk pour matcher les liens by-id (../../sda vs sda)
- Priorisation WWN (World Wide Name) pour identifiants disques
- Fallback ata-/scsi-/nvme- si pas de WWN
- Suppression du fallback DEVPATH (inutile pour disques physiques)
- Logs warning si aucun identifiant trouvé

Impact:
- Les pools ne sont plus détectés comme "virtuels" à tort
- Health checks des disques physiques maintenant fonctionnels
- Identifiants plus stables et cohérents entre nœuds
This commit is contained in:
Tellsanguis 2025-12-29 14:40:14 +01:00
parent 17197618a0
commit aa47dd913b

View file

@ -24,7 +24,7 @@
set -euo pipefail
# Configuration
SCRIPT_VERSION="2.3.1"
SCRIPT_VERSION="2.3.2"
REPO_URL="https://forgejo.tellserv.fr/Tellsanguis/zfs-sync-nfs-ha"
SCRIPT_URL="${REPO_URL}/raw/branch/main/zfs-nfs-replica.sh"
SCRIPT_PATH="${BASH_SOURCE[0]}"
@ -506,16 +506,31 @@ get_pool_disk_uuids() {
fi
# Chercher les liens dans /dev/disk/by-id/ pointant vers ce device
# Méthode optimisée: ls -l au lieu de find
local found_uuids
found_uuids=$(ls -l /dev/disk/by-id/ 2>/dev/null | \
awk -v target="$(basename "$device_real")" '$NF == target {print $(NF-2)}' | \
grep -E '^(wwn-|ata-|scsi-|nvme-)' || true)
local all_ids
all_ids=$(ls -l /dev/disk/by-id/ 2>/dev/null | \
awk -v target="$(basename "$device_real")" '$NF ~ "/"target"$" || $NF == target {print $(NF-2)}' || true)
if [[ -n "$found_uuids" ]]; then
while read -r uuid_name; do
uuids+=("$uuid_name")
done <<< "$found_uuids"
if [[ -z "$all_ids" ]]; then
log "warning" "Aucun identifiant by-id trouvé pour ${device_real} (disque très ancien?)"
continue
fi
# Priorité 1: WWN (World Wide Name - identifiant unique matériel)
local found_wwn
found_wwn=$(echo "$all_ids" | grep '^wwn-' | head -n1 || true)
if [[ -n "$found_wwn" ]]; then
uuids+=("$found_wwn")
else
# Priorité 2: ata-/scsi-/nvme- selon le type de disque
local found_alt
found_alt=$(echo "$all_ids" | grep -E '^(ata-|scsi-|nvme-)' | head -n1 || true)
if [[ -n "$found_alt" ]]; then
uuids+=("$found_alt")
else
log "warning" "Aucun identifiant stable trouvé pour ${device_real}"
fi
fi
done <<< "$devices"