Tengo 200 MB asignados para la /bootpartición. Cada vez que intento actualizar el kernel, recibo un mensaje de error que básicamente dice que /bootestá lleno.
¿Qué puedo hacer para limpiar /booty eliminar / respaldar los núcleos más antiguos?
Tengo 200 MB asignados para la /bootpartición. Cada vez que intento actualizar el kernel, recibo un mensaje de error que básicamente dice que /bootestá lleno.
¿Qué puedo hacer para limpiar /booty 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 ^iihace que sea un poco más fácil ver solo los núcleos instalados. También creo que update-grubes 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 -3se 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 autoremovedebería ser suficiente (generalmente te deja con los últimos 3 núcleos)
/bootestá lleno, por apt-getlo 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 -rfen /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 installa 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 autoremovepara 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 updatey sudo apt-get upgradecuide 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 --purgeuna 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 -idescubrí 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-kernelsherramienta 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
--keeppará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 --purgeembargo, creo que debería ser suficiente.
Descubrí que es mucho más fácil abandonar la pequeña partición y pasar /boota 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 /bootentrada 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 /bootestaba al 100% de su capacidad y apt-get upgradefalló 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-rununa vez que confirme que parece seguro