Сразу к делу: старые ядра копятся потому, что pacman при обновлении пакета linux не удаляет предыдущую версию. Несколько ядер в системе живут одновременно по замыслу, а меню GRUB хранит старые записи, пока ты не перегенерируешь конфиг. Чистка сводится к трём шагам: посмотреть, что установлено (pacman -Q | grep '^linux'), удалить лишние семейства ядер (pacman -Rns linux-lts), затем обновить меню загрузчика (grub-mkconfig -o /boot/grub/grub.cfg). Заодно подчисти кэш пакетов через paccache.
Каждый пакет ядра кладёт файлы в /boot (vmlinuz-linux, initramfs-linux.img, initramfs-linux-fallback.img) и дерево модулей в /usr/lib/modules/<версия>. При обновлении pacman ставит новую версию рядом со старой, а не вместо неё. Старое ядро остаётся на диске, пока ты не удалишь его вручную.
При каждом обновлении pacman запускает хуки mkinitcpio, которые собирают initramfs для новой версии. Старые образы при этом не трогаются, они остаются лежать рядом. Так за пару месяцев набирается несколько комплектов файлов, и каждый тянет за собой дерево модулей.
GRUB добавляет в меню запись для каждого найденного ядра. Старые записи исчезают только после перегенерации grub.cfg. Пока ты этого не сделал, меню растёт с каждым обновлением.
Отдельная история с отдельным /boot или ESP: если раздел маленький, он забивается быстрее. Разбор похожей ситуации с переполненным EFI-разделом есть в статье «EFI-раздел переполнен: чистка».
Initramfs это маленькая файловая система, которую ядро загружает в память на старте. Внутри лежат модули и скрипты, нужные, чтобы найти и смонтировать корневой раздел: драйверы дисков, поддержка LVM, LUKS, btrfs. Без initramfs ядро не знает, где искать корень, и падает в kernel panic.
Для каждого ядра mkinitcpio собирает два образа: обычный initramfs-linux.img и запасной initramfs-linux-fallback.img. Fallback включает больше модулей и драйверов, поэтому весит больше. Он выручает, если обычный образ не подходит к твоему железу, например после смены диска или контроллера.
Оба образа лежат в /boot и занимают место. При удалении ядра через pacman -Rns хуки убирают их автоматически. Если в /boot остался initramfs без соответствующего ядра, это след ручной сборки или переноса системы.
Перед чисткой полезно оценить масштаб:
du -sh /boot # размер загрузочного раздела
du -sh /usr/lib/modules # размер деревьев модулей всех ядер
Первая команда покажет размер /boot, вторая покажет, сколько места тянут модули всех установленных ядер. Если /boot отдельный раздел, df -h /boot подскажет, насколько он заполнен. Если /boot входит в корневой раздел, отдельная возня не нужна: место освободится там же, где и занялось. Дальше решай, что удалять.
Начни с простого списка:
pacman -Q | grep '^linux' # список пакетов ядра
Вывод покажет пакеты, имена которых начинаются с linux: само ядро (linux), альтернативные (linux-lts, linux-zen, linux-hardened), заголовки (linux-headers, linux-lts-headers) и прочее вроде linux-firmware.
Чтобы узнать версию каждого пакета, добавь -s:
pacman -Qs linux # версии установленных ядер
Так ты увидишь, какая версия у каждого ядра и какие пакеты к нему относятся. Версию конкретного пакета можно спросить напрямую:
pacman -Q linux # версия основного ядра
Сверь с работающим ядром:
uname -r # версия работающего ядра
Эта команда показывает версию текущего ядра. Её удалять нельзя ни в коем случае.
Если linux-lts больше не нужен, удаляй его вместе с заголовками:
pacman -Rns linux-lts linux-lts-headers # удалить семейство LTS
Флаг -Rns удаляет пакет, его зависимости, которые больше никому не нужны, и конфиги. Хуки mkinitcpio при этом подчищают файлы из /boot: vmlinuz-linux-lts, initramfs-linux-lts.img, initramfs-linux-lts-fallback.img. Дерево модулей /usr/lib/modules/<версия> тоже исчезает.
Перед удалением всегда проверяй uname -r. Если текущее ядро 6.x-arch1, а ты собрался сносить linux-lts версии 6.x-lts, всё в порядке. Но если система работает именно на LTS-ядре, удаление сломает загрузку.
Тот же приём работает для linux-zen, linux-hardened и любых других семейств: подставь имя пакета в команду. Главное, чтобы в системе осталось хотя бы одно рабочее ядро.
Иногда после удаления пакета в /boot остаются лишние файлы. Чаще всего это ядра, скопированные вручную, или остатки от экспериментов с загрузчиком. Посмотри, что лежит:
ls /boot # что лежит в загрузочном разделе
Ты увидишь vmlinuz-linux-* и initramfs-*.img для каждой версии. Чтобы понять, какие файлы раздувают раздел, отсортируй их по размеру:
ls -lhS /boot # сортировка по размеру
Флаг -S сортирует по размеру, -h показывает человекочитаемые значения. Самые тяжёлые файлы в списке, их и удаляй в первую очередь. Сверь список с uname -r и удали всё, что не относится к текущему ядру и тому, которое хочешь оставить запасным:
rm /boot/vmlinuz-linux-старая-версия # только после сверки с uname -r
rm /boot/initramfs-старая-версия.img
Правило простое: никогда не удаляй vmlinuz-linux и initramfs-linux.img того ядра, на котором система работает прямо сейчас. Сначала uname -r, потом rm.
Кэш pacman лежит в /var/cache/pacman/pkg. Он не имеет отношения к /boot, но тоже разрастается: там хранятся все скачанные версии пакетов, включая старые ядра. Почистить его можно утилитой paccache из пакета pacman-contrib:
paccache -rk1 # оставить одну версию каждого пакета
Флаг -rk1 оставляет по одной последней версии каждого установленного пакета, остальное удаляет. Для пакетов, которые уже удалены из системы, убери всё:
paccache -ruk0 # удалить кэш удалённых пакетов
Если paccache не установлен, поставь pacman-contrib или используй старый добрый pacman -Sc, который удаляет из кэша всё, кроме последних версий установленных пакетов.
Если хочешь, чтобы кэш чистился сам, включи таймер из pacman-contrib:
systemctl enable --now paccache.timer
Он запускает paccache раз в неделю с параметрами по умолчанию. Дальше можно не вспоминать про кэш.
Важно понимать: paccache и pacman -Sc чистят /var/cache/pacman/pkg, а не /boot. Если у тебя отдельный ESP и он забит именно ядрами, кэш тут не поможет. Нужны pacman -Rns и ручная чистка /boot. Подробнее про команды pacman можно почитать в статье «pacman от А до Я: команды».
После удаления ядер записи в меню GRUB остаются. Чтобы убрать их, перегенерируй конфиг:
grub-mkconfig -o /boot/grub/grub.cfg # пересобрать меню загрузчика
Команда заново сканирует /boot, находит оставшиеся ядра и собирает меню заново. Старые пункты исчезают. Если в меню до этого было несколько ядер и ты не понимал, откуда они взялись, разбор есть в статье «Несколько ядер в меню: linux, lts, hardened».
Оптимально два: текущее и предыдущее. Текущее работает, предыдущее служит запасным, если новое ядро откажется загружаться или сломает что-то в системе. Держать пять версий смысла нет: место тратится, а пользы ноль.
Какое ядро выбрать основным, LTS или обычное, разобрано в статье «Какое ядро выбрать: linux, lts, zen, hardened».
Если ты ставил несколько ядер специально, например для отладки или сравнения, не сноси их все подряд. Оставь рабочее и одно запасное, остальное можно убрать. Проверять список ядер можно раз в пару месяцев, приурочив к обновлению системы.
После удаления ядер и перегенерации меню перезагрузись и проверь:
uname -r
Версия должна совпадать с ядром, которое ты оставил основным. В меню GRUB останутся только записи для установленных ядер. Если система вдруг не загрузилась, выбери в меню второе ядро, предыдущее. Для этого его и держат.
Заодно глянь, что показывает меню GRUB при загрузке. Если там остались пункты с удалёнными ядрами, значит grub-mkconfig не отработал или ты правил grub.cfg вручную. Повтори генерацию конфига.
Нет. Сначала проверь uname -r, потом сравнивай с тем, что собираешься удалять. Снос работающего ядра оставит систему без загрузки: GRUB будет показывать запись, но ядро не найдётся, а initramfs без ядра не поможет.
Система будет загружаться, но без запаса. Если это ядро сломается при обновлении, откатываться будет не на что. Два ядра, текущее и предыдущее, безопаснее: одно работает, второе страхует.
Нет. paccache работает только с кэшем в /var/cache/pacman/pkg. Файлы в /boot удаляет pacman -Rns или ты сам через rm. Кэш и загрузочный раздел живут в разных местах, и чистятся они по-разному.
GRUB показывает и обычный режим, и fallback-initramfs для каждого ядра. Плюс старые записи не исчезают, пока не выполнишь grub-mkconfig. После чистки и перегенерации меню станет короче.
Такое сообщение появляется, когда initramfs собирался при другом ядре, чем то, что сейчас в системе. Обычно это следствие ручной сборки или переноса системы. Разбор случая есть в статье «initramfs создан с другим ядром».
Старые ядра копятся сами, но чистятся за пару минут. Посмотри список (pacman -Q | grep '^linux'), сверь с uname -r, удали лишние семейства через pacman -Rns, подчисти кэш через paccache -rk1 и перегенерируй меню GRUB. Оставляй два ядра: текущее и предыдущее. Тогда /boot не переполнится, а система всегда сможет загрузиться. Если раздел уже забит под завязку, начни с самого старого ядра и не забудь про fallback-образы: они весят больше всего.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии