Про удаление "ненужных "ядер в Интернет имеется много информации, да и на этом ресурсе имеется соответствующая публикация.
Но со временем меня перестала устраивать необходимость всё время нажимать в терминале клавишу y после "Хотите продолжить? [Д/н]". Поэтому для своего удобства был создан текстовый файл с набором впоследствии вставляемых в окно терминала набором команд, в которых необходимо менять только цифры.
Составление списка удаляемых ядер
Перед удалением необходимо определиться, какие ядра из системы будут удаляться.
Перечень установленных ядер можно посмотреть через менеджер файлов, обратившись к каталогу /boot Там будут расположены несколько файлов с разными именами. Общим у них являются цифры, следующие после знака - . Поэтому для составления списка цифр достаточно посмотреть первые файлы в списке, т.е. файлы с именами, начинающимися на abi .
Пояснение. abi – application binary interface – это файлы, являющиеся частью двоичным интерфейсом приложения и включены в ядро в качестве одной из его составных частей. Как поясняют назначение abi на англоязычных форумах,
The ABI is included as part of the kernel version. If you run the command uname -r you will see something like 2.6.26-4-generic. The 4 in this example is the ABI. Numerically, it means nothing, except that it has changed since 3 and will be 5 when it changes again.
abi is the application binary interface, which are the kernel "hooks" a program can call to process commands, system libraries, etc. Because these machine language addresses move from time to time, the abi provides a common directory for applications to reference.
Хорошей практикой считается удаление всех ядер за исключением текущего и ему предшествующего. Но если Вы уверены в том, что система со свежим ядром функционирует должным образом, то удалить можно все предыдущие. В соответствии с этим критерием, в рассматриваемом примере удалению подлежат ядра 4.13.0-26, 4.13.0-31, 4.13.0-32, 4.13.0-36.
Дополнение. К имеющим отношения к ядрам также относятся и каталоги с файлами и вложенными каталогами, расположенные в /lib/modules
Составление команды для удаления выбранных ядер
Командами для удаления ядра являются sudo apt purge linux-image- и sudo apt purge linux-headers- Например, для удаления ядра 4.13.0-32 указанные команды приобретут вид sudo apt purge linux-image-4.13.0-32 и sudo apt purge linux-headers-4.13.0-32 Чтобы не вводить эти команды по одной между нами пишутся два символа &&. Поэтому командой удаления ядра 4.13.0-32 в одну строку является
purge linux-image-4.13.0-32 && sudo apt purge linux-headers-4.13.0-32
Так как в примере моё намерение включает удаления ядер 4.13.0-26, 4.13.0-31, 4.13.0-32, 4.13.0-36, то командой для их удаления будет являться
sudo apt purge linux-image-4.13.0-26 && sudo apt purge linux-headers-4.13.0-26 && sudo apt purge linux-image-4.13.0-31 && sudo apt purge linux-headers-4.13.0-31 && sudo apt purge linux-image-4.13.0-32 && sudo apt purge linux-headers-4.13.0-32 && sudo apt purge linux-image-4.13.0-36 && sudo apt purge linux-headers-4.13.0-36
Примечание.
Профессионалы, конечно, могут меня "тыкнуть носом" в то, что более грамотной командой будет являться sudo apt purge linux-image-4.13.0-{26,31,32,36} && sudo apt purge linux-headers-4.13.0-{26,31,32,36}.
Однако у меня был случай, когда была допущена ошибка: вместо 4.10 было указано 4.4 Поэтому при составлении "грамотной" команды необходимо проявлять предельную внимательность.
А поскольку мне проще в команды после image- и headers- дописывать номера ядер, то пишу в столбик
sudo apt purge linux-image-4.13.0-26
sudo apt purge linux-headers-4.13.0-26
sudo apt purge linux-image-4.13.0-31
sudo apt purge linux-headers-4.13.0-31
sudo apt purge linux-image-4.13.0-32
sudo apt purge linux-headers-4.13.0-32
sudo apt purge linux-image-4.13.0-36
sudo apt purge linux-headers-4.13.0-36
и затем преобразую написанное в одной строку так, чтобы между командами присутствовали символы пробел&&пробел.
Как указано выше, чтобы не вводить каждый раз y на вопрос "Хотите продолжить? [Д/н]", в команду удаления после sudo apt purge добавляется -y. При этом предполагается ответ Yes на все вопросы, а сами вопросы не выводятся. Команда – sudo apt purge -y
Таким образом, итоговой командой для удаления ядер 4.13.0-26, 4.13.0-31, 4.13.0-32, 4.13.0-36 без ввода подтверждения своих действий является
sudo apt purge -y linux-image-4.13.0-26 && sudo apt purge -y linux-headers-4.13.0-26 && sudo apt purge -y linux-image-4.13.0-31 && sudo apt purge -y linux-headers-4.13.0-31 && sudo apt purge -y linux-image-4.13.0-32 && sudo apt purge -y linux-headers-4.13.0-32 && sudo apt purge -y linux-image-4.13.0-36 && sudo apt purge -y linux-headers-4.13.0-36
Примечание. На многих ресурсах для удаления всех ядер кроме используемого приводится команда (в одну строку)
sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
Но мной она никогда не применялась, поэтому прокомментировать её никак не могу.
Важно. Не удаляйте ядро, которое активно в Вашей системе. Чтобы его узнать введите в терминале uname -r. В противном случае Вы пополните круг пользователей, задающих вопрос: "я удалил все ядра, что мне делать?".
Теоретически, после удаления "ненужных" ядер у Вас останутся только те ядра, которые не были назначены к удалению. Как как в описываемом случае удалению подлежали все ядра кроме последнего, то в результате получилось:
Хотя у меня такого не возникло, но если вдруг в каталоге modules "лишние" каталоги не были удалены, то можно использовать команду, например,
sudo rm -R /lib/modules/4.13.0-26-generic && sudo rm -R /lib/modules/4.13.0-31-generic && sudo rm -R /lib/modules/4.13.0-32-generic && sudo rm -R /lib/modules/4.13.0-36-generic
Примечание. О неудалении относящихся к ядрам каталогов в /lib/modules свидетельствуют выводы в окне терминала, такие как, например, это
dpkg: предупреждение: при удалении linux-headers-4.13.0-32-generic каталог «/lib/modules/4.13.0-32-generic» не пуст, поэтому не удалён
Надо обновить GRUB!
Раньше такое действие мной и применялось, поэтому в конец команды удаления дописывалось && sudo update-grub
Однако при визуальном контроле хода удаления ядер в терминале мной было обращено внимание на то, что после каждого удаления ядра отображается. Например, после удаления ядра 4.13.0-26
Найден образ linux: /boot/vmlinuz-4.13.0-37-generic
Найден образ initrd: /boot/initrd.img-4.13.0-37-generic
Найден образ linux: /boot/vmlinuz-4.13.0-36-generic
Найден образ initrd: /boot/initrd.img-4.13.0-36-generic
Найден образ linux: /boot/vmlinuz-4.13.0-32-generic
Найден образ initrd: /boot/initrd.img-4.13.0-32-generic
Найден образ initrd: /boot/initrd.img-4.13.0-32-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.binзавершено
А после завершения удаления ядра 4.13.0-36
Найден образ linux: /boot/vmlinuz-4.13.0-37-generic
Найден образ initrd: /boot/initrd.img-4.13.0-37-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
завершено
Поэтому необходимости в sudo update-grub не вижу.
Послесловие
Хочется надеяться, что к содержанию данной публикации не будет применим "печальный" комментарий участника одного из форумов:
Американский форум – задал вопрос, тебе обстоятельно и вежливо ответили.
Еврейский форум – задал вопрос, тебе задали вопрос.
Русский форум – задал вопрос, тебе объяснили какой же ты мудак.
Спасибо за очень толковый и грамотный пост
ОтветитьУдалить