¿Cuál es la forma más segura de limpiar / iniciar la partición?

Respuestas:

335

Método de línea de comando:

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
PeppeDAlterio
fuente
34
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.
Nelson
99
Utilícelo 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.
Sithsu
2
my one one liner:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb
27
sudo apt-get autoremovedebería ser suficiente (generalmente te deja con los últimos 3 núcleos)
mbx
66
Esta es una buena respuesta, pero dudo que pueda funcionar en la mayoría de los casos (si no en todos): el problema es que /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.
Marco
284

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.

flickerfly
fuente
3
De esta manera tengo lo último para el próximo reinicio y luego el anterior solo en caso de que algo se rompa en ese. Por lo general, tengo mucho espacio, por lo que no me duele tener unos pocos y satisface mi paranoia por no tener suficientes opciones de respaldo en un escenario dado.
flickerfly
1
Nunca he tenido un problema causado por actualizaciones desatendidas. Me imagino escenarios en los que esto podría ser un problema principalmente debido a la pérdida de dependencias en instalaciones empaquetadas que no sean deb. Digamos que instala php, decide desinstalarlo e instala una versión más nueva de la fuente. Esta versión tiene dependencias proporcionadas por la instalación anterior, pero apt no es consciente de que todavía es necesaria. La próxima vez que ejecute la eliminación automática, esas dependencias desaparecerán. Si se automatiza, esto podría ser un poco confuso. Si no lo instala fuera de los repositorios, creo que es totalmente seguro.
flickerfly
3
Después de ver esto en varios servidores virtuales vsphere (donde los núcleos se actualizaban automáticamente pero no se eliminaban después), escribí un script de Python para automatizarlo. Me encantaría tener más ojos en él
EvanK
2
Si usa 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
flickerfly
1
Después de limpiar / arrancar apt-get install -f todavía no funcionaría. Usando 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
Kristofer
51

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 --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
peq
fuente
3
En mi caso, apt no funciona debido a un kernel pendiente y la solución sugerida es un problema:
James Bowery,
Primero tuve que arreglar paquetes rotos con askubuntu.com/a/304388/284313 Después de eso su solución funcionó.
James Bowery
3
Creo que esta debería ser la solución aceptada a partir de ahora.
Fran Marzoa
3
Esto es mucho más seguro que la respuesta aceptada. Sin apt-get autoremove --purgeembargo, creo que debería ser suficiente.
Woodrow Barlow
7

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).

laktak
fuente
55
Esta es una buena idea, pero no funciona si desea tener un cifrado de disco completo para su partición raíz.
Paŭlo Ebermann el
Sí, hay casos en los que / boot debería ser una partición separada. Otro ejemplo fue que Grub no podía cargarse desde una partición LVM.
Bastión
4

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
Amos Folarin
fuente
1
este fue el único que funcionó ... gran solución
John
¡La mejor respuesta! Esta es la única solución que funcionó para mí; autoremove es estúpido; intenta reinstalar cualquier núcleo con dependencias insatisfechas antes de eliminarlo oficialmente. Iba en círculos quedando sin espacio una y otra vez. Esta respuesta es oro.
Lonnie Best
3

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.

DeepSpace101
fuente
1

¿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

Jonathan
fuente