Проверка серверной памяти через dmidecode
Проверка серверной памяти через dmidecode
Проверка серверной памяти через dmidecode
Инструкция для инженеров | Ubuntu Linux
1. Что такое dmidecode
dmidecode — утилита Linux, которая читает DMI/SMBIOS таблицу из BIOS сервера. Показывает информацию о каждом модуле памяти: производитель, серийный номер, part number, скорость, ранг, слот.
Главное применение: выявление SPD-клонов (поддельной HPE SmartMemory). Если два модуля имеют одинаковый серийный номер в SPD — это 100% подделка.
2. Установка
На Ubuntu обычно уже установлена. Если нет:
sudo apt install dmidecode
3. Основные команды
3.1 Полная информация о памяти
sudo dmidecode -t memory
Показывает всё: массив памяти (максимальная ёмкость, количество слотов, тип коррекции) и каждый установленный модуль.
3.2 Только модули (самое полезное)
sudo dmidecode -t 17
Type 17 = Memory Device. Показывает информацию по каждому DIMM отдельно.
3.3 Быстрая проверка на клоны (дубли серийников)
sudo dmidecode -t 17 | grep "Serial Number" | sort | uniq -c | sort -rn
Как читать результат:
· • Каждая строка показывает количество модулей с одинаковым серийником
· • Все числа должны быть "1" — каждый серийник уникален
· • Если число > 1 — найдены дубли = SPD-клоны (подделка)
Пример нормального результата:
1 Serial Number: 9223B300D8J
1 Serial Number: 4J4FF131A0D6
1 Serial Number: 161VJPR8P02Y
1 Serial Number: RWSTVC43KEB5RE
Пример подозрительного результата (клоны!):
4 Serial Number: 9223B300D8J ← 4 модуля с одним серийником!
1 Serial Number: 161VJPR8P02Y
3.4 Компактная таблица всех модулей
sudo dmidecode -t 17 | grep -E "Locator:|Size:|Speed:|Manufacturer:|Part Number:|Serial Number:|Rank:" | grep -v "Bank Locator"
Показывает ключевые поля для каждого модуля в удобном формате.
3.5 Только модули от не-HPE производителей
sudo dmidecode -t 17 | grep -B2 -A10 "Manufacturer:" | grep -v "HPE\|Hewlett" | grep -E "Locator:|Manufacturer:"
4. Расшифровка вывода
Пример вывода для одного DIMM на HPE DL380 Gen10:
Memory Device
Total Width: 72 bits
Data Width: 64 bits
Size: 32768 MB
Form Factor: DIMM
Locator: PROC 1 DIMM 1
Type: DDR4
Type Detail: Synchronous Registered (Buffered)
Speed: 2933 MT/s
Manufacturer: HPE
Serial Number: 9223B300D8J
Part Number: P03052-091
Rank: 2
Configured Memory Speed: 2933 MT/s
Configured Voltage: 1.2 V
Значение ключевых полей:
Поле | Что означает | На что обращать внимание |
Serial Number | Серийный номер из SPD EEPROM | Должен быть УНИКАЛЕН. Дубли = SPD-клон |
Manufacturer | Производитель / бренд | HPE = брендировано HPE. Samsung/Hynix/Micron без HPE = не SmartMemory |
Part Number | Assembly Part Number HPE | Должен быть валидный HPE PN (840757-091, P03052-091 и т.д.) |
Total Width | 72 bits = с ECC, 64 bits = без | 64 bits = НЕ серверная память! |
Type Detail | Тип модуля | "Registered (Buffered)" = RDIMM. "Unbuffered" = десктопная |
Speed vs Configured | Заявленная vs реальная | Если Configured < Speed — память понижена из-за несовместимости |
Rank | Кол-во рангов (1, 2, 4) | Влияет на производительность и совместимость |
Size | Объём модуля | Должен соответствовать маркировке на плашке |
5. Скрипт для полного аудита памяти
Сохранить как файл memory-audit.sh, запускать с правами root.
#!/bin/bash
# HPE Memory Audit Script
# Запуск: sudo bash memory-audit.sh
echo "=== MEMORY AUDIT $(hostname) $(date '+%Y-%m-%d %H:%M') ==="
echo ""
# Общая информация
echo "--- Physical Memory Array ---"
sudo dmidecode -t 16 | grep -E "Maximum Capacity|Number Of Devices|Error Correction"
echo ""
# Таблица всех модулей
echo "--- Installed DIMMs ---"
sudo dmidecode -t 17 | awk '
/^Memory Device$/ { slot=""; size=""; speed=""; mfr=""; pn=""; sn=""; rank="" }
/Locator:/ && !/Bank/ { gsub(/.*Locator: /, ""); slot=$0 }
/Size:/ { gsub(/.*Size: /, ""); size=$0 }
/^\tSpeed:/ { gsub(/.*Speed: /, ""); speed=$0 }
/Manufacturer:/ { gsub(/.*Manufacturer: /, ""); mfr=$0 }
/Part Number:/ { gsub(/.*Part Number: /, ""); pn=$0 }
/Serial Number:/ { gsub(/.*Serial Number: /, ""); sn=$0 }
/Rank:/ { gsub(/.*Rank: /, ""); rank=$0 }
/Configured Memory Speed:/ {
if (size != "" && size != "No Module Installed")
printf "%-18s | %-10s | %-12s | %-10s | %-14s | %-16s | %s\n", \
slot, size, speed, mfr, pn, sn, rank
}'
# Проверка дублей
echo ""
echo "--- Проверка SPD-клонов (дубли серийников) ---"
dupes=$(sudo dmidecode -t 17 | grep "Serial Number" \
| grep -v "Not Specified\|NO DIMM" | sort | uniq -d)
if [ -z "$dupes" ]; then
echo "Дубли НЕ найдены — ОК"
else
echo "ВНИМАНИЕ! Обнаружены дублирующиеся серийники:"
sudo dmidecode -t 17 | grep "Serial Number" \
| grep -v "Not Specified" | sort | uniq -c | sort -rn
fi
echo ""
echo "=== END ==="
6. Альтернатива: decode-dimms (прямое чтение SPD)
dmidecode читает данные из BIOS (который уже интерпретировал SPD). Для прямого чтения SPD EEPROM с плашки:
sudo apt install i2c-tools
sudo modprobe ee1004 # для DDR4
sudo decode-dimms
decode-dimms показывает сырые данные из SPD EEPROM, включая тайминги, CRC, vendor ID. На серверах HPE доступ к SMBus может быть ограничен — dmidecode надёжнее.
7. Практический план проверки памяти
1. 1. Установить модули памяти в сервер HPE
2. 2. Загрузить Ubuntu (Live USB или установленная)
3. 3. Выполнить команду проверки дублей серийников:
sudo dmidecode -t 17 | grep "Serial Number" | sort | uniq -c | sort -rn
4. 4. Если есть дубли — модули являются SPD-клонами (Класс 2)
5. 5. Сохранить полный отчёт для документации:
sudo dmidecode -t memory > memory-audit-$(hostname)-$(date +%Y%m%d).txt
6. 6. Сверить Serial Number из dmidecode с CT номером на наклейке модуля — у оригинала они должны коррелировать
Источники: Ubuntu manpages (dmidecode, decode-dimms), Baeldung, Linux Audit, HPE Community Forums, Stack Overflow.