¿Cómo libero más espacio en / boot?

563

Mi /bootpartición está casi llena y recibo una advertencia cada vez que reinicio mi sistema. Ya eliminé los paquetes antiguos del kernel (linux-headers ...), en realidad lo hice para instalar una versión más nueva del kernel que venía con las actualizaciones automáticas.

Después de instalar esa nueva versión, la partición está casi llena nuevamente. Entonces, ¿qué más puedo eliminar? ¿Hay otros archivos asociados a las imágenes antiguas del kernel?

Aquí hay una lista de archivos que están en mi /bootpartición:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Actualmente, estoy usando el 3.0.0-14-generickernel.

usuario6722
fuente
55
Vale la pena mencionar que no todas las instalaciones de Ubuntu tendrán una partición separada / de arranque, a menudo solo será una gran partición. Esta respuesta se aplica a aquellos que tienen una partición separada / de arranque. Aquellos que usan LVM o encriptación de "disco completo" necesitan un arranque / arranque separado, de lo contrario puede ser opcional.
thomasrutter 01 de
44
Si alguien más tiene el mismo problema que yo: después de / boot no queda espacio, "apt-get upgrade" fallará al volver a generar archivos initrd para los núcleos que están instalados o que el script update-initramfs cree que están instalados al examinar el contenido de / var / lib / initramfs-tools. En esta situación, uno no puede eliminar los núcleos antiguos utilizando apt-get porque la partición fscking / boot no tiene espacio en el dispositivo. Se puede hacer esto usando "dpkg -P" seguido de limpiar la entrada correspondiente en / boot (para liberar espacio) y / var / lib / initramfs-tools (la imagen initrd no se generará).
wojci
3
Un punto clave para las respuestas correctas es que le dicen que elimine los paquetes que contienen las versiones anteriores del núcleo. Muchas páginas web que abordan este problema recomiendan eliminar directamente los archivos en la partición / boot; eso puede funcionar por un tiempo, pero eventualmente puede actualizar un paquete que recrea los archivos que faltan para las versiones del kernel que tienen paquetes, lo que lo deja sin espacio.
kgrittn

Respuestas:

630

Tienes muchos núcleos sin usar. Elimine todos los núcleos excepto los últimos con:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Esta es la abreviatura de:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Al eliminar el linux-image-x.x.x-xpaquete también se eliminará linux-image-x.x.x-x-generic.

Los encabezados se instalan /usr/srcy se utilizan al construir módulos de kernel fuera del árbol (como el controlador de nvidia y virtualbox). La mayoría de los usuarios deberían eliminar estos paquetes de encabezado si el paquete de kernel correspondiente ( linux-image-*) no está instalado.

Para enumerar todos los núcleos instalados, ejecute:

dpkg -l linux-image-\* | grep ^ii

Un comando para mostrar todos los núcleos y encabezados que se pueden eliminar, excluyendo el núcleo actual en ejecución:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Selecciona todos los paquetes nombrados comenzando con linux-headers-<some number>o linux-image-<some number>, imprime los nombres de paquete para los paquetes instalados y luego excluye el kernel cargado / en ejecución actual (¡no necesariamente el kernel más reciente !). Esto se ajusta a la recomendación de probar un kernel más nuevo antes de eliminar los kernel más antiguos y conocidos.

Entonces, después de actualizar los núcleos y reiniciar para probarlo, puede eliminar todos los demás núcleos con:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
Lekensteyn
fuente
16
Fantástica respuesta. Otra información adicional ayudaría: ¿Cómo puede saber (con seguridad) cuál de los núcleos está utilizando? Presumiblemente no puedes simplemente asumir que es el último ... Editar : Y parece que la respuesta es uname -a. Probablemente sea mejor asegurarse de que no tiene un reinicio pendiente para instalar-nuevo-kernel pendiente (como lo hice yo, pero noté la falta de coincidencia entre uname -ay el "último" kernel).
TJ Crowder
55
@freddyb Hecho. Tenga en cuenta que los comandos imprimen / eliminan núcleos que no sean los cargados / arrancados .
Lekensteyn
99
Si apt-get purge falla debido a dependencias insatisfechas, puede seguir los consejos en askubuntu.com/questions/171209/…
svandragt
11
Respuesta muy exhaustiva y aún funciona ... y aún se necesitaba en 2014. Es un poco ridículo que las herramientas GUI aún no lo hagan automáticamente.
allprog
66
@ byf-ferdy El kernel es una parte esencial del sistema operativo, si la versión más nueva de alguna manera no funciona completamente con su hardware, aún puede seleccionar una versión diferente para iniciar. Una buena característica probablemente sería algo que elimine todos los núcleos instalados automáticamente de más de un mes (excepto los dos últimos).
Lekensteyn
217

Su partición de arranque está llena. Como se trata de una actualización del kernel, estos archivos se copiarán en la partición de arranque, por lo que debe limpiarlos. Aquí hay una publicación de blog que le mostrará cómo borrar las imágenes antiguas del kernel con un comando. Daré una sinopsis básica del método. Use este comando para imprimir la versión actual de su núcleo:

uname -r

Luego use este comando para imprimir todos los núcleos que ha instalado que no son su núcleo más nuevo:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Asegúrese de que su núcleo actual no esté en esa lista. Observe cómo esta es la mayoría del comando final (abajo). Para desinstalar y eliminar estos núcleos antiguos, querrá canalizar estos argumentos a:

sudo apt-get -y purge

Ahora podemos hacer todo lo que queramos combinando estos dos últimos comandos en este lío impío:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Y ese comando se encargará de todo por ti. Confirmaré que esto funciona perfectamente, pero nunca confíes en nadie en Internet. :) Para obtener más información, la publicación del blog ofrece una muy buena explicación de lo que hace cada parte del comando, así que léelo para que esté satisfecho de que hace lo que quiere que haga.

Dward
fuente
esto también coincide con linux-libc-dev: amd64
Frederick Nord
¿Qué causará la eliminación involuntaria de "linux-libc-dev: amd64"?
ConfusedStack
@FrederickNord gracias por el aviso. Solucionado esto. Habría causado algunas dificultades compilando programas en c.
Dward
99
El comando suena bien, pero cuando lo ejecuto me sale el mismo error que recibo cuando quiero instalar algo y no puedo hacerlo porque el arranque está lleno: --------------- ----------- Los siguientes paquetes tienen dependencias insatisfechas: linux-image-extra-4.2.0-27-generic: Depende: linux-image-4.2.0-27-generic pero no funciona se instalará linux-image-extra-4.2.0-30-generic: depende de: linux-image-4.2.0-30-generic pero no se instalará
Alex
109
sudo apt-get autoremove

Este comando está haciendo el trabajo automáticamente.

karan
fuente
77
Como su nombre lo indica, apt-get AUTOremove es una operación automatizada en la que el sistema adivina lo que está tratando de lograr. No debe usarse como un sustituto de la administración del sistema de sentido común. El problema con este enfoque: si usted (o una actualización) elimina un paquete que forma parte de esta lista de dependencias, la función de eliminación automática desea eliminar todos los demás paquetes en la lista de dependencias, dejándolo con un sistema sin escritorio de trabajo (y a veces incluso con un sistema completamente roto).
Rinzwind
Referencia: 1 de muchas fuentes para este comentario anterior: linuxquestions.org/questions/debian-26/…
Rinzwind
77
si linux-image-generic está instalado y los nuevos núcleos no se instalaron explícitamente, esto eliminará los núcleos antiguos. El sentido común es no aceptar ningún cambio en el sistema sin leerlo primero. Si se ha usado el sentido común antes de usar este comando, entonces no habrá problemas.
mchid
1
@Rinzwind - Este comando vació 250 mb de espacio en mi disco al eliminar viejos 'encabezados de Linux'
Chinmaya B
3
autoremove funciona si se usa antes de que exista una condición de falta de espacio. Sin embargo, una vez que apt se queda sin espacio y aborta (y el usuario finalmente se da cuenta del problema), es demasiado tarde para ejecutar Autremove o cualquier otra solución basada en apt. Si ese es tu caso, prueba una de las soluciones basadas en dpkg.
user535733
40

Synaptic Package Manager se puede usar para seleccionar y eliminar fácilmente imágenes antiguas del núcleo. Captura de pantalla de Synaptic Package Manager

Si aún no tiene Synaptic instalado:

sudo apt-get install synaptic

Inicie la aplicación y seleccione las opciones que se muestran.

Debería poder resaltar todos los paquetes "linux-" con la versión "2.6.x" donde x está entre 31 y 38 de acuerdo con los archivos en su carpeta / boot.

Haga clic derecho en cada uno de esos paquetes de Linux y elija la opción "Marcar para eliminación completa". Finalmente haga clic en el botón Aplicar. Esto eliminará todos los archivos y cualquier archivo asociado. Su /bootcarpeta ahora debería estar un poco más ordenada.

fossfreedom
fuente
Estoy en 14.04. He manejado esta situación en el pasado a través de la línea de comando, pero decidí probar este método hoy ... para mí, mis imágenes de Linux estaban ubicadas bajo instalado (manual), no instalado (local u obsoleto)
Ryan
8
Oh no. ¡No puedo instalar Synaptic porque no hay espacio /boot!
John McGehee
@JohnMcGehee fsck y parted deberían resolver ese problema por ti.
FlipMcF
25

Gracias por su publicación detallada de su problema, esto me llevó en la dirección correcta. Aunque es útil mantener los archivos del kernel anteriores, puede eliminarlos de una sola vez, consulte esta publicación:
Cómo eliminar todos los encabezados, imágenes y módulos del kernel de Linux no utilizados

Hecho a través de la línea de comando. Si está haciendo esto de forma remota, use algo como WINSCP para abrir una sesión de terminal y simplemente péguelo, funciona muy bien.

Aquí está copiado del enlace del artículo, le sugiero que lea el artículo completo:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
Omni
fuente
23

Esta es una nueva respuesta a una pregunta anterior, pero una manera fácil de limpiar esto (y más) es instalar Ubuntu Tweak . Para instalarlo :

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

entonces puedes ejecutar Ubuntu Tweak, yendo a la pestaña "conserje", y desde aquí es cuestión de tres clics:

Ubuntu tweak conserje para núcleos antiguos

Sin embargo, es mejor dejar el último kernel (nunca se sabe) o un kernel que funcione bien por seguridad; Pero eso es fácilmente personalizable.

Puede usar la misma herramienta para limpiar muchas cosas, solo recuerde que si limpia el caché de miniaturas o el caché de TB, el sistema tendrá que reconstruirlos si es necesario.

Rmano
fuente
Traté de instalar Ubuntu tweak y también ir al sitio web del repositorio. Dice que es solo para 13.10 y antes. ¿Tiene una versión actualizada para 15.04?
JayCouture.com
@ JayCouture.com La versión en el sitio es para 14.04 (el "para 13.10 y antes" es un enlace a versiones anteriores). Ignoro si hay una versión para 14.10 o 15.04.
Rmano
19

Pude solucionar el problema usando dpkgpara eliminar los paquetes directamente. Aunque los paquetes todavía se enumeran dpkg -l, los archivos se eliminan /boot, liberando espacio.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Después de esto, apt-get -f installsolucioné mis problemas de dependencia, y todo estaba bien con el mundo.

Sin embargo, no aceptaré esta respuesta mía, ya que todavía necesito saber si debería aumentar mi /boottamaño o hacer algo más.

Phrogz
fuente
En primer lugar, no debería tener una partición separada / de arranque, o debería aumentar su tamaño ya que 100mb es demasiado pequeño.
psusi
1
Gracias, borro a través de:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt
2
y sudo dpkg --remove linux-image-3.5.0-28*para la imagen, revisada víadf -h
TiloBunt
Gracias, esto también me sirvió. Eliminé algunos núcleos antiguos ( no el que estaba usando actualmente) y luego hice el apt-get -f install. Además, no te olvides de hacerlo más tarde apt-get autoremove, para eliminar posiblemente otros innecesarios.
Yajo
15

Puede dejar de usar una partición separada / de arranque, entonces no tendrá un espacio tan limitado allí. Para hacer esto, desmonte la partición, luego móntela en otro lugar y copie todos los archivos allí en el directorio / boot en su partición raíz, luego elimine la entrada de / etc / fstab y reinstale grub. Por ejemplo (necesitará usar la partición correcta):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Luego puede usar gparted para eliminar la partición antigua / de arranque, y posiblemente extender la partición raíz para usar ese espacio. Para extender la partición raíz, deberá iniciar desde el livecd, y el espacio libre debe estar inmediatamente a la derecha. Si la partición / boot está actualmente a la izquierda de la partición raíz, primero deberá mover la partición raíz a la izquierda, luego extenderla, pero esto puede llevar mucho, mucho tiempo, por lo que puede no valer la pena. problema.

