Não há mais espaço no disco [duplicado]

2

Estou usando o Ubuntu 14.04. Por algum tempo, não consegui rodar mais programas simultaneamente. Isto é o que o df -h dá:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G   25G  3.4G  88% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             16G  4.0K   16G   1% /dev
tmpfs           3.2G  724K  3.2G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             16G   59M   16G   1% /run/shm
none            100M   40K  100M   1% /run/user
/dev/sda2       438G  138M  416G   1% /scratch
AFS             8.6G     0  8.6G   0% /afs

e de df -i :

Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1875968 1875968        0  100% /
none            4106915      11  4106904    1% /sys/fs/cgroup
udev            4103190     499  4102691    1% /dev
tmpfs           4106915     524  4106391    1% /run
none            4106915       3  4106912    1% /run/lock
none            4106915     122  4106793    1% /run/shm
none            4106915      27  4106888    1% /run/user
/dev/sda2      29138944     709 29138235    1% /scratch
AFS             9000000       0  9000000    0% /afs

Eu também tentei a sugestão aqui: bash: echo : erro de gravação: Não há espaço no dispositivo , não ajuda, na verdade, torna-o pior. Agora, se eu entrar no terminal e escrever parcialmente o nome de uma pasta, pressione Tab e obtenha:

cd Pybash: cannot create temp file for here-document: No space left on device

onde eu só queria escrever

cd Python

Editar: a saída de sudo du -hxd1 / é:

1.5G    /var
22G /usr
18M /etc
16K /lost+found
36K /home
349M    /opt
68K /tmp
9.7M    /bin
4.2M    /libx32
12K /.config
2.5M    /root
4.0K    /mnt
4.0K    /lib64
13M /sbin
81M /boot
505M    /lib
3.5M    /lib32
12K /media
4.0K    /srv
25G /
    
por Qubix 17.11.2015 / 15:31

2 respostas

3

O espaço não é o problema aqui. Você tem um diretório com muitos arquivos vazios (ou quase vazios). Cada um deles toma um inode e você usou todos eles. Encontre o diretório:

for i in /* ; do echo "$i" ; find "$i" | wc -l ; done

(Você deve fazer isso como root). Isso provavelmente listará um diretório com um grande número de arquivos. Pesquise até encontrar os arquivos que esgotaram seus inodes. Exclua todos esses arquivos. Então você ficará bem no momento. De onde vêm esses arquivos, é claro, outra história.

    
por Jos 17.11.2015 / 15:48
1

Como você pode ver em df -h , você ainda tem espaço na sua partição raiz. No entanto, df -i mostra que você ficou sem inodes. No meu computador, eu tenho 7.3G usado na minha partição raiz, mas apenas 320.000 inodes usados, então você provavelmente tem um monte de arquivos muito pequenos entupindo as coisas em algum lugar.

Para uma discussão de onde, ver, por ex. Stack Exchange - Encontre onde os inodes estão sendo usados . Eu tentaria o seguinte da página:

sudo find / -xdev -printf '%h
sudo du / --inodes -xS | sort -rh | head -n 50
' | sort -z | uniq -cz | sort -nrzk 1 | tr '
3297    /usr/share/app-install/desktop
3022    /usr/share/man/man3
2325    /usr/bin
2149    /usr/share/man/man1
2104    /usr/share/app-install/icons
1816    /usr/lib/x86_64-linux-gnu
1089    /usr/src/linux-headers-4.2.0-19/include/linux
1089    /usr/src/linux-headers-4.2.0-18/include/linux
1089    /usr/src/linux-headers-4.2.0-16/include/linux
...
' '\n' | head -n 50

Se você estiver em uma versão mais recente do Ubuntu (por exemplo, 15.10), esse comando mais curto também poderá ser mais rápido:

sudo find / -xdev -printf '%h
sudo du / --inodes -xS | sort -rh | head -n 50
' | sort -z | uniq -cz | sort -nrzk 1 | tr '
3297    /usr/share/app-install/desktop
3022    /usr/share/man/man3
2325    /usr/bin
2149    /usr/share/man/man1
2104    /usr/share/app-install/icons
1816    /usr/lib/x86_64-linux-gnu
1089    /usr/src/linux-headers-4.2.0-19/include/linux
1089    /usr/src/linux-headers-4.2.0-18/include/linux
1089    /usr/src/linux-headers-4.2.0-16/include/linux
...
' '\n' | head -n 50

Você terá uma lista de diretórios ordenados por quantos inodes eles estão usando. Você provavelmente encontrará um com um número muito alto (provavelmente em /var em algum lugar). Isso deve lhe dar uma idéia de quais arquivos você pode excluir, mas se você tiver alguma dúvida, pergunte aqui primeiro.

Como referência para o que pode ser normal, no meu computador (executando o Ubuntu 15.10), recebo a seguinte saída desse comando:

%pre%

Aqui está uma explicação do comando mais simples. sudo é necessário para executar o du comando como root, para que possamos localizar arquivos em pastas que seu usuário normal possa não conseguir ler. du / fornece o uso de disco do diretório raiz / ; --inodes diz para listar o uso do inode, -S para listar apenas os arquivos no próprio diretório e não nos subdiretórios e -x para não cruzar os limites do sistema de arquivos (pois seu problema está definitivamente em / e não em, por exemplo, /scratch ). Então nós canalizamos a saída desse comando para sort para encontrar os piores transgressores; -r inverte a classificação, de modo que os maiores estão no topo e -h são ordenados numericamente e não alfabeticamente. Finalmente, head -n 50 apenas gera as primeiras 50 linhas (ou seja, os piores 50 ofensores).

Aqui está uma explicação do comando mais complicado. sudo é necessário para executar o comando find como root, para que possamos localizar arquivos em pastas que seu usuário normal possa não conseguir ler. find / fornece uma lista de todos os arquivos no diretório raiz / ; -xdev diz a find para não cruzar os limites do sistema de arquivos (já que seu problema está definitivamente em / e não em, por exemplo, /scratch ); -printf '%hsort -z' imprime o nome do diretório que termina com um byte zero. Em seguida, canalizamos a saída desse comando para uniq -cz e, em seguida, sort para contar quantas vezes cada diretório foi impresso (ou seja, quantos arquivos estão em cada diretório); uniq é necessário aqui, pois -r precisa de uma lista classificada. Então, procuramos os piores criminosos; -n inverte a classificação, de modo que os maiores estão no topo e tr 'head -n 50' '\n' são ordenados numericamente e não alfabeticamente. %code% substitui zero bytes por novas linhas. Finalmente, %code% apenas gera as primeiras 50 linhas (ou seja, os piores 50 ofensores).

    
por Gsxr1k 17.11.2015 / 15:59