Utilitário diz que não há mais espaço livre em disco, quando há bastante

4

De alguma forma, meu sistema está em apuros.

$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-headers-3.2.0-80
The following NEW packages will be installed
  linux-headers-3.2.0-80
0 to upgrade, 1 to newly install, 0 to remove and 251 not to upgrade.
3 not fully installed or removed.
Need to get 0 B/11.7 MB of archives.
After this operation, 56.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? 
(Reading database ... 1255202 files and directories currently installed.)
Unpacking linux-headers-3.2.0-80 (from .../linux-headers-3.2.0-80_3.2.0-80.116_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb (--unpack):
 unable to create '/usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h.dpkg-new' (while processing './usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h'): No space left on device
No apport report written because the error message indicates a disk full error
                                                                              dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mas:

us@desktop:/var/log$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       20158332 16166516   2967816  85% /
udev             4026512        4   4026508   1% /dev
tmpfs             807064      996    806068   1% /run
none                5120        0      5120   0% /run/lock
none             4035308      128   4035180   1% /run/shm
/dev/sda4      904990760 51533960 807485908   6% /home

perplexo!

us@desktop:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1281120 1278499     2621  100% /
udev            1006628     507  1006121    1% /dev
tmpfs           1008827     445  1008382    1% /run
none            1008827       3  1008824    1% /run/lock
none            1008827       6  1008821    1% /run/shm
/dev/sda4      57466880  110192 57356688    1% /home

Ah, então a tabela de inodes está cheia. Nunca teve isso antes, o que causa isso então?

    
por artfulrobot 27.12.2015 / 11:52

2 respostas

11

Como mostrado na saída de df -i , você está executando um número muito baixo de inodes livres em / e, portanto, o dpkg não consegue concluir a operação.

Na maioria das vezes, isso é causado por inúmeros pequenos arquivos criados em algum lugar (inadvertidamente) no sistema de arquivos.

Você pode verificar os arquivos de tamanho inferior a 1 KB e começar a removê-los se não for necessário:

sudo find / -type f -size -1k -ls

Da mesma forma, você pode verificar com o aumento do tamanho dos arquivos até chegar à raiz do problema.

    
por heemayl 27.12.2015 / 13:16
4

Todo o crédito para @heemayl para os ponteiros que resultaram nessa resposta. Aceitei essa resposta, mas aqui estão os detalhes de como corrigi-la, caso isso seja útil para os outros.

O problema foi causado por uma tabela full inode. Pelo que entendi, existem duas partes para um sistema de arquivos, inodes e espaço. inodes estão relacionados ao número de arquivos, onde o espaço é o tamanho que eles têm. Meu sistema estava repleto de milhões de arquivos minúsculos causados pelo Ubuntu não remover os kernels antigos. Como o sistema funcionou por um longo tempo, eu tinha mais de 40 kernels, incl. arquivos de cabeçalho, instalados, o que é muito para um sistema de arquivos da partição do sistema de 20Gb.

Isso significava que o dpkg não podia concluir uma instalação - precisava de mais espaço para concluir seu trabalho - mas, infelizmente, isso não significava que eu poderia criar espaço usando o apt para desinstalar coisas!

A solução que encontrei foi mover todos os arquivos /usr/src/ para minha outra partição, deixando apenas um link simbólico para os arquivos no fs completo:

sudo mv /usr/src /home/usr-src
sudo ln -s /home/usr-src /usr/src

Depois de fazer isso, pude deixar o apt completar:

sudo apt install -f

E depois disso eu consegui desinstalar todos os kernels mais antigos que eu não precisava, liberando espaço, e então eu pude mover a pasta src de volta.

    
por artfulrobot 27.12.2015 / 13:20

Tags