psusi
fuente
66
Mover / boot a mi partición principal no es una solución para mí, ya que todo menos / boot está encriptado. No podías saberlo por mi pregunta, lo siento.
user6722
Esta es una buena solución si las soluciones anteriores no funcionan debido a que no hay espacio en absoluto en el volumen de arranque, o si repetidamente tiene el problema de "falta de espacio". Lea primero por qué a veces es necesario tener una partición / boot: ( help.ubuntu.com/community/DiskSpace )
svandragt
@svandragt, básicamente no hay razón para necesitar una partición / boot en estos días. El único que queda es si su BIOS está rota y no puede ver todo el disco, y cualquier máquina fabricada en la última década no tiene esa limitación. Grub2 ahora maneja adecuadamente otros casos heredados, como el uso de raid o LVM.
psusi
Hay algunas razones para tener una partición de arranque separada. Pero no estoy seguro de que los beneficios valgan la configuración de mayor complejidad. 1. El sistema operativo puede beneficiarse de un arranque más rápido a través de ext2. 2. La seguridad se puede aumentar montando / arrancando como RO. (rootkits, etc.), o incluso permanecen desmontados en el tiempo de ejecución del sistema operativo. 3. grub (1) tiene (tuvo) algunos problemas con ext4 todavía. 4. Requerido para ejecutar lvm (grubv1). Aunque esto no se aplica a la configuración predeterminada de ubuntu.
David Cahill
lsblkpuede usarse para determinar qué partición es qué
Mr Purple,
9

Tomando lo mejor de las respuestas anteriores, mi enfoque probado es el siguiente:

  • uname -a para encontrar el kernel en ejecución.
  • dpkg -l linux-{headers,image}-\* | grep ^iipara enumerar todos los paquetes relacionados con el kernel actualmente instalados. Esto incluirá el núcleo en ejecución.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}para eliminar los viejos núcleos. Reemplace xx,yy,zzcon una lista de las compilaciones del núcleo que desea eliminar: estas son todas las compilaciones enumeradas por el comando anterior que son más antiguas que el núcleo actualmente en ejecución. Asegúrese de no eliminar el kernel que se está ejecutando actualmente: su sistema no se podrá iniciar . También es posible que deba cambiar la versión del kernel 3.16.0a la que esté instalada en su sistema.
  • Opcionalmente, haga un adicional: sudo apt-get autoremoveesto eliminará las dependencias sobrantes de los núcleos antiguos que ya no necesita el actual, liberando más espacio.

Es posible que tenga archivos de encabezado sin instalar versiones coincidentes del kernel, o viceversa, solo incluya todas estas versiones en el comando. APT se quejará de que algunos paquetes no se pueden eliminar porque no están instalados, pero eso no hará daño.

Si algo falla ...

  • Si el comando apt falla debido a un espacio libre en el dispositivo de error, utilice el comando correspondiente en lugar dpkg: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Si el comando dpkg aún no funciona porque los linux-imagepaquetes son requeridos por los linux-headerspaquetes de la misma versión (que también desea desinstalar), es posible que dpkg no haya podido resolverlo. Vuelva a examinar la salida de dpkg -ly especifique cualquier sufijo de nombre de paquete en la línea de comando. Por ejemplo, en uno de mis sistemas, el comando que finalmente funcionó fue sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Si obtiene algún otro error, busque ayuda, es posible que tenga un problema diferente de lo que pensaba.
usuario149408
fuente
@ user535733 el caso habitual (al menos con el que sigo corriendo) es que todavía hay algo de espacio /boot, pero no lo suficiente para otro paquete de kernel. En esos casos, lo anterior ha funcionado bien. Sin embargo, siéntase libre de agregar el dpkgcomando correspondiente . En cuanto a purge, no, no es una especie de "eliminación forzada". Lo que hace, de manera diferente remove, es que también elimina los archivos de configuración. Desde / mientras los paquetes del kernel no instalen archivos de configuración, removey purgeharán lo mismo para los paquetes del kernel.
user149408
Se agregó la cuarta viñeta con el comando dpkg correspondiente.
user535733
4

Para mí ambos apt-get purgey dpkg --removeambos fallaron. Así que tuve que borrar un par de imágenes del núcleo de mayor edad del / de arranque con rm -f.

