Все об 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