Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

EFI-раздел переполнен: чистка и рост

Коротко: EFI-раздел переполнен, когда на нём кончилось место, и обновления ядра или GRUB падают с ошибкой No space left on device. Лечится это в три шага: проверь занятость (df -h /boot), удали старые ядра и мусор (pacman -Rsn linux-lts, ручная зачистка), а если места всё равно не хватает, увеличь раздел через fdisk или gparted. Ниже каждый шаг разобран по порядку.

Как понять, что EFI-раздел переполнен?

ESP (EFI System Partition): маленький FAT32-раздел, на котором лежат загрузчик и ядра. На старых установках его делали размером 100–300 МБ, и этого хватало ровно до момента, пока в /boot не накопилось несколько ядер с initramfs.

Типичные симптомы:

  • grub-install падает с No space left on device;
  • обновление пакета linux не записывает новый initramfs-linux.img;
  • pacman ругается на ошибку записи при обновлении ядра;
  • grub-mkconfig отрабатывает, но новые ядра не попадают в меню.

Проверка занимает одну команду:

df -h /boot

Если строка /boot показывает 100% занятости, диагноз подтверждён. Если ESP смонтирована в /efi, смотри её:

df -h /efi

Заодно проверь, куда вообще смонтирована ESP:

findmnt /boot

На старых установках ESP монтируют в /boot, тогда ядра лежат прямо на ней. На новых: в /efi, а ядра и initramfs живут на корневом разделе. Во втором случае переполнение ESP почти невозможно, но загрузчик всё равно может не влезть, если раздел совсем крошечный.

Что занимает место на ESP?

Посмотри содержимое:

