
Estou usando o Ubuntu 14.04. Há algum tempo não consigo executar mais programas simultaneamente. Isto é o que 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
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 -i
mostra 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 /var
algum 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 /
; --inodes
diz para listar o uso de inodes, -S
listar apenas arquivos no próprio diretório e não em subdiretórios, e -x
nã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 sort
encontrar os piores infratores; -r
inverte a classificação para que os maiores fiquem no topo e -h
classifique numericamente e não em ordem alfabética. Finalmente, head -n 50
gera 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 /
; -xdev
diz find
para 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 -z
e uniq -cz
contamos quantas vezes cada diretório foi impresso (ou seja, quantos arquivos existem em cada diretório); sort
é necessário aqui, pois uniq
precisa de uma lista ordenada. Depois fazemos uma triagem para encontrar os piores infratores; -r
inverte a classificação para que os maiores fiquem no topo e -n
classifique numericamente e não em ordem alfabética. tr '\0' '\n'
substitui zero bytes por novas linhas. Finalmente, head -n 50
gera apenas as primeiras 50 linhas (ou seja, os 50 piores infratores).