Как исправить 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
- Диагностика переполнения NVRAM
- Полная очистка NVRAM до заводских настроек
- Удаление конкретных проблемных переменных
- Запрет записи Linux в NVRAM
- Дополнительные шаги после очистки
- Источники
- Заключение
Что вызывает ошибку 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 не тронет.
Дополнительные шаги после очистки
Сбросили? Теперь:
- Загрузитесь в live,
sudo mount /dev/sdXY /mnt(ESP), удалите EFI/ubuntu/Microsoft если есть. sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --no-nvram.sudo update-grub.- В BIOS добавьте EFI/BOOT/bootx64.efi вручную.
Если persists: обновите BIOS еще раз, проверьте TPM в BIOS (disable). Для Mint/Astra — sudo apt install shim-signed mokutil.
Тестируйте: mokutil --sb-state должно показать Enabled без ошибок.
Источники
- Linux Mint Forums: import_moks_state() failed: Volume Full
- Shim GitHub: Too big dbx causes Volume Full
- Arch Linux Forums: NVRAM full - DbocBoot
- LiveJournal: cleaning kernel dumps from UEFI NVRAM
- Unix StackExchange: Could not create MokListRT Volume Full
- 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!