ОС

Как исправить Volume Full в NVRAM UEFI при загрузке Linux

Ошибка Volume Full при загрузке Linux на UEFI возникает из-за переполнения NVRAM. Полная очистка NVRAM до заводских настроек, удаление переменных db, MokListRT и запрет записи от Linux. Шаги по диагностике, сбросу через BIOS и efibootmgr.

Как исправить ошибку ‘Volume Full’ при загрузке Linux на UEFI с NVRAM?

Описание проблемы:
При попытке загрузки Linux возникает ошибка ‘Volume Full’, после чего компьютер выключается.

Что проверено и попробовано:

  • Просмотр NVRAM (список переменных с сортировкой по размеру), попытка очистки.
  • Команды chattr -i && rm -f — выполняются без ошибок, но ничего не удаляется.
  • Удаление dbDefault через UEFI Shell — ‘variable is readonly’.
  • Перепрошивка BIOS (через Ez Flash) и сброс CMOS (CLRTC) — проблема не исчезла.
  • После перепрошивки удалил некоторые ключи db из меню, остальные показывают размер 0.

Дополнительно:

  • Загрузка с shimx64.efi и grubx64.efi — та же ошибка.
  • Live-образы Linux с USB загружаются без проблем.
  • Boot-записей всего две.

Вопросы:

  • Как полностью очистить NVRAM (до заводских настроек)?
  • Можно ли запретить Linux записывать в NVRAM?

Ошибка “Volume Full” при загрузке Linux на UEFI возникает из-за переполнения NVRAM — памяти для переменных Secure Boot, MOK-листов и boot-записей. Чтобы исправить, полностью очистите NVRAM через BIOS (опция Clear NVRAM или reset Secure Boot) или команды efibootmgr -b XXXX -B, а для предотвращения записи от Linux отключите Secure Boot или добавьте параметры в GRUB. Live-образы работают, потому что не пишут в NVRAM, — проблема только при установке с shim/grub.


Содержание


Что вызывает ошибку Volume Full в NVRAM UEFI

Представьте: вы вставляете флешку с Linux, жмете Enter — и бац, “Could not create MokListRT: Volume Full”. Компьютер гаснет. Почему так? NVRAM в UEFI — это крохотная неволатильная память (обычно 128-256 КБ), куда пишутся boot-entries, ключи Secure Boot (db, dbx), MOK-листы от shim и даже дампы kernel panic. Когда она заполняется, shimx64.efi или grubx64.efi не могут добавить свою запись — отсюда “Volume Full”.

В вашем случае Live-USB грузится нормально: live-образы не трогают NVRAM, они стартуют прямо из RAM. А при установке или полной загрузке shim пытается импортировать MOK-state и ломается на import_moks_state() failed. Плюс TPM 2.0 может усугублять: event log в TPM переполняется большими dbx (как в Ubuntu 24.04), и shim абортирует по спецификации TCG. Сброс CMOS или прошивка BIOS не всегда помогает — они не стирают все переменные, особенно если OEM вроде Dell оставляет DbocBoot* или pstore-dump’ы.

Коротко: виноваты накопившиеся ключи (dbDefault readonly), boot-записи и логи. Но всего две boot-записи? Значит, дело в “мусоре” вроде dump* или TPM-логов.


Диагностика переполнения NVRAM

Сначала посмотрите, что жрет место. Загрузитесь в Linux Live (он работает же!) и откройте терминал. Команда df -h /sys/firmware/efi/efivars покажет заполненность — если >50-70%, bingo. Далее ls -lSh /sys/firmware/efi/efivars | sort -h отсортирует по размеру: ищите db*, MokListRT*, DbocBoot*, dump* (kernel panics из pstore).

sudo efibootmgr -v выведет boot-entries — номера BootXXXX. UEFI Shell (если есть на флешке): efivar -l или bcfg boot dump -v. В вашем случае chattr -i && rm не удаляло? Потому что immutable-флаг не всегда снимается, или переменные регенерируются. dbDefault readonly — типично, их трогать только через BIOS.

А nvram warning err 0x10? Это от WiFi или сети, но связано с проверкой NVRAM при загрузке. Проверьте sudo efivar -p -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-dbDefault — размер покажет правду.


Полная очистка NVRAM до заводских настроек

Вот главный вопрос: как сбросить NVRAM полностью? Не полумеры — до нуля, как с завода.

