Aqui está um script que faz isso automaticamente.
A maneira mais fácil de liberar espaço em / boot é livrar-se de kernels antigos e não utilizados. Não é importante quando excluo os kernels para nunca deletar o kernel que você está usando atualmente (cheque com uname -r) e você não quer deletar o kernel mais novo, senão você irá baixá-lo novamente na próxima atualização.
Cada kernel e os recursos de disco relacionados a ele ocupam cerca de 50 MB de espaço. Você também deseja excluir os kernels usando apenas o apt purgar, pois remove as dependências e atualiza o grub no final. Você pode ver uma lista de kernels instalados usando dpkg -l | grep linux-image.
O Autoremove nem sempre obtém todos os kernels antigos.
#!/bin/bash
# create the clean-boot command line utility, if it doesn't exist
if [ ! -f /usr/sbin/clean-boot ]; then
cp "$0" /usr/sbin/clean-boot
chown root.root /usr/sbin/clean-boot
chmod 0770 /usr/sbin/clean-boot
fi
# add clean-boot cron job to root's crontab, if it doesn't exist
if [[ 'crontab -l | grep "/usr/sbin/clean-boot" | wc -l' -eq 0 ]]; then
(crontab -l 2>/dev/null; echo "0 10 * * 3,4 /usr/sbin/clean-boot") | crontab -
fi
# array of kernels installed on the system
kernels=($(dpkg --list | grep 'linux-image-[0-9]' | awk '{ print $2 }'))
# kernel currently being used by the system
current_kernel=linux-image-'uname -r'
# newest kernel installed (currently being initialized to current_kernel)
newest_kernel=$current_kernel
# for loop below used to find the newest insitalled kernel
for i in "${kernels[@]}"
do
# since newest is initialized to current, there is no need to parse through kernels same version as the one currently loaded
if [[ $i != $current_kernel* ]]; then
# each iteration of the for loop is for each version number (kernel version, major, minor, incidental numbers) example 4.8.0-56-generic
for counter in 1 2 3 4
do
# if statement extracts the version numbers
if [[ $counter -lt 3 ]]; then
compare_number=$(echo ${i#"linux-image-"} | cut -d'.' -f$counter)
newest_number=$(echo ${newest_kernel#"linux-image-"} | cut -d'.' -f$counter)
elif [[ $counter -eq 3 ]]; then
compare_number=$(echo ${i#"linux-image-"} | cut -d'.' -f$counter)
newest_number=$(echo ${newest_kernel#"linux-image-"} | cut -d'.' -f$counter)
compare_number=$(echo ${compare_number} | cut -d'-' -f1)
newest_number=$(echo ${newest_number} | cut -d'-' -f1)
else
compare_number=$(echo ${i#"linux-image-"} | cut -d'-' -f2)
newest_number=$(echo ${newest_kernel#"linux-image-"} | cut -d'-' -f2)
fi
# this if statement does the comparison
if [[ $compare_number -eq $newest_number ]]; then
continue
elif [[ $compare_number -lt $newest_number ]]; then
break
else
newest_kernel=$i
break
fi
done
fi
done
# for every kernel
for i in "${kernels[@]}"
do
# delete the kernel if the kernel is not the one in use and is not the newest one installed
if [[ $i != $current_kernel* && $i != $newest_kernel* ]]; then
apt-get purge "$i" -y
fi
done