apt-get: Não há espaço no dispositivo (12.04)

42

Li todos os tópicos que pude encontrar - mesmo os que dizem que a pergunta foi respondida em outro lugar, mas nenhum deles aborda o problema específico que estou tendo. O Update Manager executou e produziu erros relacionados à dependência não atendida e sugeriu o uso do apt-get install -f, que falha com esta mensagem:

Unpacking linux-headers-3.5.0-36 (from .../linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h.dpkg-new' (while processing `./usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h'): No space left on device

Suspeito que as últimas 5 palavras Nenhum espaço restante no dispositivo seja significativo, mas df e du mostram o espaço adequado. Então, eu estou me perguntando, qual dispositivo precisa de mais espaço?

Ouput de df -h

Filesystem 
Size Used Avail Use% 
Mounted on /dev/sda1 5.5G 4.4G 786M 86% 
/ udev 996M 4.0K 996M 1% 
/dev tmpfs 402M 880K 401M 1% 
/run none 5.0M 0 5.0M 0% /run/lock none 1004M 156K 1004M 1% 
/run/shm /dev/sdb1 30G 1.4G 27G 5% 
/home /dev/sdc1 299G 31G 268G 11% /media/HD-PCTU2 
Don A
fonte
Você tem espaço na partição raiz?
31513 Don.joey
1
Por favor, cole (i) a saída de df -he (ii) a saída de mount. O dpkg limpará os arquivos após o término do trabalho, portanto, pode parecer que você tenha espaço suficiente quando, na verdade, não possui. Considere executar apt-get cleanantes de iniciar o dpkg.
janeiro
1
para monitor de fazer watch -n 1 df -hem um terminal ao fazer o apt-get install(ele vai abrandar um pouco você i / o, mas você vai saber qual sistema de arquivos é muito pequeno)
Emmanuel
Problema que ocorre também com o Ubuntu 14.04 e a versão do kernel 3.13.0.108 em um computador em cada três. Comecei com o askubuntu.com/questions/223143/…, mas as respostas mostradas aqui estão na mesma linha.
XavierStuvw

Respostas:

48

Acabei de encontrar esse mesmo problema. Em outro lugar, encontrei uma menção de inodes e corri no meu terminal para verificar o uso do inode:

  df -i 

Isso mostrou uso de inode em 99%. Portanto, enquanto meu disco tinha muito espaço restante, não consegui criar mais arquivos por causa do limite no número de inodes. Alguma limpeza de disco foi a solução para o meu problema.

