Proxmox setup
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
```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
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user