среда, 17 марта 2021 г.

Удаление старых ядер и очистка системы в Linux Mint 20x

В настройках системы имеется пункт об удалении ненужных ядер, который доступ при обращении к менеджеру обновлений в разделе "Правка – Параметры – Автоматизация". Если в строке "Автоматическое обслуживание" положение движка установить в положение "Включено", то задание будет выполняться еженедельно от имени суперпользователя.

Однако мне более привычен старый способ удаления лишних ядер и очистки системы от ненужных файлов, который, как показала практика, в Linux Mint 20x не работает. Чтобы он работал в условии необходимо изменить значение vmlinuz* на config*

🔰   Вообще рекомендуют оставлять в системе предыдущее ядро,
        чтобы в случае проблем с новым ядром можно было бы с загрузиться с прежним. Но лично у меня за последние годы такой необходимости ни разу не возникло.

Задачу можно выполнять при каждой загрузке системы, для чего создаваемый сценарий sh поместить в автозагрузку. Файл sh должен иметь разрешение на запуск как программы.

Так как операции могут быть выполнены только с правами суперпользователя (напр., sudo /home/user/clean.sh), то самому скрипту ( clean.sh – так называется у меня. Вы можете ему назначить какое угодно имя ) можно назначить запуск от имени суперпользователя без ввода пароля. Для этого выполните в терминале sudo xed /etc/sudoers и добавьте в него строку:

user ALL=NOPASSWD: путь_к_вашему_скрипту (напр., /home/user/clean.sh)  

user – это ваш логин в системе.

При запуске сценария производится подсчёт ядер в системе. Если количество ядер будет больше 1, то будет осуществлено удаление всех ядер кроме текущего, а также выполнены команды автоочистки и автоудаления ненужных пакетов. Также в процессе будут удалены неиспользуемые модули ядра из каталога /lib/modules

Текст сценария (на примере моего).

#!/bin/bash
folder=/home/minter
kern=`find /boot -name config* | wc -l`
if [ $kern -gt 1 ];
  then
     apt purge -y $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
     apt autoclean
     apt autoremove -y
     rm $folder/.bash_history
     > 
$folder/.bash_history
fi
exit

Обратите внимание на переменную folder, которая указывает на домашнюю папку пользователя, соответствующую логину пользователя в системе (в приводимом примере – minter). Не ошибитесь, иначе вы получите свой "самый чистый домашний каталог в мире".

Если вам нужно протоколирование действий, то добавьте их в протокол событий, например:

#!/bin/bash
folder=/home/minter
log= ... указать расположение файла
kern=`find /boot -name config* | wc -l`
if [ $kern -gt 1 ];
   then
      echo "$(date '+%H-%M-%S') -- в системе ядер - $kern, удаление ядер." >> $log
      apt purge -y $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
      echo "$(date '+%H-%M-%S') -- запуск автоочистки." >> $log
      apt autoclean
      echo "$(date '+%H-%M-%S') -- запуск автоудаления." >> $log
      apt autoremove -y
      rm $folder/.bash_history
      > $folder/.bash_history
      echo "$(date '+%H-%M-%S') -- история bash очищена." >> $log
   else
      echo "$(date '+%H-%M-%S') -- очистка системы не требуется." >> $log
fi
exit


Пример практического выполнения.

Листинг каталога /boot до работы clean.sh :

config-5.4.0-66-generic
config-5.4.0-67-generic
grub
initrd.img
initrd.img-5.4.0-66-generic
initrd.img-5.4.0-67-generic
initrd.img.old
System.map-5.4.0-66-generic
System.map-5.4.0-67-generic
vmlinuz
vmlinuz-5.4.0-66-generic
vmlinuz-5.4.0-67-generic
vmlinuz.old

Листинг каталога /boot после работы clean.sh :

config-5.4.0-67-generic
grub
initrd.img
initrd.img-5.4.0-67-generic
initrd.img.old
System.map-5.4.0-67-generic
vmlinuz
vmlinuz-5.4.0-67-generic
vmlinuz.old

Комментариев нет:

Отправить комментарий