Error al Actualizar/Instalar Paquetes – Problemas de espacio – Liberar Inodos

Antes que nada comentar que esto es un error particular debido a las caracterรญsticas de mi particiรณn raรญz yย  que no suele suceder en instalaciones tรญpicasย 

Para empezar mencionare la historia de como sucediรณย  el problema y luego como solucionarlo.

Mi equipo es un netbook Sony Vaio m120AL que tengo desde hace unos 3 aรฑos largos con un disco duro de 320 GB donde conviven Windows 7, Chakra , mi particiรณn de trabajo con Xubuntu 12.04, la particiรณn de swap, la particiรณn /homeย  y una particiรณn adicional de informaciรณn con la que comparto informaciรณn con Windows.

Por estas razones mis particiones raรญz en ambos sistemas son considerablemente pequeรฑas para los estรกndares de la mayorรญa (alrededor de 6GB cada una) pero que nunca me han dado problemas pues son mรกs que suficientes para todos los paquetes que necesito.

Ahora bien entrando a la situaciรณn en concreto, hace unos dรญas aplicando unas actualizaciones en Xubuntu (entre las cuales se incluรญa un nuevo Kernel) veo que el gestor de actualizaciones muestra un error diciendo queย  se esta tratando de instalar linux-image-3.2.0-51-generic pero que su dependencia linux-headers-3.2.0-51 no serรก instalada, reviso en detalle el error y me doy cuenta que dpkg se queja de que no hay espacio disponible.

El error decรญa al algo de este estilo, aunque no idรฉntico porque no lo anotรฉ:

no se pudo crear `/usr/src/linux-headers-3.2.0-43/arch/xtensa/include/asm/coprocessor.h.dpkg-new' (mientras se procesaba `./usr/src/linux-headers-3.2.0-43/arch/xtensa/include/asm/coprocessor.h'): No queda espacio en el dispositivo

En alguna ocasiรณn anterior me ha pasado lo mismo pero habรญa sido por que habรญa dejado acumular varios Kernel antiguos sin borrarlos , pero en esta ocasiรณn reviso y tengo prรกcticamenteย  600 Mb disponibles segรบn Conky por lo que no lo entiendo, pero para confirmar si puede ser un error en como lo habรญa configuradoย  o similar ejecuto un df -h:

df -h

ยกPero si aรบn tengo espacio en /!

Por lo que no me equivoco y ese es espacio mรกs que suficiente para realizar la actualizaciรณn (lo he hecho asรญ ya muchas veces en el aรฑo largo ya que llevo con Xubuntu) de todas formas realizo un sudo apt-get clean para limpiar los paquetes que tenga descargados e intento de nuevo, pero con los mismos resultados.

Se me sigue haciendo extraรฑo pero de todas formas intento mover fuera de / los temas de iconos que siempre uso y que he modificado mucho (Faenza y Awoken) para liberar mรกs espacio, y asรญ finalmente logro realizar la actualizaciรณn, procediendo nuevamente a devolverlos a /.

Sin embargo me quedรณ en la cabeza la idea de que el asunto tenรญa que ir por otra parte pero no sabรญa cual. Algunas horas mรกs tarde cuando intento instalar algunos paquetes extra sale de nuevo el susodicho error, y una vez mรกsย  vez habรญa espacio suficienteย  de sobra, por lo que me dedico a investigar.

Una bรบsqueda por Internet me lleva a varios hilos en los foros de ubuntu-es, pero la respuesta de algunos individuos allรญ siempre es al misma: no tienes suficiente espacio elimina archivos o amplia la particiรณn raรญz, pero me di cuenta de algo en comรบn en los diferentes hilos que encontrรฉ, siempre la particiรณn raรญz que tenรญa espacio libre, pero era similar al mio (~600-900 Mb) y el tamaรฑo de la particiรณn nunca superaba los 10 Gb por lo que me termine deย  convencer que el problema debรญa ser otro, y es asรญ como llegue al tรญtulo del post gracias a esta pรกgina, el problema es que la particiรณn raรญz tenia el 100% de los inodos usados.

El uso de los inodos puede verse con el comando df -i:

Inodos usados al 100%

Inodos usados al 100%

Y ahora viene la explicaciรณn.

Los inodos son en palabra de Dennis Ritchie:

Un รญndice, debido a la estructura algo inusual de un sistema de ficheros que almacenaba la informaciรณn del acceso a los archivos como una lista plana en disco, dejando al margen toda la informaciรณn jerรกrquica de los directorios

