Мой загрузочный раздел находится на SSD, поэтому в нем не может быть места более чем для 8 установленных версий ядра, и в конечном итоге не удастся установить какое-либо обновление ядра, поскольку мой загрузочный раздел полон старых версий. Есть много вопросов о том, как удалить старые версии (даже о том, как автоматизировать процесс), но мой вопрос прост: почему не apt-get autoremove
обнаруживает и не удаляет их автоматически, и есть ли способ, которым я могу это сделать ? Я имею в виду, apt-get
установил ли он их в любом случае, так что он знает о них, так почему он решил оставить все старые версии?
53
Ответы:
Как ответить почему, обратитесь к файлу
/etc/apt/apt.conf.d/01autoremove-kernels
Как вы можете видеть, склонный сказано никогда не autoremove ядра, как сказал другой файл (скрипт),
/etc/kernel/postinst.d/apt-auto-removal
. И вот оно:Если вы вручную установите 2 выбранных ядра, то есть первое и текущее, то apt-autoremove удалит только те старые версии, которые вы не установили вручную, так что у вас всегда будут эти 2 варианта плюс независимо от того, какое из них является последним.
Обновить:
В
/etc/kernel/postinst.d/apt-auto-removal
есть эта часть:Так что, если вы сравните вывод
01autoremove-kernels
файла иuname -r
вы поймете, что текущее работающее ядро и самое последнее, что было до него, никогда не будут удалены этим сценарием. Получается еще один файл/etc/apt/apt.conf.d/01autoremove
, где есть строки:Таким образом, вы можете закомментировать их, и это позволит вам автоматически удалять ядра
apt-autoremove
, хотя помните - делайте это на свой страх и рискисточник
/etc/apt/apt.conf.d/01autoremove-kernels
много строк, но среди них всего две версии: 3.13.0. {39,43}. Ноdpkg -l linux-*
перечисляет четыре версии, 3.13.0. {39,40,41,43}, так что/etc/apt/apt.conf.d/01autoremove-kernels
есть нечто иное, чем хранение этих средних версий, верно?01autoremove
файл, который вы хотите,01autoremove-kernels
вероятно, просто защита, так что apt не удаляет установленное ядро и самое последнее (на всякий случай, если испортились новейшие версии)01autoremove
, это просто защищает от автоматического удаления пакетов зависимостей, напримерlinux-image-extra
. Его изменение не должно влиять на то, будет или нетlinux-image-3.16.0-31-generic
автоматически удалено. Ни один из шаблонов в нем не соответствует именам пакетов, которые мы хотим автоматически удалить./etc/apt/apt.conf.d/01autoremove
. Это не поможет вам в автоматическом удалении старых версий пакетов ядра, но может иметь нежелательные последствия. Файл не защищает от автоматического удаления,linux-image-extra
но пакеты, которые соответствуют регулярным выражениям вNeverAutoRemove
разделе.apt-get autoremove
не удаляются ядра, не перечисленные в/etc/apt/apt.conf.d/01autoremove-kernels
том, что эти ядра помечены как установленные вручную; смотри мой ответ .Для меня это помогло установить последнюю (X) Ubuntu (15.10). В более ранних выпусках пакеты ядра можно было пометить как установленные вручную, по крайней мере, если они установлены с помощью Software Updater, чтобы их
sudo apt-get autoremove --purge
нельзя было удалить. Есть сообщения об ошибках, связанных с этой проблемой: Ошибка # 1175637 , Ошибка # 1439769В более ранних выпусках вы могли попытаться пометить пакеты ядра, которые были автоматически установлены
sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")
и запущеныsudo apt-get autoremove --purge
после этого, чтобы увидеть, имеет ли это значение. Команда по-прежнему не должна удалять пакеты ядер, показанные в /etc/apt/apt.conf.d/01autoremove-kernels, но ее безопаснее всего запускать сначалаapt-get autoremove
с--dry-run
параметром.источник
apt-mark
сделал трюк для меня, хотелось бы upvote 10 раз: P