Способ 1: Через BIOS/UEFI.
Зайдите в настройки (Del/F2 при POST). В разделе Boot или Security:

  • Ищите “Clear NVRAM”, “Reset NVRAM Variables” или “Load Optimized Defaults”.
  • Если Secure Boot on — отключите, сохраните, выйдите, перезагрузитесь, включите обратно. Это сотрет MOK и ключи.
  • Нет опции? “Restore Factory Keys” или full CMOS reset (джампер CLRTC на материнке, или батарейку вынуть на 10 мин).

После прошивки Ez Flash (вы пробовали) удалили db из меню — молодцы, но размер 0 значит, они пустые. Перезагрузитесь в BIOS еще раз — опция может появиться только с Secure Boot.

Способ 2: UEFI Shell.
Скачайте shell.efi на флешку, загрузитесь с нее. Команды:

reset -x # Холодный сброс
map -r # Пересканировать
bcfg boot rm all # Удалить все boot

Или для каждой: bcfg boot delete N (N — номер).

Способ 3: Из Linux (радикально).

for var in /sys/firmware/efi/efivars/*; do sudo efivar -d "${var##*/}"; done

Но осторожно — brick возможен на некоторых платах. Лучше systemd-pstore для dump*.

После любого сброса: перезагрузка, проверка df -h /sys/firmware/efi/efivars — должно быть пусто.


Удаление конкретных проблемных переменных

Если полный сброс пугает, целевой удар. Ваши chattr/rm не сработали? Попробуйте по-новому.

Boot-entries:
sudo efibootmgr -b 0001 -B (замените 0001 на номер из -v). Для всех лишних.

DbocBoot (Dell/OEM):*

sudo chattr -i /sys/firmware/efi/efivars/DbocBoot*
sudo rm -f /sys/firmware/efi/efivars/DbocBoot*

Dump (pstore):*
Включите systemd-pstore.service: sudo systemctl enable --now systemd-pstore. Дампы уйдут в journal, efivars очистится после ребута.

db/dbDefault/dbX:
Readonly? Только BIOS или mokutil --reset (но сначала Secure Boot off). В shell: dmpstore -d для pstore.

Shim с большой dbx? Обновите shim или tpm=off в GRUB (пока не загрузится).

Перезагрузитесь — ошибка уйдет, если место освободилось.


Запрет записи Linux в NVRAM

Да, можно! Linux пишет в NVRAM только при Secure Boot + shim/MOK. Решения:

1. Отключите Secure Boot навсегда.
В BIOS → Security → Secure Boot → Disabled. Тогда grubx64.efi без MOK, никаких записей. Минус: уязвимости, но для home ок.

2. Параметры GRUB.
Отредактируйте /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash tpm=off noefi pstore.disable=1". Затем sudo update-grub. noefi запретит EFI-writes, pstore.disable — дампы.

3. Mokutil.
sudo mokutil --disable-validation. Перезагрузка, в MOK-меню отключите.

4. Shim без TPM.
Загрузитесь с grubx64.efi напрямую (не shim), скопировав в EFI/BOOT.

Live работает без записи — так и ставьте: chroot из live, grub-install --no-nvram.

NVRAM останется чистым, Linux не тронет.


Дополнительные шаги после очистки

Сбросили? Теперь:

  1. Загрузитесь в live, sudo mount /dev/sdXY /mnt (ESP), удалите EFI/ubuntu/Microsoft если есть.
  2. sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --no-nvram.
  3. sudo update-grub.
  4. В BIOS добавьте EFI/BOOT/bootx64.efi вручную.

Если persists: обновите BIOS еще раз, проверьте TPM в BIOS (disable). Для Mint/Astra — sudo apt install shim-signed mokutil.

Тестируйте: mokutil --sb-state должно показать Enabled без ошибок.


Источники

  1. Linux Mint Forums: import_moks_state() failed: Volume Full
  2. Shim GitHub: Too big dbx causes Volume Full
  3. Arch Linux Forums: NVRAM full - DbocBoot
  4. LiveJournal: cleaning kernel dumps from UEFI NVRAM
  5. Unix StackExchange: Could not create MokListRT Volume Full
  6. Linux Mint Forums: import_mok_state() failed

Заключение

Сброс NVRAM UEFI через BIOS или efibootmgr решит Volume Full при загрузке Linux — главное, полный clear до завода и проверка efivars. Запретите запись отключением Secure Boot или GRUB-параметрами вроде tpm=off, чтобы не возвращалось. После этого установка пройдет гладко, без выключений. Если железо старое (малый NVRAM), держите Secure Boot off — надежнее. Удачи с linux uefi!

Авторы
Проверено модерацией
Модерация
Как исправить Volume Full в NVRAM UEFI при загрузке Linux