```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 ```