Falha ao atualizar / instalar pacotes - problemas de espaço - liberar inodes

Em primeiro lugar, comente que este é um erro particular devido às características da minha partição root e que normalmente não acontece em instalações típicas 

Para começar, vou contar a história de como o problema aconteceu e, em seguida, como resolvê-lo.

Minha equipe é uma Netbook Sony Vaio m120AL que tenho há cerca de 3 longos anos com um disco rígido de 320 GB onde coexistem Windows 7, Chakra , minha partição de trabalho com Xubuntu 12.04, a partição swap, a partição / home e uma partição de informação adicional com a qual compartilho informações Janelas.

Por essas razões, minhas partições root em ambos os sistemas são consideravelmente pequenas pela maioria dos padrões (cerca de 6 GB cada), mas nunca me deram um problema, pois são mais do que suficientes para todos os pacotes de que preciso.

Agora, entrando na situação específica, alguns dias atrás aplicando algumas atualizações em Xubuntu (que incluiu um novo Kernel) Eu vejo que o gerenciador de atualizações mostra um erro dizendo que está tentando instalar linux-image-3.2.0-51-generic mas que sua dependência linux-headers-3.2.0-51 não será instalado, reviso o erro detalhadamente e noto que o dpkg reclama que não há espaço disponível.

O erro dizia algo deste estilo, embora não idêntico porque não o anotei:

não foi possível criar `/usr/src/linux-headers-3.2.0-43/arch/xtensa/include/asm/coprocessor.h.dpkg-new '(durante o processamento` ./usr/src/linux-headers -3.2.0-43 / arch / xtensa / include / asm / coprocessor.h '): Nenhum espaço restante no dispositivo

Em alguma ocasião anterior a mesma coisa aconteceu comigo, mas foi porque eu tinha permitido que vários Kernels antigos se acumulassem sem excluí-los, mas desta vez eu verifico e tenho praticamente 600 Mb disponíveis de acordo Conky pelo que não entendi, mas para confirmar se pode ser um erro de como o configurei ou algo semelhante, corro um df -h:

df -h

Mas ainda tenho espaço em /!

Portanto, não me engano e isso é mais do que espaço suficiente para realizar a atualização (já fiz isso muitas vezes no longo ano, desde que estou com o Xubuntu) de qualquer maneira eu faço um sudo apto a ficar limpo para limpar os pacotes que baixei e tente novamente, mas com os mesmos resultados.

Ainda acho estranho, mas de qualquer forma tento sair dos / os temas de ícones que sempre uso e que tenho modificado muito (Faenza y Acordado) para liberar mais espaço e, assim, finalmente consigo atualizar, procedendo novamente para devolvê-los a /.

No entanto, permaneceu na minha cabeça a ideia de que o assunto tinha que ir para outro lugar, mas eu não sabia qual. Poucas horas depois, quando tento instalar alguns pacotes extras, recebo o erro mencionado novamente e, mais uma vez, havia espaço de sobra, então faço minha pesquisa.

Uma pesquisa na Internet me leva a vários tópicos nos fóruns de ubuntu-is, mas a resposta de alguns indivíduos sempre é a mesma: você não tem espaço suficiente apague arquivos ou expanda a partição raiz, mas notei algo em comum nos diferentes threads que encontrei, sempre a partição raiz que tinha espaço livre, mas Era parecido com o meu (~ 600-900 Mb) e o tamanho da partição nunca ultrapassou 10 Gb então terminei me convencendo de que o problema tinha que ser outro, e foi assim que cheguei ao título do post graças a este página, o problema é que a partição raiz teve 100% dos inodes usados.

O uso de inodes pode ser visto com o comando df-i:

100% inodes usados

100% inodes usados

E agora vem a explicação.

Os inodes estão na palavra de Dennis Ritchie:

Um índice, devido à estrutura um tanto incomum de um sistema de arquivos que armazenava as informações de acesso aos arquivos como uma lista plana em disco, deixando de lado todas as informações hierárquicas dos diretórios