ls -lh /boot
du -sh /boot/*

Главные пожиратели места:

  • Старые ядра. Каждое ядро с initramfs занимает порядка сотни мегабайт: vmlinuz-linux + initramfs-linux.img. Плюс к каждому ядру идёт initramfs-linux-fallback.img: ещё один образ на случай сбоя. Три ядра, и половина раздела уже занята.
  • Резервные копии GRUB. После обновления GRUB оставляет /boot/grub.bak и /boot/grub.prev: полные копии каталога grub, по десятку мегабайт каждая. Они нужны для отката, но после пары обновлений превращаются в мусор.
  • Дубли в EFI/. Если загрузчик переустанавливали несколько раз, в EFI/ копятся EFI/Arch, EFI/GRUB, EFI/refind, а при dualboot ещё и EFI/Microsoft. Каждый каталог: отдельная копия загрузчика со своими файлами.
  • Снапшоты. Если ESP сделана на btrfs и включён snap-pac, снапшоты тоже съедают место. Каждый снапшот хранит копии файлов /boot, и при частых обновлениях их набирается десяток.
  • Остатки os-prober. Иногда в /boot остаются временные файлы от сканирования других систем. Они мелкие, но в сумме с остальным добивают раздел.

Как почистить EFI-раздел?

Удали лишние ядра через pacman

Сначала посмотри, какие ядра установлены:

pacman -Q linux linux-lts linux-zen

Команда покажет версии установленных ядер. Те, что не используешь, удаляй через pacman, так удалятся и vmlinuz, и initramfs, и хуки mkinitcpio:

pacman -Rsn linux-lts

Флаг -s убирает зависимости, -n не сохраняет конфиги. После удаления перегенерируй конфиг GRUB:

grub-mkconfig -o /boot/grub/grub.cfg

Какое ядро оставить, а какое выкинуть, разобрано в статье «Какое ядро выбрать: linux, linux-lts, linux-zen или hardened». Если в меню GRUB накопилось много ядер, смотри «Несколько ядер в меню: linux, linux-lts, hardened».

Удали старые резервные копии GRUB

ls -d /boot/grub.bak /boot/grub.prev 2>/dev/null

Если каталоги есть и ты уверен, что текущий /boot/grub рабочий, удаляй:

rm -rf /boot/grub.bak /boot/grub.prev

Про откат GRUB на случай, если свежая версия сломает загрузку, в статье «Откат обновления GRUB».

Разберись с дублями в EFI/

ls /boot/EFI

Типичная картина: Arch, GRUB, Microsoft, refind. Оставь только то, чем реально пользуешься. EFI/Microsoft не трогай, если в системе есть Windows, удаление сломает её загрузку. Лишние каталоги удаляй:

rm -rf /boot/EFI/refind

Удали случайные файлы

ls -lh /boot

Если в /boot валяются файлы, которых ты не создавал (например, остатки os-prober или старые образы), удали их. Главное, не трогай vmlinuz-*, initramfs-* и каталог grub, пока не разобрался, что к чему.

Проверь снапшоты на btrfs

Если ESP на btrfs и включён snap-pac, посмотри список снапшотов:

snapper -c root list

Старые снапшоты удаляются через snapper delete. Про настройку btrfs со снапшотами в статье «Установка Arch Linux с btrfs и снапшотами».

Как увеличить EFI-раздел?

Если после чистки места всё равно мало, раздел нужно растить. ESP обязана быть FAT32, минимальный размер: 300 МБ, но ArchWiki рекомендует сразу делать её в 1 ГБ.

Проще всего это сделать в gparted (графический инструмент):

  1. Уменьши соседний раздел, освободив место сразу после ESP. Выдели его, выбери «Resize/Move» и потяни правую границу влево.
  2. Выдели ESP и растяни её на свободное место: «Resize/Move» и тяни правую границу вправо.
  3. Нажми «Apply» и дождись завершения.

Уменьшать раздел лучше с live-USB, чтобы он не был смонтирован. Перед операцией проверь файловую систему соседнего раздела, gparted сам предложит это сделать.

Из консоли через fdisk:

fdisk /dev/nvme0n1

Внутри: p, посмотреть таблицу разделов, d, удалить раздел ESP, n, создать заново с тем же номером и большим размером, t, выставить тип EFI System, w, записать. Затем пересоздай файловую систему и верни файлы:

mkfs.fat -F32 /dev/nvme0n1p1
mount /dev/nvme0n1p1 /mnt
cp -a /boot/. /mnt/

И переустанови загрузчик:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

Внимание: fdisk-метод удаляет раздел. Если ошибиться с номером, потеряешь файлы. Перед работой сделай резервную копию /boot на флешку.

После пересоздания раздела проверь, что файлы на месте, и перезагрузись. Если GRUB не стартует, загрузись с live-USB и повтори grub-install из chroot, как описано в статье «grub rescue: что делать».

Как перенести ESP на больший раздел?

Если рядом нет места, чтобы растянуть ESP, проще создать новый раздел побольше и перенести содержимое.

  1. Создай новый раздел (например, 1 ГБ) в конце диска через fdisk или gparted.
  2. Сделай на нём FAT32:
mkfs.fat -F32 /dev/nvme0n1p4
  1. Скопируй файлы со старой ESP:
mount /dev/nvme0n1p1 /mnt/old
mount /dev/nvme0n1p4 /mnt/new
cp -a /mnt/old/. /mnt/new/
  1. Обнови /etc/fstab, подставь UUID нового раздела:
blkid /dev/nvme0n1p4
  1. Переустанови GRUB с указанием нового раздела и перегенерируй конфиг:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
  1. Перезагрузись и проверь, что система поднялась. Старый раздел можно удалить, когда убедишься, что всё работает.

Вместо cp -a можно склонировать раздел целиком через dd, тогда UUID переедет вместе с файлами, и fstab править не придётся. Минус в том, что dd копирует и пустое место, так что на маленькой ESP это лишняя трата времени.

Как не допустить переполнения снова?

Главное правило: не копить ядра. Держи одно-два ядра, остальные удаляй сразу после обновления.

Для пакетов ядра удобно использовать paccache, он чистит старые версии из кэша pacman:

paccache -rk1

Флаг -r удаляет старые версии, -k1 оставляет одну последнюю. Для ядер этого достаточно: свежая версия уже установлена, а откатиться можно через pacman -U из кэша.

Раз в пару месяцев заглядывай в /boot:

ls -lh /boot

Если видишь лишнее, чисти сразу, пока раздел не заполнился до отказа. После каждого обновления ядра тоже проверяй, что старые файлы не остались висеть. Про общий случай, когда заполняется корневой раздел, в статье «Корневой раздел заполняется: что делать».

Частые вопросы

Можно ли просто удалить файлы ядра вручную из /boot?

Можно, но pacman будет считать пакет установленным и при следующем обновлении вернёт файлы. Правильный путь, pacman -Rsn linux-lts: так удалятся и пакет, и файлы, и хуки.

Что делать, если grub-install падает с No space left on device прямо сейчас?

Удали одно лишнее ядро через pacman -Rsn, затем grub-mkconfig -o /boot/grub/grub.cfg. Если ядер нет, удали /boot/grub.bak и /boot/grub.prev. Затем grub-install пройдёт.

Нужно ли хранить несколько ядер?

Достаточно одного рабочего ядра и одного запасного (например, linux + linux-lts). Остальные, мёртвый груз: каждое занимает место на ESP и удлиняет меню GRUB.

Можно ли смонтировать ESP в /efi вместо /boot?

Да, это современный стандарт: ядра и initramfs тогда лежат на корневом разделе, а на ESP только загрузчик. Место на ESP перестаёт быть узким местом. Но это отдельная миграция, в рамках этой статьи не разбирается.

Что будет, если удалить EFI/Microsoft?

Windows перестанет загружаться. Если Windows не нужна, удаляй, но сначала убедись, что не планируешь возвращаться к dualboot.

Полезные ресурсы

Заключение

Переполненный EFI-раздел: не поломка, а следствие накопленного мусора. Проверь df -h /boot, удали лишние ядра через pacman -Rsn, зачисти резервные копии GRUB и дубли в EFI/. Если места не хватает даже после чистки, увеличь раздел через gparted или fdisk, либо перенеси ESP на новый раздел. А чтобы не возвращаться к этой проблеме, держи одно-два ядра и раз в пару месяцев заглядывай в /boot.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max