Обновление микрокода процессора не загружено
Обновления микрокода закрывают аппаратные уязвимости и исправляют ошибки процессора, влияющие на устойчивость. Загружаются они очень рано, до монтирования корня, поэтому попадают в образ начальной загрузки — и обновление пакета без пересборки образа ничего не даёт.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Пакет микрокода не установлен
Без пакета ядро использует микрокод из прошивки, который может быть старым.
-
Образ начальной загрузки не обновлён
Микрокод загружается из образа. Установка пакета без пересборки образа не меняет ничего.
-
Уязвимости остаются незакрытыми
Часть мер защиты работает только при обновлённом микрокоде. Без него они отключены, и об этом сообщается отдельно.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Что ядро сообщает о микрокоде при загрузке.
journalctl -k -b --no-pager | grep -i microcodeСостояние мер защиты от аппаратных уязвимостей.
grep -r . /sys/devices/system/cpu/vulnerabilities/ 2>/dev/null | headКогда собирался образ начальной загрузки.
ls -l --time-style=full-iso /boot/initrd* | tail -2Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Без пакета ядро использует микрокод из прошивки, который может быть старым.
- Как проверить
-
Посмотрите сообщения ядра и наличие пакета.
journalctl -k -b --no-pager | grep -i microcode | head ls /lib/firmware/intel-ucode /lib/firmware/amd-ucode 2>/dev/null | head -3
- Как исправить
- Установите пакет микрокода для вашего процессора и пересоберите образ начальной загрузки. Без пересборки обновление не подхватится.
- Почему происходит
- Микрокод загружается из образа. Установка пакета без пересборки образа не меняет ничего.
- Как проверить
-
Посмотрите время сборки образа и установки пакета.
ls -l --time-style=full-iso /boot/initrd* 2>/dev/null | tail -2 journalctl -k -b --no-pager | grep -i "microcode updated early"
- Как исправить
- Пересоберите образ начальной загрузки штатным средством дистрибутива и перезагрузитесь. Запись о ранней загрузке микрокода — подтверждение успеха.
- Почему происходит
- Часть мер защиты работает только при обновлённом микрокоде. Без него они отключены, и об этом сообщается отдельно.
- Как проверить
-
Посмотрите состояние мер защиты.
grep -r . /sys/devices/system/cpu/vulnerabilities/ 2>/dev/null | head -10
- Как исправить
- Обновите микрокод и проверьте состояние мер защиты заново. Пометка о нехватке микрокода исчезнет.
Пример вывода
Микрокод не обновлён, часть мер защиты отключена. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
kernel: microcode: Current revision: 0x000000f0
kernel: microcode: Updated early from: 0x000000f0
kernel: RETBleed: WARNING: Spectre v2 mitigation leaves CPU vulnerable to RETBleed attacks, data leaks possible!
$ cat /sys/devices/system/cpu/vulnerabilities/mds
Vulnerable: Clear CPU buffers attempted, no microcode
Связанные ошибки
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
- Tainted в сообщениях ядра: что это значит при разборе сбоя Метка Tainted рядом с сообщением ядра: откуда берётся, на что влияет и почему её стоит учитывать.
- Параметр не работает: он появился в более новой версии systemd Настройка из документации не действует, потому что версия systemd на сервере старше. Как проверить версию и найти замену.
- systemd-modules-load: модуль не загружается при загрузке системы Служба загрузки модулей завершается с ошибкой: модуля нет, он встроен в ядро или заблокирован.
- systemd-sysctl: Couldn't write sysctl setting Настройки ядра не применяются при загрузке: параметра нет в ядре, модуль не загружен или конфликт описаний.
- Брандмауэр не загрузился при старте: ошибка в наборе правил Машина осталась без правил фильтрации: набор не загрузился из-за ошибки, отсутствующего объекта или порядка запуска.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
Источники
- Документация ядра: загрузка микрокода
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на машине с пакетом микрокода и без него.