Как удалить старые неиспользуемые ядра Linux
Пошаговые инструкции по безопасному удалению неиспользуемых ядер Linux в системах на базе Debian и RHEL.
Каждое установленное ядро Linux занимает значительный объем дискового пространства. Со временем, когда вы обновляете ядро до более новых версий, старые ядра могут накапливаться в вашей системе, занимая ценное дисковое пространство. Удалив старые ядра, вы можете освободить дисковое пространство, что позволит более эффективно использовать его и предотвратить потенциальную нехватку хранилища. В этом руководстве мы узнаем, как находить и удалять старые неиспользуемые ядра в операционных системах Linux.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Следующие инструкции по удалению старых неиспользуемых ядер Linux включают операции, которые могут существенно повлиять на вашу систему. Неправильное использование этих команд может привести к нестабильности системы или потере данных. Настоятельно рекомендуется:
- Резервное копирование данных. Всегда проверяйте наличие актуальной резервной копии вашей системы и важных файлов. Это позволит вам восстановить данные, если что-то пойдет не так.
- Сохранять старые ядра. Всегда сохраняйте хотя бы одно или два старых ядра. Они служат запасным вариантом, если текущая версия дает сбой или возникают проблемы.
- Проверьте текущую версию ядра. Обязательно проверьте текущую версию ядра и убедитесь, что она не была удалена во время этого процесса.
- Понимание команд. Прежде чем запускать любую команду, убедитесь, что вы понимаете, что она делает. Если вы не уверены в команде, сообщите нам об этом в разделе комментариев ниже или обратитесь за советом к знающему источнику.
- Действуйте осторожно. Если вам неудобно выполнять эти операции, обратитесь за помощью к системному администратору или знающему человеку.
Помните, вы несете полную ответственность за результаты следования данным инструкциям. Действуйте осторожно и на свой страх и риск.
Где хранятся ядра Linux?
Все установленные ядра Linux и связанные с ними файлы обычно хранятся в каталоге /boot
. А модули ядра обычно хранятся в каталоге /lib/modules
.
Каталог /boot
содержит файлы, относящиеся к ядру Linux, включая образы ядра, файлы initramfs и конфигурации загрузчика. Имена файлов ядра обычно начинаются с «vmlinuz-
» или «vmlinuz.
» и заканчиваются номером версии.
В каталоге /lib/modules
хранятся модули ядра, связанные с каждым установленным ядром. Модули ядра — это динамически загружаемые компоненты, расширяющие функциональность ядра Linux. Каждая версия ядра имеет свой собственный подкаталог внутри /lib/modules/
.
По умолчанию в самых последних дистрибутивах Linux сохраняется текущая версия ядра Linux и одна предыдущая версия в целях восстановления. Это гарантирует, что в случае возникновения каких-либо проблем после обновления до новой версии ядра вы сможете легко загрузить старое, заведомо рабочее ядро.
Однако бывают случаи, когда вы могли вручную установить ядра Linux или установить определенное ядро из сторонних репозиториев. В таких случаях старые ядра не будут удаляться автоматически при запуске команд очистки пакетов, таких как sudo apt autoremove
.
Следовательно, эти старые версии продолжают накапливаться в каталоге /boot
, постепенно занимая все больше места на диске. Поэтому возникает необходимость идентифицировать и удалить эти старые, неиспользуемые ядра Linux, чтобы освободить ценное дисковое пространство.
Удалить старые неиспользуемые ядра в Linux
Debian и его производные, а также RHEL и его варианты являются одними из наиболее распространенных операционных систем, используемых сегодня. Поэтому мы углубимся в процесс удаления ядер Linux именно в этих двух категориях операционных систем.
Сначала мы увидим, как удалить старые неиспользуемые ядра в системах на базе Debian.
Удалить старые неиспользуемые ядра в Debian, Ubuntu, Linux Mint
Есть несколько способов удалить старые ядра в Debian, Ubuntu и их производных, таких как Elementary OS, Linux Mint и Pop!_OS.
Список установленных ядер Linux
Сначала вам необходимо проверить список всех установленных ядер Linux. Чтобы проверить все установленные ядра в Debian, Ubuntu и их производных, запустите:
dpkg --list | grep linux-image
Пример вывода из моей системы Ubuntu 22.04:
rc linux-image-5.15.0-25-generic 5.15.0-25.25 amd64 Signed kernel image generic
rc linux-image-5.15.0-30-generic 5.15.0-30.31 amd64 Signed kernel image generic
rc linux-image-5.15.0-39-generic 5.15.0-39.42 amd64 Signed kernel image generic
ii linux-image-5.15.0-41-generic 5.15.0-41.44 amd64 Signed kernel image generic
ii linux-image-5.19.0-42-generic 5.19.0-42.43~22.04.1 amd64 Signed kernel image generic
ii linux-image-generic-hwe-22.04 5.19.0.42.43~22.04.15 amd64 Generic Linux kernel image
Список установленных ядер в Ubuntu Linux
Как вы могли заметить в выводе, в первом столбце отображаются "rc
" и "ii
". Вы можете задаться вопросом, что это такое.
"ii
" и "rc
" являются индикаторами состояния пакета. Вот что они собой представляют:
- «ii» означает «установлен и успешно установлен/настроен». Это указывает на то, что соответствующий пакет в настоящее время установлен в вашей системе и находится в рабочем состоянии.
- «rc» означает «удалено, но файлы конфигурации все еще присутствуют». Это означает, что пакет был удален, но его файлы конфигурации все еще присутствуют в системе. Этот статус обычно наблюдается, когда пакет удален, но не очищен полностью, сохраняя файлы конфигурации для возможной переустановки в будущем.
Итак, в приведенном выше выводе пакеты со статусом «ii
» (linux-image-5.15.0-41-generic
и linux-image-5.19. 0-42-generic
) в настоящее время установлены в моей системе. С другой стороны, пакеты со статусом «rc
» (linux-image-5.15.0-25-generic
, linux-image-5.15.0- 30-generic
и linux-image-5.15.0-39-generic
) были удалены, но их файлы конфигурации все еще присутствуют.
Внимание: представленная здесь информация о статусе пакета относится только к выходным данным команды dpkg --list
, где первый столбец указывает статус пакета.
Автоматическое удаление старых, неиспользуемых ядер
Теперь давайте удалим старые и неиспользуемые ядра Linux в системах на базе Debian, используя следующую команду:
sudo apt-get autoremove --purge
Команда sudo apt-get autoremove --purge
используется для удаления автоматически установленных пакетов, которые больше не нужны в вашей системе, включая их файлы конфигурации. Вот что делает каждая часть команды:
sudo
: выполняет команду с правами администратора.apt-get
: это инструмент командной строки для управления пакетами в системах на базе Debian (таких как Ubuntu), используемый для обработки пакетов.autoremove
: это подкомандаapt-get
, которая автоматически удаляет пакеты, которые были установлены как зависимости, но больше не требуются ни одному другому пакету в вашей системе.--purge
: это опция, которая при использовании сautoremove
удаляет не только пакет, но и связанные с ним файлы конфигурации. Это обеспечивает более тщательную очистку.
Когда вы запускаете sudo apt-get autoremove --purge
, команда сканирует вашу систему на наличие пакетов, которые были установлены как зависимости, но больше не нужны. Затем он удаляет эти пакеты и связанные с ними файлы конфигурации, освобождая дисковое пространство и очищая систему от ненужных пакетов.
Важно просмотреть список пакетов, подлежащих удалению, прежде чем подтверждать выполнение команды. Это гарантирует, что ни один критический пакет не будет непреднамеренно удален.
Теперь давайте еще раз проверим список доступных ядер командой:
dpkg --list | grep linux-image
rc linux-image-5.15.0-25-generic 5.15.0-25.25 amd64 Signed kernel image generic
rc linux-image-5.15.0-30-generic 5.15.0-30.31 amd64 Signed kernel image generic
rc linux-image-5.15.0-39-generic 5.15.0-39.42 amd64 Signed kernel image generic
ii linux-image-5.15.0-41-generic 5.15.0-41.44 amd64 Signed kernel image generic
ii linux-image-5.19.0-42-generic 5.19.0-42.43~22.04.1 amd64 Signed kernel image generic
ii linux-image-generic-hwe-22.04 5.19.0.42.43~22.04.15 amd64 Generic Linux kernel image
Как я уже сказал, пакеты "rc" удалены, но их конфигурационные файлы присутствуют в системе. Почему команда «sudo apt autoremove
» не удалила их? Вы можете задаться вопросом.
Пакеты «rc» не удаляются при выполнении команды «sudo apt autoremove --purge», поскольку операция «autoremove
» специально нацелена на пакеты, которые были установлены как зависимости, но больше не нужны никаким другим пакетам. в вашей системе.
Статус «rc» указывает на то, что пакет был удален, но его файлы конфигурации все еще присутствуют в системе. Когда вы запускаете «apt autoremove --purge
», он удаляет только пакеты, помеченные как «auto» или «сироты», то есть они были установлены автоматически как зависимости и больше не требуются.
Поскольку пакеты «rc» не считаются зависимостями и не попадают в категорию «авто» или «сироты», они не удаляются автоматически операцией «apt autoremove
».
В этом случае вы можете вручную найти и удалить ненужные ядра, как описано в следующем разделе.
Удалить ненужные ядра Linux вручную
Чтобы удалить старые неиспользуемые ядра Linux, вы можете выполнить следующие действия:
1. Проверьте текущую версию ядра
Откройте терминал и выполните команду:
uname -r
Это отобразит текущую версию ядра. Убедитесь, что вы не удаляете это ядро.
2. Список установленных ядер
Запустите следующую команду, чтобы просмотреть список установленных ядер Linux в вашей системе.
dpkg --list | grep linux-image
3. Определите неиспользуемые ядра
Просмотрите список и определите ядра, которые вы хотите удалить. Обычно вам желательно сохранить последнюю версию ядра и, возможно, одну или две предыдущие версии в качестве резервной копии.
4. Удалите неиспользуемые ядра
Чтобы удалить конкретное ядро, используйте команду:
sudo apt-get purge linux-image-x.x.x-x-generic
Где «x.x.x-x» представляет версию ядра. Замените его фактическим номером версии, которую вы хотите удалить. Повторите эту команду для каждого ядра, которое вы хотите удалить.
4. Обновите загрузчик GRUB
После удаления старых ядер вам следует обновить конфигурацию загрузчика GRUB, чтобы отразить изменения. Выполните следующую команду, чтобы обновить загрузчик.
sudo update-grub
5. Перезагрузите систему
Рекомендуется перезагрузить систему, чтобы убедиться, что с оставшимся ядром все работает правильно.
Пожалуйста, соблюдайте осторожность при удалении ядер, так как удаление неправильного ядра может привести к невозможности загрузки вашей системы. Всегда дважды проверяйте версию, которую хотите удалить, и сохраняйте резервную копию ядра в качестве меры предосторожности.
Обратите внимание, что мы удалили только неиспользуемые старые ядра. В системе может оставаться много ненужных файлов конфигурации пакетов. Чтобы удалить их все, выполните следующие действия.
Удалите все ненужные файлы конфигурации.
Чтобы удалить все пакеты «rc», вы можете использовать следующую команду:
sudo dpkg --purge $(dpkg -l | awk '/^rc/{print $2}')
Эта команда очистит (удалит) все пакеты со статусом «rc» в вашей системе. Однако соблюдайте осторожность при использовании этой команды и убедитесь, что удаляемые пакеты больше не нужны, поскольку они могут содержать важные файлы конфигурации.
Теперь давайте проверим список установленных ядер с помощью команды:
dpkg --list | grep linux-image
ii linux-image-5.15.0-41-generic 5.15.0-41.44 amd64 Signed kernel image generic
ii linux-image-5.19.0-42-generic 5.19.0-42.43~22.04.1 amd64 Signed kernel image generic
ii linux-image-generic-hwe-22.04 5.19.0.42.43~22.04.15 amd64 Generic Linux kernel image
Видеть? На этот раз мы получаем только установленные ядра Linux. Ядра Linux, помеченные как «rc», исчезли!
Теперь у нас есть два установленных ядра в нашей системе Ubuntu: работающее в данный момент ядро и одна предыдущая версия, действующая как резервное ядро. Что делать, если вы хотите сохранить только текущее ядро и удалить все остальное? Вы можете использовать следующие однострочные команды.
Однострочные Команды для очистки старых неиспользуемых ядер в системах на базе Debian
Команда 1:
Чтобы сохранить только работающее в данный момент ядро Linux и удалить все остальные старые, неиспользуемые ядра в системах на базе Debian, запустите это:
echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge
Давайте разберем приведенную выше команду и посмотрим, что делает каждая опция.
echo
: эта команда используется для отображения вывода следующей подстановки команды.$ (dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'
uname -r'/q;p ')
: эта часть команды получает список установленных пакетов образов ядра Linux, отфильтровывает текущую версию ядра с помощьюuname -r
и выбирает все более старые версии. Затем список распечатывается.$ (dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'" $ (uname -r | sed "s/\( [0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p')
: этот раздел возвращает список установленного Linux. пакеты заголовков ядра, отфильтровывает текущую версию ядра и выбирает все более старые версии. Затем список распечатывается.| xargs sudo apt-get -y purge
: командаxargs
принимает выходные данные двух предыдущих команд и передает их в качестве аргументов вsudo apt-get -y purge
>. При этом будут удалены перечисленные пакеты ядра и связанные с ними файлы конфигурации.
Таким образом, команда идентифицирует старые версии установленных пакетов образа ядра Linux и заголовков, а затем выполняет операцию очистки для их удаления с помощью apt-get
.
Это помогает автоматически удалять из системы старые, неиспользуемые ядра. Однако важно проявлять осторожность и проверять список пакетов, которые необходимо удалить, перед выполнением команды, чтобы избежать удаления критически важных ядер.
Команда 2:
Ниже приведена еще одна однострочная команда, позволяющая сохранить только работающее в данный момент ядро Linux и удалить все остальные ядра.
sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)
Эта команда удалит старые неиспользуемые ядра Linux и связанные с ними заголовки с помощью команды apt-get purge
. Давайте разберем, что делает код:
- Он начинается с конструкции
$ (...)
, которая позволяет подставлять команды. Вывод прилагаемой команды будет использоваться в качестве аргумента дляapt-get purge
. - Команда внутри подстановки команд представляет собой цикл, который перебирает два тега: «linux-image» и «linux-headers». Эти теги используются для идентификации пакетов, связанных с ядром Linux, и его заголовков.
- В цикле команда
dpkg-query
используется для получения списка установленных пакетов, соответствующих определенному шаблону. Шаблон создается с использованием тега и шаблона версии ([0-9]*.[0-9]*.[0-9]*
) для соответствия именам пакетов, например «linux-image- x.x.x» или «linux-headers-x.x.x». Опция-W
заставляетdpkg-query
выводить только имя пакета. - Вывод
dpkg-query
передается по конвейеру вsort -V
, который выполняет сортировку версий. Это гарантирует, что ядра сортируются в порядке возрастания по номерам их версий. - Отсортированный список пакетов затем передается в
awk
для дальнейшей обработки. Командаawk
используется для поиска первого пакета, содержащего текущую версию ядра ($ (uname -r | Cut -d- -f1,2)
). Он сравнивает имя каждого пакета с версией ядра, используяindex($0, c)
. Когда совпадение найдено,awk
завершает работу, а оставшиеся пакеты удаляются. - Результат команды
awk
затем используется в качестве входных данных дляapt-get purge
. Он удалит перечисленные пакеты, эффективно удалив старые неиспользуемые ядра Linux и их заголовки.
Таким образом, эта команда удаляет все старые пакеты ядра и заголовков Linux, номер версии которых ниже текущего ядра. Это более автоматизированный способ удаления неиспользуемых ядер без необходимости вручную указывать номер каждой версии.
Удалите старые неиспользуемые ядра в RHEL, Fedora, CentOS, AlmaLinux и Rocky Linux.
Вот шаги по удалению старых неиспользуемых ядер в RHEL, Fedora и системах на базе RHEL, таких как CentOS, AlmaLinux и Rocky Linux.
1. Обновите систему:
Перед удалением старых ядер рекомендуется обновить пакеты вашей системы и активное ядро. Вы можете сделать это, выполнив следующую команду:
sudo dnf update
Эта команда обновит все пакеты и активное ядро в вашей системе.
2. Проверьте текущую версию ядра:
Чтобы избежать случайного удаления ядра, которое вы используете в данный момент, вам следует проверить текущую версию ядра. Вы можете сделать это с помощью следующей команды:
uname -r
Эта команда отобразит версию ядра.
Если вы хотите отображать и имя, и версию ядра, добавьте флаг -s
.
uname -sr
3. Перечислите все установленные ядра:
Чтобы просмотреть все ядра, установленные в вашей системе, используйте следующую команду:
sudo rpm -q kernel
Эта команда выведет список всех ядер, установленных в вашей системе.
4. Удалите старые ядра:
Вы можете использовать команду DNF для удаления старых неиспользуемых ядер. Следующая команда сохранит два последних ядра (при условии, что последнее активно) и удалит все остальные:
sudo dnf remove --oldinstallonly --setopt installonly_limit=2 kernel
Вот разбивка команды:
sudo
: это означает «суперпользователь делает». Это позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя, как указано в файле sudoers. По сути, это дает вам административные привилегии для запуска команды.dnf
: это менеджер пакетов для RHEL, CentOS и Fedora. Он используется для установки, обновления и удаления пакетов в этих дистрибутивах Linux.remove
: это команда DNF, которая удаляет указанные пакеты из системы вместе со всеми пакетами, зависящими от удаляемых пакетов.--oldinstallonly
: этот параметр указывает DNF ориентироваться только на те пакеты, которые установлены с помощью командыinstallonly
, которые обычно являются ядрами.--setopt installonly_limit=2
: этот параметр устанавливает параметр конфигурации «на лету». В этом случае для параметраinstallonly_limit
устанавливается значение 2, что ограничивает число версий любого отдельного пакета, обозначенного как «installonly» (например, ядра), которые могут быть установлены одновременно, до 2.ядро
: это пакет, над которым действует команда DNF. В данном случае это ядро Linux.
Итак, подведем итог: эта команда удалит все версии ядра, кроме двух последних, которые были установлены с помощью команды installonly. Это способ очистить старые версии ядра, которые вы больше не используете.
Имейте в виду, что эта команда работает только в том случае, если активна последняя версия ядра. Если более старая версия работоспособна, команда безуспешно попытается удалить ее.
Удаление ядер Linux в старых версиях RHEL
Если вы используете более старую версию CentOS/RHEL, вы можете использовать утилиту package-cleanup
из пакета yum-utils
для удаления старых версий ядра.
Сначала убедитесь, что пакет yum-utils
установлен.
sudo yum install yum-utils
Теперь выполните следующую команду, чтобы сохранить последние 2 ядра и удалить остальные.
sudo package-cleanup --oldkernels --count=2
Этот метод перестал работать с выпуском CentOS 8, но по-прежнему работает для более старых версий CentOS/RHEL.
Не забывайте соблюдать осторожность при выполнении этих действий. Всегда полезно сохранить хотя бы одно или два старых ядра в качестве резервной копии на случай, если с текущим возникнут проблемы. Всегда проверяйте версии ядра и убедитесь, что ваше текущее ядро не удалено. Перед внесением этих изменений также рекомендуется выполнить резервное копирование системы.
Часто задаваемые вопросы
Вот несколько часто задаваемых вопросов об удалении ненужных ядер Linux.
Вопрос: Зачем мне удалять старые ядра из моей системы?
О: Хранение старых ядер может занимать место на диске. Удаление старых ядер необходимо для оптимизации дискового пространства, повышения производительности системы, повышения безопасности и упрощения обслуживания. Это помогает предотвратить нехватку памяти, обеспечивает наличие обновлений безопасности, оптимизирует процесс загрузки и упрощает управление системой. Хотя рекомендуется сохранять пару старых версий в качестве резервной копии, остальные можно удалить, чтобы освободить место.
Вопрос: Как узнать, какое ядро я сейчас использую?
О: Вы можете проверить текущую версию ядра, выполнив команду uname -r
в терминале. Эта команда отобразит имя и версию ядра.
Вопрос: Как определить установленные ядра Linux в системах на базе Debian?
О: Существует несколько способов определить установленное ядро Linux:
1. Используйте команду dpkg --list | grep linux-image
для вывода списка установленных пакетов ядра.
2. Проверьте каталог /boot
на наличие файлов, начинающихся с «vmlinuz-» или «vmlinuz». за которым следует версия ядра.
3. Запустите команду uname -r
, чтобы отобразить версию текущего ядра.
Вопрос: Как я могу увидеть все ядра, установленные в системах на базе RHEL?
О: Чтобы просмотреть список всех ядер, установленных в вашей системе, вы можете использовать команду sudo rpm -q kernel
. Эта команда выведет список всех ядер, установленных в вашей системе.
Вопрос: Могу ли я использовать sudo apt autoremove --purge
для удаления старых ядер в системах на базе Debian?
О: Нет, sudo apt autoremove --purge
обычно удаляет автоматически установленные пакеты, которые больше не нужны, но не предназначен специально для старых ядер. Он может не удалить пакеты «rc», которые удалены, но файлы конфигурации все еще присутствуют.
Вопрос: Какая команда используется для удаления старых ядер в моей системе RHEL или CentOS?
О: Вы можете использовать команду sudo dnf Remove --oldinstallonly --setopt installonly_limit=2 kernel
, чтобы удалить все версии ядра, кроме двух последних. Обратите внимание, что эта команда работает только в том случае, если активна последняя версия ядра. Если более старая версия работоспособна, команда безуспешно попытается удалить ее.
Вопрос: Я использую более старую версию CentOS/RHEL, есть ли другая команда для удаления старых ядер?
О: Да, если вы используете более старую версию CentOS/RHEL, вы можете использовать утилиту package-cleanup
из пакета yum-utils
для удаления старых версий ядра. . Команда sudo package-cleanup --oldkernels --count=2
сохранит два последних ядра и удалит остальные.
Вопрос: Что означают индикаторы состояния пакета «ii» и «rc» в выводе команды dpkg --list
?
О: В выводе «ii» означает «установлен и успешно установлен/настроен», что указывает на установленный и функциональный пакет. «rc» означает «удален, но файлы конфигурации все еще присутствуют», что указывает на удаленный пакет с оставшимися файлами конфигурации.
Вопрос: Какие меры предосторожности следует принять перед удалением старых ядер?
О: Всегда полезно сохранить хотя бы одно или два старых ядра в качестве резервной копии на случай, если с текущим возникнут проблемы. Всегда проверяйте версии ядра и убедитесь, что ваше текущее ядро не удалено. Перед внесением этих изменений также рекомендуется выполнить резервное копирование системы.
Заключение
Эффективное управление ядрами Linux является важнейшим аспектом системного администрирования. Со временем, по мере обновления систем и установки новых версий ядра, старые и неиспользуемые ядра обычно накапливаются. Эти старые ядра могут занимать ценное дисковое пространство и в некоторых случаях могут представлять угрозу безопасности, если содержат уязвимости. Поэтому рекомендуется время от времени очищать старые и неиспользуемые ядра.
Однако к задаче удаления старых ядер необходимо подходить с осторожностью. Хотя освобождение дискового пространства полезно, каждое ядро служит запасным вариантом, если текущая версия выйдет из строя или столкнется с проблемами. Поэтому в целях безопасности рекомендуется всегда сохранять хотя бы одно или два старых ядра.
Как всегда, прежде чем вносить существенные изменения в вашу систему, убедитесь, что у вас есть актуальная резервная копия и вы понимаете последствия выполняемых вами команд. Если все сделано правильно, процесс удаления старых ядер может способствовать созданию более эффективной и безопасной среды Linux.
Ссылка:
- Форум Askubuntu