- Вопрос или проблема
- Ответ или решение
- Проблема с удалением устаревших заголовков и модулей Linux в Ubuntu
- 1. Настройка APT и параметры autoremoval
- 2. Установка пакетов как «пользовательский»
- 3. Связь зависимостей упомянутых пакетов
- 4. Рекомендуемое решение
- Удаление пакетов вручную
- 5. Альтернативные методы
- Заключение
Вопрос или проблема
Старые файлы ядра накапливаются, и я хотел бы удалить все, кроме текущей версии и двух предыдущих версий, чтобы освободить немного места.
Когда я запускаю 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. Рекомендуемое решение
Удаление пакетов вручную
Чтобы удалить ненужные заголовки и модули, можно использовать следующую последовательность команд:
-
Удалите старое ядро и связанные с ним зависимости:
sudo apt remove linux-headers-6.1.11-76060111-generic linux-modules-6.1.11-76060111-generic
-
Если требуется наличие более современной версии, проверьте установленные версии перед удалением:
dpkg --list | grep linux-image dpkg --list | grep linux-headers dpkg --list | grep linux-modules
-
Затем можно применить:
sudo apt autoremove
5. Альтернативные методы
- Вы можете рассмотреть возможность изменения конфигураций APT и создания резервных копий перед модификациями.
-
Использование
purge
вместоremove
позволит вам также удалить конфигурационные файлы, если это необходимо:sudo apt purge linux-headers-6.1.11-76060111-generic
Заключение
Удаление устаревших пакетов ядра Linux может показаться сложной задачей из-за настроек и зависимостей в APT. Однако, следуя приведенным шагам и рекомендациям, вы сможете эффективно освободить место на диске, удалив старые заголовки и модули. Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь обратиться за помощью.