e, portanto, pode acontecer que para um determinado sistema de arquivos ainda haja espaço livre para armazenar arquivos, mas não haja inodes disponíveis para indexá-los porque há muitos arquivos no sistema e, portanto, não podem ser criados novos.

A questão é, o número de inodes em uma partição EXT4 não pode ser modificado (existem outros tipos de sistemas, como JFX o XFS onde isto não é uma limitação, pois é dinâmico) é um número fixo que é calculado quando a partição é criada com mkfs.ext4 de acordo com seu tamanho com uma proporção de bytes por inode de acordo com as preferências localizadas em /etc/mke2fs.conf.

Ao instalar o sistema, é comum usar as preferências padrão que incluem uma relação inode = 16384, que para partições pequenas pode ser muito grande e não criar o suficiente (como no meu caso). A única maneira de alterá-lo é criando / formatando a partição e especificando-a com a opção -i.

No entanto, esta não era uma opção para mim, como já mencionei, os inodes estão relacionados ao número de arquivos existentes, então use o seguinte script bash encontrado em estouro de pilha e que ele está vinculado à página que você mencionou antes para descobrir quais eram os diretórios na partição raiz com mais arquivos:

importante saber que o script analisa o diretório de onde é chamado, ou seja, como no meu caso tive interesse em analisar / Bem, primeiro no terminal devo mover com cd / e então se chamar o 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_$$

O que dá o seguinte resultado:

E aqui estão os culpados!

E aqui estão os culpados!

O número que aparece à esquerda indica o número de arquivos presentes e o caminho indica o diretório associado, uma linha abaixo aparece o diretório / var / lib / dpkg / info mas como sempre eu limpo meus pacotes aqui não há nada a fazer .

No entanto, se eu reconhecer dois problemas, o primeiro e embora o catpura não suba a partir daí, várias outras entradas incluem os ícones Acordado, então eu tenho que movê-los sim ou sim, além disso, isso explica porque quando o fiz pude atualizar os pacotes, já que liberei muitos inodes da partição raiz ao movê-los, mas o problema retornou quando os realoquei.

E em segundo lugar, o próximo maior número de entradas está associado aos cabeçalhos de vários kernels antigos, e percebo que o procedimento que sempre utilizo para eliminar os kernels antigos não elimina os cabeçalhos, o que costumo usar é o seguinte, em um terminal eu escrevo :

dpkg --get-selections | grep linux-imagem

kernels-rec

que me mostra os kernels instalados e então eu uso:

pacote sudo apt-get purge

Onde pacote é o nome do kernel em questão, mas isso não remove os cabeçalhos associados, então eu faço:

dpkg --get-selections | grep linux

cabeçalhos antigos

E então prossigo para remover os cabeçalhos antigos, com:

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

E voilà, mas é claro que também havia a questão dos ícones Acordado então eu decido movê-los para ~ / .icons e torná-los disponíveis para todo o sistema eu apenas faço um link simbólico em / usr / share / icons, o primeiro resultado de df-i É com a eliminação dos cabeçalhos e a segunda após ter movido os ícones.

Inodes lançado pela pilha!

Inodes lançado pela pilha!