Kevin
fonte
6
Eu tive o mesmo problema causado por atualizações do kernel que não removem os kernels antigos automaticamente. Os cabeçalhos Linux de todas as atualizações do kernel ocupam um número considerável de inodes! --- Minha solução "seguro" era passar dois diretórios cabeçalhos do kernel para um sistema de arquivos diferente: cd /usr/src ; cp -a linux-headers-3.2.0-3{2,3}* /home/tmp-hdr ; rm -r linux-headers-3.2.0-3{2,3}*, apt-get-install -f, remova alguns outros cabeçalhos da maneira certa: apt-get purge linux-headers-..., mover os cabeçalhos da parte de trás tmp: cd /usr/src ; cp -a /home/tmp-hdr/* .. Remova mais kernels antigos usando apt-get purge.
pabouk
1
Por favor, considere participar dos relatórios de erros com baixa atividade: O bug # 1089195 linux-headers consumirá seus inodes no LTS. , Bug # 690911 Instalação sem formatação não remover kernels antigos
pabouk
@ pabouk Gostaria de saber se você poderia ter usado dpkg --purge linux-headers-3.2.0-3{2,3}*; apt-get -f installpara que nenhuma cópia fosse necessária?
Jarno
@jarno Já faz muito tempo, mas acho que todos os comandos que usam o banco de dados dpkg ou apt estavam falhando. Eu acho que foi por causa de dependências quebradas e outras inconsistências causadas pelo número insuficiente de inodes durante uma atualização automática.
precisa saber é
A limpeza de disco necessária pode ser feita sudo linux-purge --fixdepois que o script for publicado.
25417 jarno
37

Estou pensando que sua partição de inicialização está cheia de imagens antigas do kernel, não deixando espaço para a nova que apt-getestá tentando instalar. Você pode digitar

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

em uma janela do terminal. Quando faço isso, recebo

ii  linux-headers-3.8.0-18                    3.8.0-18.28                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-18-generic            3.8.0-18.28                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-19                    3.8.0-19.30                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-19-generic            3.8.0-19.30                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-21                    3.8.0-21.32                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-21-generic            3.8.0-21.32                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-22                    3.8.0-22.33                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-22-generic            3.8.0-22.33                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-23                    3.8.0-23.34                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-23-generic            3.8.0-23.34                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-25                    3.8.0-25.37                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-25-generic            3.8.0-25.37                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-generic                     3.8.0.25.43                            amd64        Generic Linux kernel headers

Como tenho muitos, eu poderia excluir alguns dos mais antigos com

sudo apt-get remove linux-headers-3.8.0-18

Se apt-getfalhar porque faltam algumas dependências de pacote (que você não pode instalar devido à falta de inodes livres), você pode recorrer dpkgdiretamente ao invés disso:

sudo dpkg --remove linux-headers-3.8.0-18

Faça isso algumas vezes até o mais velho linux-headers-*e você deve ter espaço.

Marc
fonte
4
Isso traz à luz a outra questão. Toda vez que tento executar o dpkg, ele diz que tem uma dependência não atendida Os seguintes pacotes têm dependências não atendidas: linux-headers-3.5.0-36-generic: Depends: linux-headers-3.5.0-36, mas não é vai ser instalado e que é a coisa que não será instalado porque não há espaço suficiente
Don a
Talvez um backup dos arquivos do usuário esteja em ordem, antes de você mexer com a partição de inicialização? Nunca tive problemas para fazer isso, mas, se o fizesse, teria tudo o que precisava para reinstalar. Claro, eu faço um backup todos os dias de qualquer maneira.
Marc
Eu esperava que não precisasse mexer com a partição de inicialização e que houvesse uma maneira de romper o ciclo interminável de dependência. Vejo agora que provavelmente será mais fácil fazer backup de dados e começar de novo. Agora que sei a importância de limpar itens antigos, vou torná-lo um hábito. Obrigado a todos pela ajuda.
1
De modo nenhum . . . fazer backup sempre é uma boa idéia, e você não está realmente mexendo muito com a partição de inicialização, apenas desinstalando alguns pacotes com o apt-get. Deve ser um pedaço de bolo. Eu apenas sugeri fazer backup de seus dados porque sempre sugiro fazer backup de dados, se você estiver tendo um problema (ou mesmo se não estiver!). Na verdade, eu executei esses comandos no meu próprio sistema para testá-los. Levei três minutos para remover linux-headers-3.8.0-18.
Marc
1
Se falhar novamente sudo dpkg --remove linux-headers-3.8.0-18, remova sudo dpkg --remove linux-headers-3.8.0-18-generice ele levará o outro cabeçalho.
Theson
17

Eu usei sudo apt-get autoremovee ele removeu um monte de pacotes antigos de cabeçalhos de kernel. É bom ir depois disso.

Frank Sfalanga Jr.
fonte
No meu caso, o apt-get se recusou a remover automaticamente, dando precedência ao fato de que havia um pacote quebrado para resolver. Qual pacote quebrado foi causado pela saturação do inode. Veja também este tópico do
AskUbuntu
Bem, isso me salvou! Após uma atualização, minha sessão x nunca estava entrando, apenas solicitando o login novamente e muitas vezes recebi a mensagem de falta de espaço. Eu pensei que eu tive que formatar meu hd, mas seu truque só me salvou :)
user5193682
1
Lol eu não posso executar este porque eu tenho muitos arquivos ...
Brian Leishman
2

Até onde eu sei, o limite de inodes nos sistemas de arquivos ext * do Linux é de cerca de 4 bilhões, mas não menos, o que é uma quantidade enorme de arquivos. Portanto, seu problema é que algo está gerando muitos arquivos. Posso propor que você verifique primeiro isso: http://blog.scoutapp.com/articles/2014/10/08/understanding-disk-inodes Para que você encontre o que está preenchendo os inodes do seu FS. Também posso propor a limpeza do cache do apt:

sudo apt-get clean

e

sudo apt-get autoclean
Stefan
fonte