diff --git a/driveAtlas.sh b/driveAtlas.sh index 1d53f33..66d2563 100644 --- a/driveAtlas.sh +++ b/driveAtlas.sh @@ -460,8 +460,10 @@ for bay in "${!DRIVE_MAP[@]}"; do fi done -# Sort drives by bay position -for bay in $(printf '%s\n' "${!DRIVE_MAP[@]}" | grep -E '^[0-9]+$' | sort -n); do +# Sort drives by bay position (numeric bays first, then m2 slots) +# Combine numeric bays (sorted numerically) with m2 slots (sorted alphanumerically) +all_bays=$(printf '%s\n' "${!DRIVE_MAP[@]}" | grep -E '^[0-9]+$' | sort -n; printf '%s\n' "${!DRIVE_MAP[@]}" | grep -E '^m2-' | sort) +for bay in $all_bays; do device="${DRIVE_MAP[$bay]}" if [[ -n "$device" && "$device" != "EMPTY" && -b "/dev/$device" ]]; then size=$(lsblk -d -n -o SIZE "/dev/$device" 2>/dev/null) @@ -513,22 +515,33 @@ for bay in $(printf '%s\n' "${!DRIVE_MAP[@]}" | grep -E '^[0-9]+$' | sort -n); d fi done -# NVMe drives +# NVMe drives (only show unmapped ones - mapped NVMe drives appear in main table) nvme_devices=$(lsblk -d -n -o NAME,SIZE | grep "^nvme" 2>/dev/null) -if [ -n "$nvme_devices" ]; then - echo -e "\n=== NVMe Drives ===" - printf "%-15s %-10s %-10s %-40s %-25s\n" "DEVICE" "SIZE" "TYPE" "MODEL" "SERIAL" - echo "------------------------------------------------------------------------------------------------------" - echo "$nvme_devices" | while read -r name size; do - device="/dev/$name" - # Get model and serial from smartctl for accuracy - smart_info=$(sudo smartctl -i "$device" 2>/dev/null) - model=$(echo "$smart_info" | grep "Model Number" | cut -d: -f2 | xargs) - serial=$(echo "$smart_info" | grep "Serial Number" | cut -d: -f2 | xargs) - [[ -z "$model" ]] && model="-" - [[ -z "$serial" ]] && serial="-" - printf "%-15s %-10s %-10s %-40s %-25s\n" "$device" "$size" "NVMe" "$model" "$serial" - done +if [[ -n "$nvme_devices" ]]; then + # Filter out already-mapped NVMe devices + unmapped_nvme="" + while read -r name size; do + if [[ -z "${DEVICE_TO_BAY[$name]:-}" ]]; then + unmapped_nvme+="$name $size"$'\n' + fi + done <<< "$nvme_devices" + + if [[ -n "$unmapped_nvme" ]]; then + printf "\n=== Unmapped NVMe Drives ===\n" + printf "%-15s %-10s %-10s %-40s %-25s\n" "DEVICE" "SIZE" "TYPE" "MODEL" "SERIAL" + echo "------------------------------------------------------------------------------------------------------" + echo "$unmapped_nvme" | while read -r name size; do + [[ -z "$name" ]] && continue + device="/dev/$name" + # Get model and serial from smartctl for accuracy + smart_info="$(sudo smartctl -i "$device" 2>/dev/null)" + model="$(echo "$smart_info" | grep "Model Number" | cut -d: -f2 | xargs)" + serial="$(echo "$smart_info" | grep "Serial Number" | cut -d: -f2 | xargs)" + [[ -z "$model" ]] && model="-" + [[ -z "$serial" ]] && serial="-" + printf "%-15s %-10s %-10s %-40s %-25s\n" "$device" "$size" "NVMe" "$model" "$serial" + done + fi fi #------------------------------------------------------------------------------