y por tanto puede suceder que para un sistema de archivos determinado exista aรบn espacio libre paraย  almacenar ficheros, pero no queden inodos disponibles para indexarlos porque existen muchos archivos en el sitema y por lo tanto no pueden crearse nuevos.

El asunto es que el nรบmero de inodos en una particiรณn EXT4 no puede ser modificado (existen otros tipos de sistemas como JFX o XFS donde esto no es una limitante pues es dinรกmico) es un nรบmero fijo que se calcula cuando se crea la particiรณn conย mkfs.ext4 de acuerdo al tamaรฑo de la misma con una relaciรณn de bytes por inodo segรบn las preferencias ubicadas en /etc/mke2fs.conf.

Al instalar el sistema lo usual es que use las preferencias por defecto que incluye un relaciรณn inode = 16384, que para particiones pequeรฑas pude ser demasiado grande y no cree el nรบmeroย  suficiente (como en mi caso). La รบnica manera de cambiarla es creando/formateando la particiรณnย  y especรญficandolo con la opciรณn -i.

Sin embargo esto no era una opciรณn para mi, como ya lo comentรฉ los inodos estรกn relacionados con el nรบmero de ficheros existentes, asรญ que use el siguiente script en bash que se encuentra en stackoverflow y que esta enlazado en la pรกgina que antes menciones para encontrar cuales eran los directorios en la particiรณn raรญz con mรกs ficheros:

importante saber que el script analiza el directorio desde donde se lo llame, es decir, como en mi caso me interesaba analizar / pues primero en la terminal debo moverme con cd / y luego si llamar al script
#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

Lo cual arroja el siguiente resultado:

ยกY aquรญ estรกn los culpables!

ยกY aquรญ estรกn los culpables!

El nรบmero que aparece a la izquierda indica la cantidad de archivos presentes y la ruta indica el directorio asociado, una lรญnea mรกs abajo sale el directorioย /var/lib/dpkg/info pero como siempre elimino mis paquetes con purge aquรญ no hay nada que hacer.

Sin embargo si reconozco dos problemas, el primero y aunque en la catpura no sale de ahรญ hacia arriba varias entradas mรกs incluyen a los iconos Awoken, por lo que debo moverlos si o si, ademรกs que eso explica por que cuando lo hice pude actualiza los paquetes, pues libere muchos inodos de la particiรณn raรญz cuando los movรญ, pero el problema volviรณ cuando los recoloque.

Y segundo el siguiente mayor nรบmero de entradas esta asociada a los headers de varios kernel viejos, y caigo en cuenta que el procedimiento que siempreย  uso para eliminar los kernel viejos noย  elimina los headers, lo que suelo usar es lo siguiente, en una terminal escribo:

dpkg --get-selections | grep linux-image

kernels-rec

lo cual me muestraย  los kernel instalados y luego uso:

sudo apt-get purge paquete

Donde paquete es el nombre del kernel en cuestiรณn, pero esto no remueve los headers asociados asรญ que hago un:

dpkg --get-selections | grep linux

headers antiguos

Y entonces procedo a eliminar los antiguos headers, con:

sudo apt-get purge linux-headers-3.2.0-41 linux-headers-3.2.0-44 linux-headers-3.2.0-45 linux-headers-3.2.0-48

Yย voilร  , pero claro estaba tambiรฉn el tema de lo iconos Awoken asรญ que decido moverlos a ~/.icons y para que estรฉn disponibles para todo el sistema simplemente hago un enlace simbรณlico en /usr/share/icons, el primer resultado de df -i es con la eliminaciรณn de los headers y el segundo despuรฉs de haber movido lo iconos.

ยกInodos liberados por montรณn!

ยกInodos liberados por montรณn!

