Модули и заголовки не удалены вместе с 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
  {
    "метапакеты";
    "contrib/метапакеты";
    "non-free/метапакеты";
    "restricted/метапакеты";
    "universe/метапакеты";
    "multiverse/метапакеты";
  };

  Move-Autobit-Sections
  {
    "oldlibs";
    "contrib/oldlibs";
    "non-free/oldlibs";
    "restricted/oldlibs";
    "universe/oldlibs";
    "multiverse/oldlibs";
  };
};

Я также увидел, что все образы, заголовки и модули помечены как установленные вручную с помощью 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 в конфигурации autoremove, но, насколько я понимаю, autoremove по умолчанию должен сохранять только последние несколько версий.

Проверка зависимостей оставшихся заголовков и модулей показывает только зависимость от успешно удаленного пакета 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 в Ubuntu

Ваша ситуация, когда старые версии ядра и сопутствующие пакеты (заголовки и модули) не удаляются при использовании команды apt autoremove, является достаточно распространенной проблемой среди пользователей Linux. Давайте рассмотрим возможные причины и решения этой проблемы.

1. Настройка APT и параметры autoremoval

Как вы уже заметили, файл конфигурации /etc/apt/apt.conf.d/01autoremove содержит директивы, которые препятствуют автоматическому удалению пакетов ядра:

NeverAutoRemove
{
  "^linux-image-[a-z0-9]*$";
  "^linux-image-[a-z0-9]*-[a-z0-9]*$";
};

Эта запись указывает, что пакеты linux-image не должны удаляться автоматически. Поэтому даже при использовании команды apt autoremove эти пакеты останутся установленные, пока не будут удалены вручную.

2. Установка пакетов как «пользовательский»

Вы привели список пакетов, установленных вами вручную, с помощью команды apt-mark showmanual | grep linux. Если пакет установлен пользователем, даже если он больше не нужен и больше не имеет зависимостей, apt не удалит его автоматически. Это означает, что вам придется удалить заголовки и модули вручную.

3. Связь зависимостей упомянутых пакетов

Как вы заметили, после удаления linux-image, заголовки и модули по-прежнему остаются установленными из-за своих зависимостей:

apt-cache rdepends linux-headers-6.1.11-76060111-generic
apt-cache rdepends linux-modules-6.1.11-76060111-generic 

Оба пакета зависят от linux-image-6.1.11-76060111-generic. После удаления этого пакета, зависимости остаются, но они также не удаляются автоматически. Вам нужно вручную удалить эти пакеты.

4. Рекомендуемое решение

Удаление пакетов вручную

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

  1. Удалите старое ядро и связанные с ним зависимости:

    sudo apt remove linux-headers-6.1.11-76060111-generic linux-modules-6.1.11-76060111-generic
  2. Если требуется наличие более современной версии, проверьте установленные версии перед удалением:

    dpkg --list | grep linux-image
    dpkg --list | grep linux-headers
    dpkg --list | grep linux-modules
  3. Затем можно применить:

    sudo apt autoremove

5. Альтернативные методы

  • Вы можете рассмотреть возможность изменения конфигураций APT и создания резервных копий перед модификациями.
  • Использование purge вместо remove позволит вам также удалить конфигурационные файлы, если это необходимо:

    sudo apt purge linux-headers-6.1.11-76060111-generic

Заключение

Удаление устаревших пакетов ядра Linux может показаться сложной задачей из-за настроек и зависимостей в APT. Однако, следуя приведенным шагам и рекомендациям, вы сможете эффективно освободить место на диске, удалив старые заголовки и модули. Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь обратиться за помощью.

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

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