Files
Utils/Proxmox/Test_NVMe/README.md
T
2025-06-19 10:41:49 +03:00

84 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
```bash
#!/bin/bash
echo "🔍 NVMe Disk Health Report"
echo "=========================="
echo
# Проверка наличия утилиты
if ! command -v nvme &>/dev/null; then
echo "❌ Утилита 'nvme' не найдена. Установите: sudo apt install nvme-cli"
exit 1
fi
# Поиск всех NVMe-дисков
NVME_DISKS=$(ls /dev/nvme*n1 2>/dev/null | grep -E '^/dev/nvme[0-9]n1$')
if [[ -z "$NVME_DISKS" ]]; then
echo "❌ NVMe диски не найдены"
exit 1
fi
for DISK in $NVME_DISKS; do
echo "📦 Проверка: $DISK"
echo "--------------------------"
CONTROLLER="/dev/$(basename "$DISK" | sed 's/n1$//')"
TEMP_FILE=$(mktemp)
# Получение SMART-лога
nvme smart-log "$CONTROLLER" > "$TEMP_FILE"
# Парсинг значений
USED=$(grep -i "percentage_used" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
TEMP_C=$(grep -i "^temperature[^_]" "$TEMP_FILE" | grep -oP '[0-9]+(?=°C)' | sort -nr | head -n1)
MEDIA_ERR=$(grep -i "media_errors" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
NUM_ERR=$(grep -i "num_err_log_entries" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
SPARE=$(grep -i "available_spare[^_]" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
DATA_WRITTEN=$(grep -i "Data Units Written" "$TEMP_FILE" | grep -oP '\\([0-9\\.]+ TB\\)' | tr -d '()')
POWER_HOURS=$(grep -i "power_on_hours" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
UNSAFE_SHUTDOWNS=$(grep -i "unsafe_shutdowns" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
# Расчёт времени наработки
if [[ -n "$POWER_HOURS" && "$POWER_HOURS" -gt 0 ]]; then
DAYS=$((POWER_HOURS / 24))
YEARS=$(echo "scale=1; $DAYS / 365" | bc)
UPTIME="$POWER_HOURS ч / $DAYS дн / ${YEARS} г"
else
UPTIME="N/A"
fi
# Вывод
echo "🧠 Износ SSD: ${USED:-N/A}%"
echo "🌡 Температура: ${TEMP_C:-N/A}°C"
echo "💾 Оставшийся запас: ${SPARE:-N/A}%"
echo "📉 Записано всего: ${DATA_WRITTEN:-N/A}"
echo "⏱ Время наработки: $UPTIME"
echo "⚠️ Media Errors: ${MEDIA_ERR:-N/A}"
echo "❗ Controller Errors: ${NUM_ERR:-N/A}"
echo "🔌 Unsafe Shutdowns: ${UNSAFE_SHUTDOWNS:-N/A}"
# Оценка состояния
echo -n "🔎 Оценка: "
if [[ -n "$USED" && "$USED" -ge 90 ]]; then
echo "❌ SSD почти исчерпан"
elif [[ -n "$TEMP_C" && "$TEMP_C" -ge 60 ]]; then
echo "⚠️ Высокая температура"
elif [[ -n "$NUM_ERR" && "$NUM_ERR" -gt 100 ]]; then
echo "⚠️ Ошибки контроллера превышают норму"
elif [[ -n "$UNSAFE_SHUTDOWNS" && "$UNSAFE_SHUTDOWNS" -gt 10 ]]; then
echo "⚠️ Много аварийных отключений питания"
else
echo "✅ Состояние хорошее"
fi
echo
# Модель, серийник, прошивка
echo "📄 Инфо:"
nvme id-ctrl "$CONTROLLER" | grep -Ei "mn|sn|fr"
echo
rm -f "$TEMP_FILE"
done
```