mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-06-28 12:16:53 +00:00
Update id.sh
This commit is contained in:
parent
b6af3bf679
commit
e099091706
@ -143,73 +143,77 @@ is_disk_in_use() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FREE_DISKS=()
|
FREE_DISKS=()
|
||||||
ACTIVE_MD_DEVICES=$(awk '/^md/ {for (i=4; i<=NF; i++) print $i}' /proc/mdstat)
|
ACTIVE_MD_DEVICES=$(awk '/^md/ {for (i=4; i<=NF; i++) print $i}' /proc/mdstat)
|
||||||
LVM_DEVICES=$(pvs --noheadings -o pv_name | xargs -n1 readlink -f | sed 's/ *$//' | sort -u)
|
LVM_DEVICES=$(pvs --noheadings -o pv_name 2>/dev/null | xargs -n1 readlink -f | sed 's/ *$//' | sort -u)
|
||||||
|
MOUNTED_DISKS=$(mount | grep /dev/sd | awk '{print $1}' | sort -u)
|
||||||
|
|
||||||
while read -r DISK; do
|
while read -r DISK; do
|
||||||
# Ocultar discos virtuales (como ZVOLs) y LVM completos
|
BASENAME=$(basename "$DISK")
|
||||||
|
|
||||||
|
# ❌ Excluir si es un ZVOL (zd*)
|
||||||
|
[[ "$BASENAME" == zd* ]] && continue
|
||||||
|
|
||||||
|
# ❌ Excluir si el disco completo está en LVM
|
||||||
if echo "$LVM_DEVICES" | grep -Fxq "$DISK"; then
|
if echo "$LVM_DEVICES" | grep -Fxq "$DISK"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ❌ Excluir si ya está en la VM seleccionada
|
||||||
|
if qm config "$VMID" | grep -q "$DISK"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
IS_MOUNTED=false
|
IS_MOUNTED=false
|
||||||
IS_RAID=false
|
IS_RAID=false
|
||||||
IS_RAID_ACTIVE=false
|
IS_RAID_ACTIVE=false
|
||||||
IS_ZFS=false
|
IS_ZFS=false
|
||||||
TAG=""
|
|
||||||
|
|
||||||
# Verificar si ya está en la VM seleccionada
|
|
||||||
if qm config "$VMID" | grep -q "$DISK"; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# Analizar particiones del disco
|
||||||
while read -r part fstype; do
|
while read -r part fstype; do
|
||||||
|
[[ -z "$part" ]] && continue
|
||||||
full_path="/dev/$part"
|
full_path="/dev/$part"
|
||||||
real_path=$(readlink -f "$full_path")
|
real_path=$(readlink -f "$full_path")
|
||||||
|
|
||||||
# Si está montado
|
# Verificar si está montado
|
||||||
if echo "$MOUNTED_DISKS" | grep -q "$full_path"; then
|
if echo "$MOUNTED_DISKS" | grep -q "$full_path"; then
|
||||||
IS_MOUNTED=true
|
IS_MOUNTED=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si está en LVM (volumen lógico)
|
# Verificar si alguna partición está en LVM
|
||||||
if echo "$LVM_DEVICES" | grep -Fxq "$real_path"; then
|
if echo "$LVM_DEVICES" | grep -Fxq "$real_path"; then
|
||||||
IS_MOUNTED=true
|
IS_MOUNTED=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$fstype" in
|
case "$fstype" in
|
||||||
|
zfs_member)
|
||||||
|
IS_ZFS=true
|
||||||
|
;;
|
||||||
linux_raid_member)
|
linux_raid_member)
|
||||||
IS_RAID=true
|
IS_RAID=true
|
||||||
if echo "$ACTIVE_MD_DEVICES" | grep -q "$part"; then
|
if echo "$ACTIVE_MD_DEVICES" | grep -q "$part"; then
|
||||||
IS_RAID_ACTIVE=true
|
IS_RAID_ACTIVE=true
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
zfs_member)
|
|
||||||
IS_ZFS=true
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
done < <(lsblk -ln -o NAME,FSTYPE "$DISK" | tail -n +2)
|
done < <(lsblk -ln -o NAME,FSTYPE "$DISK" | tail -n +2)
|
||||||
|
|
||||||
# Si está montado, lo descartamos
|
# ❌ ZFS detectado
|
||||||
if $IS_MOUNTED; then
|
$IS_ZFS && continue
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Obtener info para mostrar en el menú
|
# ❌ RAID activo o pasivo
|
||||||
|
$IS_RAID && continue
|
||||||
|
|
||||||
|
# ❌ Montado en el sistema
|
||||||
|
$IS_MOUNTED && continue
|
||||||
|
|
||||||
|
# 🧠 Información del disco
|
||||||
INFO=($(get_disk_info "$DISK"))
|
INFO=($(get_disk_info "$DISK"))
|
||||||
MODEL="${INFO[@]::${#INFO[@]}-1}"
|
MODEL="${INFO[@]::${#INFO[@]}-1}"
|
||||||
SIZE="${INFO[-1]}"
|
SIZE="${INFO[-1]}"
|
||||||
|
DESCRIPTION=$(printf "%-40s %10s" "$MODEL" "$SIZE")
|
||||||
|
|
||||||
# Etiqueta RAID/ZFS
|
|
||||||
if $IS_RAID; then
|
|
||||||
TAG=" ⚠ RAID"
|
|
||||||
$IS_RAID_ACTIVE && TAG=" ⚠ RAID (activo)"
|
|
||||||
elif $IS_ZFS; then
|
|
||||||
TAG=" ⚠ ZFS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DESCRIPTION=$(printf "%-30s %10s%s" "$MODEL" "$SIZE" "$TAG")
|
|
||||||
FREE_DISKS+=("$DISK" "$DESCRIPTION" "OFF")
|
FREE_DISKS+=("$DISK" "$DESCRIPTION" "OFF")
|
||||||
done < <(lsblk -dn -o PATH,TYPE | awk '$2 == "disk" {print $1}')
|
done < <(lsblk -dn -o PATH,TYPE | awk '$2 == "disk" {print $1}')
|
||||||
|
|
||||||
@ -217,6 +221,8 @@ done < <(lsblk -dn -o PATH,TYPE | awk '$2 == "disk" {print $1}')
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${#FREE_DISKS[@]}" -eq 0 ]; then
|
if [ "${#FREE_DISKS[@]}" -eq 0 ]; then
|
||||||
cleanup
|
cleanup
|
||||||
whiptail --title "$(translate "Error")" --msgbox "$(translate "No disks available for this VM.")" 8 40
|
whiptail --title "$(translate "Error")" --msgbox "$(translate "No disks available for this VM.")" 8 40
|
||||||
|
Loading…
x
Reference in New Issue
Block a user