Con esto ya esta solucionado el problema, yย  puedo instalar/actualizar paquetes sin problema, espero que esta entrada le sea de ayuda a alguien, o sirva para futura referenciaย  sobre instalaciones en particiones pequeรฑas y desmitifique el tema tan difundido por los foros de la falta de espacio.


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      Fernando Bautista dijo

    Hola, utiliza ubuntu tweak ( http://ubuntu-tweak.com ) es como el tuneup para windows, te ayuda a sacar mucha basura y de paso desinstala los kernel viejos de manera segura, sin embargo, deja un antepenultimo kernel para arrancar, en alguna ocasion el ultimo kernel no me funciono y logre entrar al sistema gracias a que no los borre todos.

         Rayonant dijo

      Si lo conozco de hace rato, pero siempre he preferido hacerlo a mi manera y entender la forma en que funcionan las cosas, de todas maneras aun sin el par de headers viejos que tenรญa el problema se hubiera presentado igual en mรกs o menos tiempo por lo temas de iconos, y que al final como lo mencione NO es un problema de falta de espaciรณ sino de inodos usados.

      Mauricio dijo

    Gracias por compartir esto. Hasta ahora no he tenido ese problema, ya que los disco que uso, estan todos en formato para linux, nada de windows, ya que no tengo ese sistema en mi equipo.

    Asi que, esto lo tendre presente, por si algun dia me llegase a ver con este problema.

         Rayonant dijo

      El problema no viene por tener particiones con Windows (es solo una particularidad de mi caso) sino por tener particiones raรญz pequeรฑas, menores a 10Gb donde el instalador utiliza las opciones predeterminadas de mke2fs (que es el que da formato a las particiones) y te deja con un nรบmero pequeรฑo de inodos para el tamaรฑo de la misma, y que como suele ser casi norma, todas nuestras particiones estรกn en EXT4 que fija este nรบmero cuando se crea y no es posible modificarlo despuรฉs.

      gerardo H dijo

    como pueden ver, este es el tipo de cosas que alejan a la gente de linux y terminan volviendo a windows, ยฟcomo creen que un usuario comun frente a esta situacion pueda resolver el problema?
    uno no tiene por que estar perdiendo el tiempo arreglando y configurando este tipo de cosas y perdiendo tiempo productivo.
    tenia razon Miguel de Icaza con lo que decia y por eso decidio cambiarse a Mac porque ahi TODO FUNCIONA y punto.

         elav dijo

      Asรญ mismo es. En OS X todo funciona bonito.. De nada vale explicar en este momento el por quรฉ sucediรณ lo que el autor del post comenta, asรญ que por favor, que nadie alimente este comentario. Terminarรก en flame.

           eliotime3000 dijo

        En mi caso, Debian me funciona todo en mi PC y resulta que usando el DVD como repo adicional para actualizar de Squeeze a Wheezy. Asรญ cualquiera puede actualizar.

         fabian dijo

      pues entones, tienes la mente de un usuario windows.
      GNU/Linux te quedo grande.
      saludos

      sieg84 dijo

    esto sรญ estรก interesante.

      Jorge dijo

    Este error es muy frecuente al instalar gentoo en discos chicos, tantos archivos fuente pequeรฑos y se queda sin inodos la particion por mas que quede 60% de espacio libre. Por lo menos el handbook lo soluciona al escribir mke2fs -j -T small /dev/sdaX ,probablemente ande en ubuntu. Antes de estar tocando configuraciones extraรฑas ๐Ÿ˜›

         Rayonant dijo

      Exactamente, como ya lo mencione antes puedes especificar una relaciรณn de bytes inodos con la opciรณn -i , pero tambiรฉn esta la opciรณn que mencionas -T utiliza uno de los modos predeterminados en el archivo de configuraciรณn que nombre /etc/mke2fs.conf , en este caso small aplicara un blocksize = 1024, tamaรฑo de inodo de = 128 y una relaciรณn de bytes- inods = 4096.

      msx dijo

    Excelente!
    Es el tรญpico problema que te come la cabeza un rato largo hasta que te das cuenta por donde venรญa.
    +10 por la explicaciรณn ๐Ÿ˜€

         Rayonant dijo

      Tal cual lo dices, ยกme tuvo un buen tiempo matรกndome la cabeza!, muchas gracias por el comentario, viniendo de alguien que sabe tanto como tu es todo un honor!

      Antonio dijo

    Excelente !!, He aprendido algo mas, y me ha servido para recuperar 19Mb y pico al quitar un header antiguo, asรญ como recuperar algunos inodos. Ahora tengo mas espacio para instalar. Como soy bastante novato con linux, si os parece bien os animo a que hagais algรบn post sobre como formatear para obtener el mayor nรบmero de inodos e indicaciรณn de si se puede realizar manteniendo la informaciรณn del disco o no.
    Un saludo y gracias

         Rayonant dijo

      Como lo mencione en una indicaciรณn al inicio de la entrada es un problema muy poco comรบn y esta asociado a particiones raรญz de tamaรฑo reducido (<10GB) como lo es mi caso, con otros tamaรฑos es poco probable que ocurra. Ahora bien respecto al cambio del nรบmero de inodos, como tambiรฉn lo mencione en la entrada no es posible hacerlo sin formatear en particiones tipo EXT4 por lo que no podrรญas mantener la informaciรณn en el disco sin haber hecho un respaldo previo, para cambiar la relaciรณn bytes inodos se usa la opciรณn -i en el comando mke2fs o una de las opciones asociadas a -T (small, big , huge etc).

      Mario dijo

    Excelente! La exposiciรณn del problema, la explicaciรณn del porque sucedio, sus fundamentos, y los pasos de la soluciรณn! A esto le llamo un excelente aporte! Gracias Rayonant!

      Diana Bedoya dijo

    Gracias por el artรญculo, me ayudรณ mucho. Habรญa probado de todo para superar este error y al eliminar los headers viejos y sus dependencias con aptitude pude volver a instalar programas y a hacer las actualizaciones. Gracias!

      Jasco dijo

    Me ha pasado el mismo problema hace nada, y me ha traรญdo de cabeza jajaja. En mi caso, la particiรณn raรญz tenรญa bastante memoria libre, ยกpero estaba con el 100% de inodos usados! La cuestiรณn es que si llevas usando una misma distribuciรณn durante bastante tiempo y con el paso del tiempo no eliminas ningรบn kernel antiguo, la acumulaciรณn es terrible. En mi caso pude solucionar el problema de manera parecida a cรณmo lo pones, solo que el sudo apt-get remove o purge no me funcionaba y la clave para poder eliminar esos archivos de kernel en desuso fue utilizar sudo dpkg –remove y –purge, y uno a uno pude ir liberando inodos. Todo eso que se aprende. ร“jala hubiera dado con esta entrada antes porque habrรญa solucionado el asunto antes. Gracias por bosquejar un poco quรฉ es eso de los inodos, que no tenรญa mucha idea.
    ยกgran blog, un saludo!

      Leo dijo

    sos un groso y aunque es engorroso se entiende bastante bien. Hice todo al pie de la letra pero lo que no puedo hacer es eliminar los linux-headers anteriores, no me deja, me pone
    E: se interrumpiรณ la ejecuciรณn de dpkg, debe ejecutar manualmente ยซsudo dpkg –configure -aยป para corregir el problema
    ejecuto lo que me dice y me pone
    Configurando openshot (1.4.0-1ubuntu1) …
    Traceback (most recent call last):
    File ยซ/usr/sbin/update-python-modulesยป, line 478, in
    package.install(py_installed)
    File ยซ/usr/sbin/update-python-modulesยป, line 112, in install
    os.symlink(filename,destpath)
    OSError: [Errno 2] No such file or directory
    Error in sys.excepthook:
    Traceback (most recent call last):
    File ยซ/usr/lib/python2.7/dist-packages/apport_python_hook.pyยป, line 128, in apport_excepthook
    os.O_WRONLY|os.O_CREAT|os.O_EXCL, 0o640), ‘w’)
    OSError: [Errno 28] No space left on device: ‘/var/crash/_usr_sbin_update-python-modules.0.crash’

    Original exception was:
    Traceback (most recent call last):
    File ยซ/usr/sbin/update-python-modulesยป, line 478, in
    package.install(py_installed)
    File ยซ/usr/sbin/update-python-modulesยป, line 112, in install
    os.symlink(filename,destpath)
    OSError: [Errno 2] No such file or directory
    dpkg: error al procesar openshot (–configure):
    el subproceso instalado el script post-installation devolviรณ el cรณdigo de salida de error 1
    dpkg: error: fallo al abrir `/var/lib/dpkg/status’ para escribir la base de datos status: No queda espacio en el dispositivo
    La pregunta es, de que me disfrazo?

      Pablo dijo

    ยกMuchas gracias! Me sirviรณ un montรณn este post.

      pang dijo

    Ole !!!

    No solo resuelves un problema peliagudo, sino que aprendo (y disfruto) por el camino

      Juan Carlos dijo

    Hola. En primer lugar, gracias por el post…

    En segundo, lamentablemente no me sirviรณ. Lleguรฉ a รฉl por un problema de un paquete roto, que el sistema no me deja resolver por falta de espacio, que en realidad por lo que acรก se explicรณ era de los nodos i.

    Entonces intentรฉ purgar los kernels viejos, como se sugiere, pero el sistema no me deja:
    juan@juan-P29G:~$ sudo apt-get purge linux-image-3.2.0-29-generic-pae
    Leyendo lista de paquetes… Hecho
    Creando รกrbol de dependencias
    Leyendo la informaciรณn de estado… Hecho
    Tal vez quiera ejecutar ยซapt-get -f installยป para corregirlo:
    Los siguientes paquetes tienen dependencias incumplidas:
    tzdata-java : Depende: tzdata (= 2014i-0ubuntu0.12.04) pero 2014e-0ubuntu0.12.04 va a ser instalado
    E: Dependencias incumplidas. Intente ยซapt-get -f installยป sin paquetes (o especifique una soluciรณn).

    Y cuando sigo el consejo del sistema:
    juan@juan-P29G:~$ sudo apt-get -f install
    Leyendo lista de paquetes… Hecho
    Creando รกrbol de dependencias
    Leyendo la informaciรณn de estado… Hecho
    Corrigiendo dependencias… Listo
    Se instalarรกn los siguientes paquetes extras:
    tzdata
    Se actualizarรกn los siguientes paquetes:
    tzdata
    1 actualizados, 0 se instalarรกn, 0 para eliminar y 23 no actualizados.
    1 no instalados del todo o eliminados.
    Se necesita descargar 0 B/461 kB de archivos.
    Se liberarรกn 31,7 kB despuรฉs de esta operaciรณn.
    ยฟDesea continuar [S/n]? s
    Preconfigurando paquetes …
    (Leyendo la base de datos … 893468 ficheros o directorios instalados actualmente.)
    Preparando para reemplazar tzdata 2014e-0ubuntu0.12.04 (usando …/tzdata_2014i-0ubuntu0.12.04_all.deb) …
    Desempaquetando el reemplazo de tzdata …
    dpkg: error al procesar /var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb (–unpack):
    no se puede respaldar enlace simbรณlico para `./usr/share/zoneinfo/posix/America/Santo_Domingo’: No queda espacio en el dispositivo
    No se escribiรณ un informe ยซapportยป porque el mensaje de error indica que el error es de disco lleno
    Se encontraron errores al procesar:
    /var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb
    E: Sub-process /usr/bin/dpkg returned an error code (1)

    Un cรญrculo vicioso… En fin, verรฉ quรฉ puedo hacer.

    Saludos.

      Juan Carlos dijo

    Hola de nuevo… ya sรฉ cรณmo romper el cรญrculo vicioso.

    Eliminarรฉ la imagen del mรกs viejo de los kernels con este comando:
    sudo dpkg –remove linux-image-3.2.0-29-generic-pae

    Con eso gano 4389 nodos-i, suficientes para reparar el paquete roto, y luego elimino los encabezados del kernel mรกs viejo segรบn lo indicado en el post.

    Y ahora recuperarรฉ mรกs nodos-i eliminando un montรณn de kernels viejos…

    Gracias y saludos, Juan Carlos.

      Anรณnimo dijo

    A mi no me dejaba borrar los headers

    He tecleado
    sudo nautilus

    Y he ido a la carpeta /usr/src
    Ahi he visto los ficheros ยซheadersยป y los he borrado
    Con eso ya me ha dejado poner la orden autoremove

      Anรณnimo dijo

    Gracias!! el post puede ser un poco viejo pero sigue siendo de gran utilidad, problema resuelto con los inodes

      Luis dijo

    Rayonant: una explicaciรณn ejemplar.
    Aunque, en mi caso, he debido ampliar la particiรณn (con Gparted), tu post me he servido para entender el problema. Y despuรฉs de seguir tu mรฉtodo, he pasado de un 90% de inodos ocupados (tras haber ampliado la particiรณn), a tan solo el 28%.
    Muchas gracias. Lo utilizaล•รฉ en adelante para ir eliminando los viejos kernels (y los headers).
    Gracias tambiรฉn a Juan Carlos (yo tenรญa el mismo problema).
    Un abrazo.

      Hilarius dijo

    Interesante post,
    En mi caso he bajado de un 100% de uso a un 9%

    root@pi:/home/pi# apt-get clean
    root@pi:/home/pi# df -i
    S.ficheros Nodos-i NUsados NLibres NUso% Montado en
    /dev/root 1915424 1915288 136 100% /

    despuรฉs encontrar q los temporales de ntopng me estaban tocando las narices, los he eliminado y…

    root@pi:/home/pi# rm -rf /var/tmp/ntopng/

    ยกยกยกtachรกn!!!

    root@pi:/# df -i
    S.ficheros Nodos-i NUsados NLibres NUso% Montado en
    /dev/root 1915424 160408 1755016 9% /

    Gracias ๐Ÿ™‚