Com isso o problema está resolvido, e posso instalar / atualizar pacotes sem problema, espero que este post seja de ajuda a alguém, ou sirva para futura referência sobre instalações em partições pequenas e desmistificar o assunto tão difundido pelos fóruns da carência Do espaço.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Fernando bautista dito

    Olá, use o ajuste do Ubuntu ( http://ubuntu-tweak.com ) é como o tuneup do windows, ajuda a remover muito lixo e no processo desinstala os kernels antigos com segurança, porém, deixa um kernel anterior para inicializar, em algumas ocasiões o último kernel não funcionou para mim e consegui entrar no sistema obrigado para não excluí-los todos.

    1.    Radiante dito

      Eu o conheço há muito tempo, mas sempre preferi fazer do meu jeito e entender como as coisas funcionam, de qualquer forma, mesmo sem o par de cabeçalhos antigos que tinha o problema, teria se apresentado igual em mais ou menos tempo. Temas de ícones, e isso no final como mencionei NÃO é um problema de falta de espaço mas de inodes usados.

  2.   Maurício dito

    Obrigado por compartilhar isso. Até o momento não tive esse problema, pois os discos que utilizo são todos no formato Linux, sem windows, pois não tenho esse sistema no meu computador.

    Então, eu vou manter isso em mente, caso um dia eu venha ver esse problema.

    1.    Radiante dito

      O problema não vem de ter partições com o Windows (é apenas uma peculiaridade do meu caso), mas de ter pequenas partições de raiz, menos de 10 Gb onde o instalador usa as opções padrão do mke2fs (que é aquele que formata as partições) e você sai com um pequeno número de inodes para o seu tamanho e, como costuma ser quase normal, todas as nossas partições estão em EXT4 que define este número quando é criado e não é possível modificá-lo posteriormente.

  3.   gerard H dito

    Como você pode ver, esse é o tipo de coisa que mantém as pessoas longe do linux e elas acabam voltando para o windows, como você acha que um usuário comum nessa situação pode resolver o problema?
    você não precisa perder tempo consertando e configurando esse tipo de coisa e perdendo tempo produtivo.
    Miguel de Icaza estava certo com o que disse e por isso decidiu mudar para Mac porque TUDO FUNCIONA lá, ponto final.

    1.    elav. dito

      É assim mesmo. No OS X tudo funciona lindamente .. É inútil explicar neste momento porque o que o autor do post comenta aconteceu, então por favor, não alimente este comentário. Isso vai acabar em chamas.

      1.    eliotime3000 dito

        No meu caso, o Debian funciona tudo no meu PC e descobri que usei o DVD como um repositório adicional para atualizar do Squeeze para o Wheezy. Assim, qualquer pessoa pode atualizar.

    2.    fabiano dito

      Pois bem, você tem a mente de um usuário do Windows.
      GNU / Linux é grande para você.
      lembranças

  4.   sieg84 dito

    isto é interessante.

  5.   Jorge dito

    Este erro é muito frequente ao instalar o gentoo em pequenos discos, tantos arquivos fonte pequenos e a partição fica sem inodes mesmo se houver 60% de espaço livre restante. Pelo menos o manual resolve isso digitando mke2fs -j -T small / dev / sdaX, ele provavelmente roda no Ubuntu. Antes de jogar configurações estranhas 😛

    1.    Radiante dito

      Exatamente, como mencionei antes, você pode especificar uma proporção de bytes inode com a opção -i, mas também há a opção que você mencionou -T usa um dos modos padrão no arquivo de configuração que nomeia /etc/mke2fs.conf, em neste caso, pequeno aplicará um tamanho de bloco = 1024, tamanho de inode = 128 e uma proporção byte-inods = 4096.

  6.   msx dito

    Excelente!
    É o problema típico que come sua cabeça por muito tempo até você perceber de onde veio.
    +10 para a explicação

    1.    Radiante dito

      Como você disse, você se divertiu matando minha cabeça! Muito obrigado pelo comentário, vindo de alguém que sabe tanto quanto você é uma honra!

  7.   Anthony dito

    Excelente !!, eu aprendi algo mais, e isso me ajudou a recuperar cerca de 19Mb removendo um cabeçalho antigo, bem como recuperando alguns inodes. Agora tenho mais espaço para instalar. Como sou um novato no Linux, se te parece bom, te encorajo a fazer um post sobre como formatar para obter o maior número de inodes e se isso pode ser feito mantendo as informações do disco ou não.
    Atenciosamente e obrigado

    1.    Radiante dito

      Como mencionei em uma indicação no início da entrada, é um problema muito raro e está associado a pequenas partições de raiz (<10 GB) como é o meu caso, com outros tamanhos é improvável que ocorra. Já no que diz respeito à alteração do número de inodes, como também mencionei na entrada, não é possível fazê-lo sem formatar em partições tipo EXT4, por isso não se poderia guardar a informação no disco sem ter feito um backup prévio, para alterar a proporção de bytes Os inodes usam a opção -i no comando mke2fs ou uma das opções associadas com -T (pequeno, grande, enorme etc).

  8.   Mario dito

    Excelente! A exposição do problema, a explicação de por que aconteceu, seus fundamentos e as etapas da solução! Eu chamo isso de uma excelente contribuição! Obrigado Rayonant!

  9.   Diana Bedoya dito

    Obrigado pelo artigo, me ajudou muito. Tentei de tudo para superar esse erro e removendo os cabeçalhos antigos e suas dependências com o aptitude consegui reinstalar programas e fazer atualizações. Obrigado!

  10.   Jasco dito

    O mesmo problema aconteceu comigo, nada aconteceu, e isso me colocou de cabeça para baixo hahaha. No meu caso, a partição root tinha bastante memória livre, mas estava com 100% de inodes usados! A questão é que, se você usa a mesma distribuição há muito tempo e não remove um kernel antigo com o tempo, o backlog é terrível. No meu caso, consegui resolver o problema de maneira semelhante a como você colocou, apenas que sudo apt-get remove ou purge não funcionou para mim e a chave para remover esses arquivos de kernel em desuso era usar sudo dpkg –remove e –purge, e um por um eu fui capaz de liberar inodes. Tudo o que você aprende. Eu gostaria de ter encontrado essa entrada antes, porque ela teria resolvido o problema mais cedo. Obrigado por esboçar um pouco o que é esse inodes, eu não tinha muita ideia.
    Ótimo blog, saudações!

  11.   Leão dito

    Você é um groso e, embora seja incômodo, é bem compreendido. Fiz tudo ao pé da letra, mas o que não posso fazer é remover os linux-headers anteriores, não me deixa, me coloca
    E: dpkg foi interrompido, você deve executar manualmente "sudo dpkg –configure -a" para corrigir o problema
    Eu executo o que ele me diz e isso me faz
    Configurando o openshot (1.4.0-1ubuntu1) ...
    Traceback (última chamada mais recente):
    Arquivo "/ usr / sbin / update-python-modules", linha 478, em
    package.install (py_installed)
    Arquivo "/ usr / sbin / update-python-modules", linha 112, na instalação
    os.symlink (nome do arquivo, destpath)
    OSError: [Errno 2] Esse arquivo ou diretório não existe
    Erro em sys.excepthook:
    Traceback (última chamada mais recente):
    Arquivo "/usr/lib/python2.7/dist-packages/apport_python_hook.py", linha 128, em apport_excepthook
    os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'w')
    OSError: [Errno 28] Nenhum espaço deixado no dispositivo: '/var/crash/_usr_sbin_update-python-modules.0.crash'

    A exceção original foi:
    Traceback (última chamada mais recente):
    Arquivo "/ usr / sbin / update-python-modules", linha 478, em
    package.install (py_installed)
    Arquivo "/ usr / sbin / update-python-modules", linha 112, na instalação
    os.symlink (nome do arquivo, destpath)
    OSError: [Errno 2] Esse arquivo ou diretório não existe
    dpkg: erro ao processar o openshot (–configure):
    o thread instalado o script de pós-instalação retornou o código de saída de erro 1
    dpkg: erro: falha ao abrir `/ var / lib / dpkg / status 'para escrever o status do banco de dados: Sem espaço restante no dispositivo
    A questão é: o que estou vestindo?

  12.   Paul dito

    Muito obrigado! Esse post me ajudou muito.

  13.   angústia dito

    Ei!!!

    Não só você resolve um problema complicado, mas eu aprendo (e gosto) ao longo do caminho

  14.   Juan Carlos dito

    Oi. Em primeiro lugar, obrigado pelo post ...

    Em segundo lugar, infelizmente não me ajudou. Procurei-o por um problema de uma embalagem quebrada, que o sistema não me permite resolver por falta de espaço, que na realidade pelo que aqui foi explicado foram os nós i.

    Tentei limpar os kernels antigos, conforme sugerido, mas o sistema não me permite:
    juan @ juan-P29G: ~ $ sudo apt-get purge linux-image-3.2.0-29-generic-pae
    Lendo lista de pacotes ... Concluído
    Criando árvore de dependências
    Lendo as informações de status ... Concluído
    Você pode querer executar "apt-get -f install" para corrigi-lo:
    Os pacotes a seguir têm dependências não atendidas:
    tzdata-java: Depende: tzdata (= 2014i-0ubuntu0.12.04) mas 2014e-0ubuntu0.12.04 será instalado
    E: Dependências não atendidas. Tente "apt-get -f install" sem pacotes (ou especifique uma solução).

    E quando sigo o conselho do sistema:
    juan @ juan-P29G: ~ $ sudo apt-get -f install
    Lendo lista de pacotes ... Concluído
    Criando árvore de dependências
    Lendo as informações de status ... Concluído
    Corrigindo dependências ... Pronto
    Os seguintes pacotes extras serão instalados:
    tzdata
    Os seguintes pacotes serão atualizados:
    tzdata
    1 atualizado, 0 será instalado, 0 para remover e 23 não atualizado.
    1 não totalmente instalado ou removido.
    0 B / 461 kB de arquivos precisa ser baixado.
    31,7 kB serão liberados após esta operação.
    Você deseja continuar [S / n]? s
    Pré-configurando pacotes ...
    (Lendo o banco de dados ... 893468 arquivos ou diretórios instalados atualmente.)
    Preparando para substituir tzdata 2014e-0ubuntu0.12.04 (usando… / tzdata_2014i-0ubuntu0.12.04_all.deb)…
    Descompactando a substituição tzdata ...
    dpkg: erro ao processar /var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb (–unpack):
    Não foi possível fazer backup do link simbólico para `./usr/share/zoneinfo/posix/America/Santo_Domingo ': Sem espaço restante no dispositivo
    Um relatório de "apport" não foi escrito porque a mensagem de erro indica que o disco está cheio
    Erros foram encontrados durante o processamento:
    /var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb
    E: Sub-processo / usr / bin / dpkg retornou um código de erro (1)

    Um círculo vicioso ... De qualquer forma, vou ver o que posso fazer.

    Saudações.

  15.   Juan Carlos dito

    Olá de novo ... Eu sei como quebrar o ciclo vicioso.

    Vou remover a imagem do mais antigo dos kernels com este comando:
    sudo dpkg --remove linux-image-3.2.0-29-generic-pae

    Com isso eu ganho 4389 i-nodes, o suficiente para reparar o pacote quebrado, e então removo os cabeçalhos de kernel mais antigos conforme indicado no post.

    E agora vou recuperar mais i-nodes removendo um monte de kernels antigos ...

    Obrigado e saudações, Juan Carlos.

  16.   anônimo dito

    Ele não me deixou deletar os cabeçalhos

    Eu digitei
    sudo nautilus

    E eu fui para a pasta / usr / src
    Lá eu vi os arquivos de "cabeçalhos" e os excluí
    Com isso ele já me deixou fazer o pedido de remoção automática

  17.   anônimo dito

    Obrigado!! a postagem pode ser um pouco antiga, mas ainda é muito útil, problema resolvido com inodes

  18.   Luis dito

    Rayonant: uma explicação exemplar.
    Embora, no meu caso, eu tenha tido que expandir a partição (com Gparted), sua postagem me ajudou a entender o problema. E depois de seguir seu método, passei de 90% dos inodes ocupados (após ter expandido a partição) para apenas 28%.
    Muito obrigado. Vou usá-lo de agora em diante para eliminar os kernels antigos (e cabeçalhos).
    Agradeço também ao Juan Carlos (tive o mesmo problema).
    Um abraço.

  19.   Hilário dito

    Postagem interessante,
    No meu caso, caí de 100% de uso para 9%

    root @ pi: / home / pi # apt-get clean
    root @ pi: / home / pi # df -i
    S. arquivos Nodes-i NUsados ​​NLibres NUso% Montado em
    / dev / root 1915424 1915288 136 100% /

    depois descobri que as tempestades ntopng tocavam meu nariz, eliminei-as e ...

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

    Tachán !!!

    root @ pi: / # df -i
    S. arquivos Nodes-i NUsados ​​NLibres NUso% Montado em
    / dev / root 1915424 160408 1755016 9% /

    Obrigado