Tengo 200 MB asignados para la /boot
partición. Cada vez que intento actualizar el kernel, recibo un mensaje de error que básicamente dice que /boot
está lleno.
¿Qué puedo hacer para limpiar /boot
y eliminar / respaldar los núcleos más antiguos?
Tengo 200 MB asignados para la /boot
partición. Cada vez que intento actualizar el kernel, recibo un mensaje de error que básicamente dice que /boot
está lleno.
¿Qué puedo hacer para limpiar /boot
y eliminar / respaldar los núcleos más antiguos?
Respuestas:
Primero verifique la versión de su núcleo, para que no elimine la imagen del núcleo en uso, ejecutando:
uname -r
Ahora ejecute este comando para obtener una lista de los núcleos instalados:
dpkg --list 'linux-image*' | grep ^ii
y elimine los núcleos que ya no desea / necesita ejecutando esto:
sudo apt-get remove linux-image-VERSION
Reemplace la VERSIÓN con la versión del núcleo que desea eliminar.
Cuando haya terminado de eliminar los núcleos más antiguos, puede ejecutar esto para eliminar los paquetes que ya no necesitará:
sudo apt-get autoremove
Y finalmente puede ejecutar esto para actualizar la lista de kernel de grub:
sudo update-grub
sudo dpkg --list 'linux-image*' | grep ^ii
hace que sea un poco más fácil ver solo los núcleos instalados. También creo que update-grub
es inofensivo pero no estrictamente necesario, se ejecuta automáticamente cuando desinstala un núcleo.
sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""
para obtener la lista de nombres de paquetes que se utilizarán sudo apt-get remove
. head -n -3
se usa para mantener los 3 núcleos más recientes que quedan en el sistema.
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
debería ser suficiente (generalmente te deja con los últimos 3 núcleos)
/boot
está lleno, por apt-get
lo que fallará con algún código de error u otro. La respuesta a continuación es una "hackier" bits (debo confesar que tuve que armarme de emitir que rm -rf
en /boot
), pero el único que es probable que funcione en esta situación.
NOTA: esto es solo si no puede usar apt para limpiar debido a un 100% lleno / arranque
Si apt-get no funciona porque su / boot está al 100%, primero deberá limpiar / boot. Es probable que esto haya detectado una actualización del kernel en una instalación parcial, lo que significa que apt se ha congelado por completo y seguirá diciéndole que se ejecute apt-get -f install
a pesar de que ese comando sigue fallando.
Obtenga la lista de imágenes del kernel y determine de qué puede prescindir. Este comando mostrará los núcleos instalados, excepto el que se está ejecutando actualmente sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
. Tenga en cuenta las dos versiones más recientes de la lista. No necesita preocuparse por el que se está ejecutando, ya que no figura aquí. Puedes verificar eso con uname -r
.
Crea un comando para eliminar todos los archivos en / boot para los núcleos que no te importan usando la expansión de llaves para mantenerte cuerdo. Recuerde excluir las imágenes del kernel actuales y las dos más recientes. Ejemplo: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*
. También puede usar un rango con la sintaxis {80..84}.
sudo apt-get -f install
para limpiar lo que hace que apt gruñona sobre una instalación parcial.
Si se encuentra con un error que incluye una línea como "Error interno: no se pudo encontrar la imagen (/boot/vmlinuz-3.2.0-56-generic)", ejecute el comando sudo apt-get purge linux-image-3.2.0-56-generic
(con su versión adecuada).
Finalmente, sudo apt-get autoremove
para borrar los paquetes de imágenes de kernel antiguos que han quedado huérfanos mediante la limpieza de arranque manual.
Sugerencia, ejecute sudo apt-get update
y sudo apt-get upgrade
cuide cualquier actualización que pueda haber realizado una copia de seguridad mientras espera que descubra la partición completa / de inicio.
Sugerencia2, revise https://help.ubuntu.com/community/AutomaticSecurityUpdates y considere configurar Unattended-Upgrade :: Remove-Unused-Dependencies en true en /etc/apt/apt.conf.d/50unattended-upgrades. Esto será el equivalente a ejecutar Autoremove después de cada actualización de seguridad para asegurarse de que limpia los núcleos no utilizados, pero también eliminará otras cosas que cree que no se utilizan, lo que lo salvará de este problema en el futuro.
dpkg --purge
una bota completa, obtendrá lo siguiente $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
df -i
descubrí que yo también estaba quedando sin ínodos /
debido a la enorme cantidad de archivos para el código fuente de los núcleos antiguos en/usr/src
Hay documentación sobre esto en https://help.ubuntu.com/community/RemoveOldKernels
En resumen: uso
sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels
La purge-old-kernels
herramienta se puede instalar a través de sudo apt install byobu
. Aquí está la descripción de su página de manual:
Este programa eliminará los paquetes antiguos de kernel y encabezado del sistema, liberando espacio en disco. Nunca eliminará el núcleo actualmente en ejecución. Por defecto, mantendrá al menos los 2 núcleos más recientes, pero el usuario puede anular ese valor utilizando el
--keep
parámetro.
Si desea una solución de copiar y pegar, ReSearchIT Eng sugirió lo siguiente:
sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
apt-get autoremove --purge
embargo, creo que debería ser suficiente.
Descubrí que es mucho más fácil abandonar la pequeña partición y pasar /boot
a la raíz. Esto también evita cualquier problema de falta de espacio en el futuro.
Primero mueva sus datos de la partición de arranque a la raíz (ejecutar como sudo -s
):
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
Eliminar (o comentar) la /boot
entrada en /etc/fstab
:
vim /etc/fstab
Actualice grub y asegúrese de que todo esté correcto:
update-grub
apt
ahora debería poder actualizar sin problemas.
Esto deja una partición de 200mb sin usar (que podría usar para otra cosa si considera que vale la pena).
Eliminando Kernels viejos (para liberar espacio en / boot) ver: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot
sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
Entonces corre
sudo apt-get update
sudo apt-get autoremove
Esto elimina todos menos los últimos 2 núcleos. Probado en Ubuntu 16.04 LTS cuando /boot
estaba al 100% de su capacidad y apt-get upgrade
falló su última actualización del kernel. La eliminación automática del núcleo es iterativa, por lo que si tiene varios núcleos, se eliminarán de uno en uno. Sé paciente.
¿Por qué hacerlo a mano cuando puedes hacerlo con una herramienta? Usted sabe que lo necesitará nuevamente en 30 segundos, porque les lleva 30 segundos impulsar una nueva actualización de kernel en estos días = P
Recomiendo usar esta herramienta, bootnukem
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
Entonces
sudo bootnukem --dry-run
Eliminar --dry-run
una vez que confirme que parece seguro