Модули и заголовки не были удалены вместе с linux-image

Вопрос или проблема

Старые файлы ядра накапливаются, и я хотел бы удалить все, кроме текущей версии и двух предыдущих версий, чтобы очистить немного пространства.

Когда я выполняю 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, старые ядра не удаляются — и это связано с их меткой как "вручную установленные". Давайте обсудим причины этого явления, а также пути решения.

Причины накопления файлов ядра

  1. Параметры конфигурации APT: В файле /etc/apt/apt.conf.d/01autoremove указаны параметры, не позволяющие автоматическое удаление пакетов, относящихся к ядрам, таким как linux-image. Это связано с тем, что конфигурация защищает установленные ядра от случайного удаления, предполагая, что их можно контролировать вручную.

  2. Метка "вручную установлен": Команда apt-mark showmanual показывает, что пакеты заголовков и модулей для ядер помечены как вручную установленные. Это предотвращает их автоматическое удаление, так как система считает их важными для пользователя.

  3. Зависимости и обратные зависимости: При попытке удалить определенное ядро, соответствующие модули и заголовки также остаются, но не удаляются автоматически, поскольку зависят от удаляемого пакета, что может создать чувство сложности в управлении.

Решение проблемы

Чтобы удалить старые версии ядер, заголовков и модулей, необходимо выполнить следующие шаги:

  1. Проверка текущего состояния: Сначала вам нужно определить, какие версии являются последними, а какие устарели. Используйте команду:

    dpkg --list | grep linux-image
  2. Очистка вручную: Для полной очистки старых версий вы можете воспользоваться командой apt purge. Например, для удаления всех старых ядер и соответствующих заголовков, вы можете выпустить команду:

    sudo apt purge '^linux-(image|headers|modules)-6\.[0-8]\..*'

    Это позволит удалить все пакеты ядра версии 6.0-6.8.

  3. Изменение метки установки: Если вы хотите вернуть автоматическое управление ядрами, вы можете маркировать их как автоматически установленные:

    sudo apt-mark auto linux-image-<версия>
    sudo apt-mark auto linux-headers-<версия>
  4. Регулярная проверка: Выполняйте регулярные проверки и очистки, чтобы избежать накопления ненужных файлов в будущем. После завершения предыдущих шагов выполните:

    sudo apt autoremove

Заключение

Проблемы с удалением старых версий ядра в Linux часто связаны с конфигурацией терминала назначения пакетов и метками установки. Правильное управление пакетом и регулярное чистка — ключ к поддержанию надежной и эффективной системы. Следуя вышеуказанным рекомендациям, вы сможете освободить место на диске и уменьшить сложность управления вашим ядром.

Если у вас остались вопросы или вам нужна дальнейшая помощь по этой теме, не стесняйтесь обращаться к специалистам или консультировать сообщества IT.

Оцените материал
Добавить комментарий

Капча загружается...