Вопрос или проблема
Старые файлы ядра накапливаются, и я хотел бы удалить все, кроме текущей версии и двух предыдущих версий, чтобы очистить немного пространства.
Когда я выполняю apt autoremove
, старые ядра не распознаются как подлежащие удалению.
Я заглянул в /etc/apt/apt.conf.d/01autoremove
, и похоже, что все пакеты linux-image
покрыты параметром NeverAutoRemove
, что объясняет, почему они не захватываются apt autoremove
. Вот содержимое:
APT
{
NeverAutoRemove
{
"^firmware-linux.*";
"^linux-firmware$";
"^linux-image-[a-z0-9]*$";
"^linux-image-[a-z0-9]*-[a-z0-9]*$";
};
VersionedKernelPackages
{
# ядра
"linux-.*";
"kfreebsd-.*";
"gnumach-.*";
# (вне дерева) модули
".*-modules";
".*-kernel";
};
Never-MarkAuto-Sections
{
"metapackages";
"contrib/metapackages";
"non-free/metapackages";
"restricted/metapackages";
"universe/metapackages";
"multiverse/metapackages";
};
Move-Autobit-Sections
{
"oldlibs";
"contrib/oldlibs";
"non-free/oldlibs";
"restricted/oldlibs";
"universe/oldlibs";
"multiverse/oldlibs";
};
};
Также я увидел, что все образы, заголовки и модули (используя Pop!_OS с ядром linux-surface) помечены как вручную установленные с помощью apt-mark showmanual | grep linux
:
linux-headers-6.0.12-76060006
linux-headers-6.0.12-76060006-generic
linux-headers-6.0.6-76060006
linux-headers-6.1.11-76060111
linux-headers-6.1.11-76060111-generic
linux-headers-6.1.11-surface
linux-headers-6.1.12-surface
linux-headers-6.1.6-surface
linux-headers-6.2.0-76060200
linux-headers-6.2.0-76060200-generic
linux-headers-6.2.10-surface
linux-headers-6.2.14-surface
linux-headers-6.2.2-surface
linux-headers-6.2.5-surface
linux-headers-6.2.6-76060206
linux-headers-6.2.6-76060206-generic
linux-headers-6.2.8-surface
linux-headers-6.3.3-surface
linux-headers-6.3.7-surface
linux-headers-6.4.12-surface
linux-headers-6.4.2-surface
linux-headers-6.4.4-surface
linux-headers-6.4.6-76060406
linux-headers-6.4.6-76060406-generic
linux-headers-6.5.4-76060504
linux-headers-6.5.4-76060504-generic
linux-headers-6.5.5-surface
linux-headers-6.5.6-76060506
linux-headers-6.5.6-76060506-generic
linux-headers-6.5.6-surface
linux-headers-6.5.7-surface-2
linux-headers-6.6.1-surface-1
linux-headers-6.6.10-76060610
linux-headers-6.6.10-76060610-generic
linux-headers-6.6.11-surface-1
linux-headers-6.6.5-surface-1
linux-headers-6.6.6-76060606
linux-headers-6.6.6-76060606-generic
linux-headers-6.6.6-surface-1
linux-headers-6.7.2-surface-1
linux-headers-6.7.6-surface-1
linux-headers-6.7.9-surface-1
linux-headers-6.8.0-76060800daily20240311
linux-headers-6.8.0-76060800daily20240311-generic
linux-headers-6.8.1-surface-1
linux-headers-6.8.8-surface-1
linux-headers-6.9.3-76060903
linux-headers-6.9.3-76060903-generic
linux-headers-6.9.3-surface-2
linux-headers-surface
linux-image-6.1.11-surface
linux-image-6.1.12-surface
linux-image-6.1.6-surface
linux-image-6.2.0-76060200-generic
linux-image-6.2.10-surface
linux-image-6.2.14-surface
linux-image-6.2.2-surface
linux-image-6.2.5-surface
linux-image-6.2.6-76060206-generic
linux-image-6.2.8-surface
linux-image-6.3.3-surface
linux-image-6.3.7-surface
linux-image-6.4.12-surface
linux-image-6.4.2-surface
linux-image-6.4.4-surface
linux-image-6.4.6-76060406-generic
linux-image-6.5.4-76060504-generic
linux-image-6.5.5-surface
linux-image-6.5.6-76060506-generic
linux-image-6.5.6-surface
linux-image-6.5.7-surface-2
linux-image-6.6.1-surface-1
linux-image-6.6.10-76060610-generic
linux-image-6.6.11-surface-1
linux-image-6.6.5-surface-1
linux-image-6.6.6-76060606-generic
linux-image-6.6.6-surface-1
linux-image-6.7.2-surface-1
linux-image-6.7.6-surface-1
linux-image-6.7.9-surface-1
linux-image-6.8.0-76060800daily20240311-generic
linux-image-6.8.1-surface-1
linux-image-6.8.8-surface-1
linux-image-6.9.3-76060903-generic
linux-image-6.9.3-surface-2
linux-image-surface
linux-modules-6.0.12-76060006-generic
linux-modules-6.1.11-76060111-generic
linux-modules-6.2.0-76060200-generic
linux-modules-6.2.6-76060206-generic
linux-modules-6.4.6-76060406-generic
linux-modules-6.5.4-76060504-generic
linux-modules-6.5.6-76060506-generic
linux-modules-6.6.10-76060610-generic
linux-modules-6.6.6-76060606-generic
linux-modules-6.8.0-76060800daily20240311-generic
linux-modules-6.9.3-76060903-generic
Я также попытался удалить один из старейших пакетов вручную с помощью apt remove linux-image-6.1.11-76060111-generic
:
Чтение списков пакетов... Готово
Формирование дерева зависимостей... Готово
Чтение данных состояния... Готово
Следующие пакеты будут УДАЛЕНЫ:
linux-image-6.1.11-76060111-generic
0 обновлено, 0 новых установлено, 1 для удаления и 250 не обновлено.
После этой операции будет освобождено 12.3 МБ дискового пространства.
Хотите продолжить? [Y/n] y
(Чтение базы данных ... 1219145 файлов и каталогов в настоящее время установлено.)
Удаление linux-image-6.1.11-76060111-generic (6.1.11-76060111.202302091138~1675975749~22.04~f771a7f) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Удаление /boot/initrd.img-6.1.11-76060111-generic
Однако это оставляет заголовки и пакеты модулей. Я вижу, что они указаны в разделе VersionedKernelPackages
в конфигурации автопроцесса, но, насколько я понимаю, автопроцесс должен по умолчанию сохранять только последние несколько версий.
Проверка зависимостей для оставшихся заголовков и модулей показывает только зависимость от успешно удаленного пакета linux-image
:
user@os:~$ apt-cache rdepends linux-headers-6.1.11-76060111-generic
linux-headers-6.1.11-76060111-generic
Обратные зависимости:
linux-image-6.1.11-76060111-generic
user@os:~$ apt-cache rdepends linux-modules-6.1.11-76060111-generic
linux-modules-6.1.11-76060111-generic
Обратные зависимости:
linux-image-6.1.11-76060111-generic
Какие еще факторы могут играть роль в том, чтобы предотвратить удаление этих пакетов вместе с пакетом linux-image
?
Ваши пакеты ядра не могут быть автоматически удалены, поскольку они помечены как вручную установленные. Вся настройка «сохранять работающие и последние два ядра при автоматическом удалении» зависит от того, чтобы пакеты ядра были автоматически установлены через метапакеты, такие как linux-image-surface
и linux-headers-surface
; это не сработает, если они окажутся помеченными как вручную установленные.
Я не знаю, почему ваша система оказалась в такой ситуации. Чтобы очистить её, вы можете поступить следующим образом:
sudo apt purge '^'linux-{image,headers,modules}-'6\.[0-8]\..*'
Ответ или решение
Удаление старых версий ядер в Linux: сложные ситуации и их решение
Ваша проблема заключается в накапливании старых файлов ядра в системе, что вызывает необходимость освободить место путем удаления неактуальных версий. Несмотря на использование команды apt autoremove
, старые ядра не удаляются — и это связано с их меткой как "вручную установленные". Давайте обсудим причины этого явления, а также пути решения.
Причины накопления файлов ядра
-
Параметры конфигурации APT: В файле
/etc/apt/apt.conf.d/01autoremove
указаны параметры, не позволяющие автоматическое удаление пакетов, относящихся к ядрам, таким какlinux-image
. Это связано с тем, что конфигурация защищает установленные ядра от случайного удаления, предполагая, что их можно контролировать вручную. -
Метка "вручную установлен": Команда
apt-mark showmanual
показывает, что пакеты заголовков и модулей для ядер помечены как вручную установленные. Это предотвращает их автоматическое удаление, так как система считает их важными для пользователя. -
Зависимости и обратные зависимости: При попытке удалить определенное ядро, соответствующие модули и заголовки также остаются, но не удаляются автоматически, поскольку зависят от удаляемого пакета, что может создать чувство сложности в управлении.
Решение проблемы
Чтобы удалить старые версии ядер, заголовков и модулей, необходимо выполнить следующие шаги:
-
Проверка текущего состояния: Сначала вам нужно определить, какие версии являются последними, а какие устарели. Используйте команду:
dpkg --list | grep linux-image
-
Очистка вручную: Для полной очистки старых версий вы можете воспользоваться командой
apt purge
. Например, для удаления всех старых ядер и соответствующих заголовков, вы можете выпустить команду:sudo apt purge '^linux-(image|headers|modules)-6\.[0-8]\..*'
Это позволит удалить все пакеты ядра версии 6.0-6.8.
-
Изменение метки установки: Если вы хотите вернуть автоматическое управление ядрами, вы можете маркировать их как автоматически установленные:
sudo apt-mark auto linux-image-<версия> sudo apt-mark auto linux-headers-<версия>
-
Регулярная проверка: Выполняйте регулярные проверки и очистки, чтобы избежать накопления ненужных файлов в будущем. После завершения предыдущих шагов выполните:
sudo apt autoremove
Заключение
Проблемы с удалением старых версий ядра в Linux часто связаны с конфигурацией терминала назначения пакетов и метками установки. Правильное управление пакетом и регулярное чистка — ключ к поддержанию надежной и эффективной системы. Следуя вышеуказанным рекомендациям, вы сможете освободить место на диске и уменьшить сложность управления вашим ядром.
Если у вас остались вопросы или вам нужна дальнейшая помощь по этой теме, не стесняйтесь обращаться к специалистам или консультировать сообщества IT.