orkoden
fuente
44
Esta no es una buena manera de eliminar paquetes. Si bien esta respuesta no es muy específica acerca de por qué falló la eliminación de la forma correcta, estoy seguro de que si se proporcionó esa información (en una pregunta separada, por supuesto) podríamos tratar de averiguar la causa del problema.
thomasrutter
2
Creo que falló porque la /bootpartición estaba llena. Estos comandos intentan primero actualizar el kernel a reciente y bloquearse No space left on devicemientras se generainitrd.img
vp_arth
1
ADVERTENCIA, eliminar archivos directamente puede ocasionar problemas, ya que una actualización del paquete de firmware de Linux puede recrear el archivo initrd.img para cada versión que cree que está instalada según la información del paquete. Ver: askubuntu.com/questions/865577/…
kgrittn
1
gracias, esta es la solución final que salva vidas cuando nada más funciona.
Jeff Puckett
4

Listar todos los núcleos:

dpkg --list 'linux-image*'

Mostrar el kernel actual:

uname -r

Listar todos los núcleos, EXCEPTO el actual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Asegúrese de que su núcleo actual no esté en esa lista.

Eliminar todos los núcleos EXCEPTO el actual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Borrar otras cosas:

sudo apt-get autoremove

Si aún le da un error de espacio en el disco de arranque para instalar / desinstalar archivos, elimine directamente una de las imágenes VIEJAS del directorio / boot,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

NOTA: Revise la imagen actual del kernel nuevamente antes de eliminar cualquier imagen.

Hemant Thorat
fuente
2

Ya eliminé los paquetes antiguos del kernel (linux-headers ...)

linux-headers-*No son granos. Los paquetes de kernel son los nombrados linux-image-*. Los nombrados linux-headers-*son paquetes de desarrollo para compilar módulos del kernel: no viven en el directorio / boot y no son necesarios para el uso general del día a día de su sistema.

Los archivos que se encuentran en / boot hacen incluir varias imágenes del núcleo de edad ( vmlinuz*) y las imágenes initrd compilados ( initrd.img*) para los granos, lo cual es una indicación de que todavía tiene una gran cantidad de paquetes del núcleo viejos instalados.

Debería poder enumerar sus núcleos instalados con

aptitude search ~ilinux-image

(Tenga en cuenta que esto probablemente devolverá paquetes que no sean núcleos también).

Por lo general, no es necesario instalar más de dos núcleos: el que está actualmente en uso y el anterior (como alternativa). Entonces puede comenzar a eliminar los más antiguos, uno por uno, de esta manera:

sudo apt-get autoremove linux-image-3.2.0-23-generic

¡Asegúrese de sustituir "3.2.0-23-generic" con la versión real del núcleo que desea eliminar! Además, no elimine paquetes como linux-image-generic. Debe tener mucho cuidado de no eliminar el núcleo que se está ejecutando actualmente o no podrá arrancar (Ubuntu puede o no advertirle sobre hacerlo).

Puede encontrar su núcleo actualmente en ejecución con:

uname -r
thomasrutter
fuente
1

Tuve este problema y más, ya que eliminé algunos initrd-img-xxxarchivos manualmente del / boot y tuve un problema que estas versiones antiguas siguen generando y llenando la /bootcarpeta. Para solucionarlo, seguí lo siguiente:

  • Eliminé la versión antigua del kernel generada manualmente para liberar espacio.
  • Estarás editando un archivo de configuración de texto como superusuario, así que pega lo siguiente en un terminal:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Localice la línea update_initramfs=yesy cámbiela a update_initramfs=no. Guarde y salga del archivo, luego ejecute:

    sudo dpkg --configure -a
    

Eso resolvió mi problema. Eso se basó en este blog

Con suerte, todo debería estar bien cuando se reinicie, y más tarde se puede intentar cambiar el noregreso a yesen update-initramfs.conf.

aibrahim
fuente
1

Demuestro que aún en 2017 esta pregunta tiene nuevos comentarios y respuestas, pero falta una respuesta que creo que es muy útil aquí:

Ubuntu como sistema operativo de escritorio de uso cotidiano simple no tiene ninguna razón para instalarse con una partición \ boot separada y algo así NO ofrecerá algo a un "usuario común" ... Entonces, una solución es una instalación nueva sin \ partición boot y esto de manera que nunca tendrás ese problema

PD: Mi respuesta se puede eliminar o agregar en la respuesta aceptada ... (Creo que ayudará a algunas personas de esta manera)

koleygr
fuente
1

Utilidad súper útil que limpiará tu partición de arranque

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Use bajo su propio riesgo, pero funcionó para mí:

sudo bootnukem
Jonathan
fuente
¿Por qué el voto negativo?
Jonathan
0

