Não há mais espaço no disco

Não há mais espaço no disco

Estou usando o Ubuntu 14.04. Há algum tempo não consigo executar mais programas simultaneamente. Isto é o que df -hdá:

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

Também tentei a sugestão aqui:bash: echo: erro de gravação: não há espaço restante no dispositivo, não ajuda, na verdade piora a situação. Agora, se eu entrar no terminal e escrever parcialmente o nome de uma pasta, pressiono Tab e obtenho:

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 /

Responder1

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

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

(Você deve fazer isso como root). Provavelmente listará um diretório com um grande número de arquivos. Faça uma busca detalhada 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 é, obviamente, outra história.

Responder2

Como você pode ver df -h, você ainda tem espaço livre na sua partição raiz. No entanto, df -imostra que você ficou sem inodes. No meu computador, tenho 7,3G usado na minha partição raiz, mas apenas 320.000 inodes usados, então você provavelmente tem muitos arquivos muito pequenos obstruindo as coisas em algum lugar.

Para uma discussão sobre onde, veja, por exemploStack Exchange - Descubra onde os inodes estão sendo usados. Eu tentaria o seguinte nessa página:

sudo find / -xdev -printf '%h\0' | sort -z | uniq -cz | sort -nrzk 1 | tr '\0' '\n' | head -n 50

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

sudo du / --inodes -xS | sort -rh | head -n 50

Qualquer um deles fornecerá 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 /varalgum lugar). Isso deve lhe dar uma ideia de quais arquivos você pode excluir, mas se 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:

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
...

Aqui está uma explicação do comando mais simples. sudoé necessário para executar o comando du como root, para que possamos encontrar arquivos em pastas que seu usuário normal talvez não consiga ler. du /fornece o uso do disco do diretório raiz /; --inodesdiz para listar o uso de inodes, -Slistar apenas arquivos no próprio diretório e não em subdiretórios, e -xnão cruzar os limites do sistema de arquivos (já que seu problema está definitivamente ativado /e não ativado, por exemplo, /scratch). Em seguida, canalizamos a saída desse comando para sortencontrar os piores infratores; -rinverte a classificação para que os maiores fiquem no topo e -hclassifique numericamente e não em ordem alfabética. Finalmente, head -n 50gera apenas as primeiras 50 linhas (ou seja, os 50 piores infratores).


Aqui está uma explicação do comando mais complicado. sudoé necessário para executar o comando find como root, para que possamos encontrar arquivos em pastas que seu usuário normal talvez não consiga ler. find /fornece uma lista de todos os arquivos no diretório raiz /; -xdevdiz findpara não ultrapassar os limites do sistema de arquivos (já que seu problema está definitivamente ativado /e não ativado, por exemplo /scratch); -printf '%h\0'imprime o nome do diretório terminando com um byte zero. Em seguida, canalizamos a saída desse comando sort -ze uniq -czcontamos quantas vezes cada diretório foi impresso (ou seja, quantos arquivos existem em cada diretório); sorté necessário aqui, pois uniqprecisa de uma lista ordenada. Depois fazemos uma triagem para encontrar os piores infratores; -rinverte a classificação para que os maiores fiquem no topo e -nclassifique numericamente e não em ordem alfabética. tr '\0' '\n'substitui zero bytes por novas linhas. Finalmente, head -n 50gera apenas as primeiras 50 linhas (ou seja, os 50 piores infratores).

informação relacionada