En aptitude o synaptic hay una sección "empaquetado viejo o instalado manualmente". Debería haber los viejos paquetes de Linux allí.

Martin Ueding
fuente
0

Hay un script bash que escribí a continuación que hace que el proceso sea un poco más fácil de usar.

YMMV: fue hecho para Mint 14. Todavía estoy aprendiendo BASH, por lo que probablemente sea un poco torpe. Úselo bajo su propio riesgo, ¡pero funciona para mí!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script
wibbynut
fuente
0

[Como un novato de AskUbuntu no puedo comentar hasta reputación = 50, así que no desestimes por esto.]

Mi servidor también estaba haciendo esto. Literalmente, ninguna de las respuestas esperadas aquí funcionó, ya que requieren un poco de espacio de trabajo en / arranque para que se completen. Si la partición de arranque está llena, finalizará abruptamente sin eliminar ninguna de las imágenes.

Lo único que funcionó para mí fue revisar la imagen actual, luego sudo rm filenamebuscar manualmente los archivos de imagen más antiguos (cada uno tenía -3.16.0-30 en sus nombres). Una vez hecho eso, sudo apt-get autoremovetenía el margen de maniobra que necesitaba para hacer su trabajo. Destacó algunos errores asociados con esa versión, por ejemplo: "depmod: FATAL: no se pudo cargar /boot/System.map-3.16.0-30-generic: No existe dicho archivo o directorio", pero eso es de esperar.

Cuando terminó, dfdevolvió un 42% en uso para / boot para indicar que está sano nuevamente.

por si acaso
fuente
1
La publicación que estás buscando es askubuntu.com/questions/171209/…
muru
@muru Bueno, sí ... Sugeriría que el póster original también necesitaría este consejo. Una vez que / boot está lleno, estas versiones con script que intentan solucionarlo también fallan ya que, bueno, / boot está lleno.
Justin Case
Bueno, hay dos problemas similares: a) donde el sistema advierte que su disco se está llenando, pero apt-gettiene suficiente espacio para continuar, y b), donde apt-getfalla porque el disco está demasiado lleno. Esa es la otra publicación.
Muru
0

Escribí este script bash para purgar selectivamente los núcleos antiguos de una vez:

kernels rm tamaño real

Todo el código bash e instrucciones están incluidos en el enlace.

WinEunuuchs2Unix
fuente
0

Guarde este script como /usr/local/bin/remove_kernels.sh(recuerde otorgar permisos de ejecución sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Luego, para eliminar todos los núcleos antiguos, simplemente escriba: sudo remove_kernels.sh

Anthony Kelly
fuente
0

/ partición de arranque puede ser un poco extraño a veces

no comience directamente a eliminar archivos kernal.

Pasos a seguir

  1. Verifique el kernel instalado actualmente utilizado por el sistema Linux

    uname -r

    esto debería darle el nombre de la imagen kernal instalada actualmente en el sistema

  2. Ahora comience a eliminar archivos adicionales, excepto el específico instalado en su sistema

    apt-get remove linux-image-XXXXX

  3. También elimine el archivo de encabezado también

    apt-get remove linux-headers-XXXXX

  4. También puede haber una condición en la que aptha dejado de funcionar, en ese caso, cambie a / boot

    cd /boot

  5. Comience a eliminar archivos manualmente, pero con mucho cuidado, tenga en cuenta no eliminar los installed one'sarchivos kernal de su sistema.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Después de eliminar los archivos correctos, las instalaciones parciales de limpieza, si las hay

    apt-get -f install

  7. Elimine los archivos adicionales que se encuentran allí como archivos de arranque limpiados manualmente

    apt-get autoremove

  8. Actualizar grub

    update-grub

  9. Por último, actualice los paquetes de su sistema

    apt-get update

usuario225
fuente
-1

Si no puede eliminar más archivos no utilizados y si tiene otra partición con / o espacio libre en el mismo dispositivo, puede cambiar el tamaño de la partición / boot por parted / gparted . (También se incluye en los medios de instalación).

Advertencia : cambiar el tamaño de la partición es una operación peligrosa , ¡guarde sus datos importantes en otros medios antes de hacerlo!

Rudolf Dovičín
fuente
La mayoría de las víctimas de pequeñas particiones separadas / de arranque eligieron 'cifrado de disco completo' después de la instalación, lo que requiere LVM. Esta solución parece causar más problemas de los que resuelve para esos usuarios.
user535733