Não foi possível gravar no disco, mas o disco não está cheio

36

Estou usando o Ubuntu 12.04 e não consigo gravar em nenhum arquivo, nem mesmo como root, nem fazer qualquer outra operação que exija gravação. Nem qualquer processo que precise escrever, portanto todos estão falhando. dfdiz que tenho muito espaço:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       30G   14G   15G  48% /
udev            984M  4.0K  984M   1% /dev
tmpfs           399M  668K  399M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            997M     0  997M   0% /run/shm

Todos os resultados que encontro para "não é possível gravar no disco" são sobre discos legitimamente completos. Eu nem sei por onde começar aqui. O problema apareceu do nada esta manhã.

A última entrada de log do PHP é:

falhou: Não há espaço no dispositivo (28)

Vim diz:

Não foi possível abrir (arquivo) para gravação

Outros aplicativos apresentam erros semelhantes.

Depois de excluir ~ 1gb apenas para ter certeza, o problema permanece. Eu também reiniciei.

df -i diz

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/xvda1     1966080 1966080      0  100% /
udev            251890     378 251512    1% /dev
tmpfs           255153     296 254857    1% /run
none            255153       4 255149    1% /run/lock
none            255153       1 255152    1% /run/shm
felwithe
fonte
14
Por favor, poste a saída de "df -i".
EEAA 25/10
1
@EEAA editado em. Você está certo, df -i diz 100%. O que isto significa? Por que seria diferente?
Feltro #
3
IIRC, muitos arquivos em um único diretório terão sintomas semelhantes, se não idênticos. O número "demais" varia entre os sistemas de arquivos.
MSalters 26/10/15

Respostas:

59

Você está sem inodes. É provável que você tenha um diretório em algum lugar com muitos arquivos muito pequenos.

EEAA
fonte
9
Só queria acrescentar que eu nem sabia que rm poderia falhar. Isso tem sido uma educação.
Feltro #
2
@felwithe, eu posso imaginar que find . -name sess\* -exec rm {} +teria funcionado.
Carsten S
3
@felwithe O que os outros sugeriram. rm provavelmente funcionou bem, mas o shell expandiu a *glob em muitos dados e vomitou antes mesmo de chegar ao ponto de invocar rm.
um CVn
8
@CarstenS: Ou o find . -name sess\* -deleteque eu acho mais fácil de lembrar e geralmente é mais eficiente.
MSalters 26/10/2015
2
@ Kaslai o limite não existe RAM, mas o limite do sistema ARG_MAX. O padrão POSIX não especifica exatamente como os argumentos da linha de comando são medidos em relação ao ARG_MAX, infelizmente. Algumas implementações não têm limite e, portanto, não definem ARG_MAX, mas essa não é uma opção popular, pois faz com que muitos programas falhem na compilação.
James Youngman
7

Aparentemente, o OP tem uma resposta para seu problema específico. No entanto, para completar, os sintomas do OP também podem ocorrer se o sistema de arquivos tiver sido remontado somente leitura. Isso aconteceu comigo usando uma VM do Linux cujo armazenamento estava em um sistema de disco em cluster, sofrendo falhas intermitentes raras. Ocasionalmente, as falhas faziam com que os sistemas de arquivos fossem remontados apenas para leitura. O sintoma externo eventualmente observável foi o de vários serviços se tornarem não responsivos à medida que a RAM era preenchida (com gravações em disco não-laváveis).

Naquela época, a única solução era reiniciar o sistema (perdendo os logs não escritos). Tentativas de remontar o RW falharam. (Infelizmente, não recordo as mensagens de erro retornadas ao tentar essas remontagens.)

Portanto, ..., não é o problema do OP, mas alguém que chega nesta página pode se beneficiar com essas informações.

Eric Towers
fonte
5
Na verdade não; quando o sistema de arquivos tiver sido remontado somente leitura, você receberá um erro informando que o sistema de arquivos é somente leitura, não está sem espaço.
Psusi 25/10/2015
1
@ psusi: eu não fiz. Eu recebi vários erros, incluindo "sistema de arquivos cheio". Se isso mudou nos últimos dois ou três anos, isso seria uma coisa boa.
Eric Towers
1
Tentei mover um arquivo para um sistema de arquivos ZFS somente leitura no Linux outro dia. O erro claramente dizia "sistema de arquivos somente leitura".
um CVn
Não; tem sido assim por mais de 30 anos. Uma gravação em um fs somente leitura retorna -EROFS; uma gravação em um fs completo retorna -ENOSPC.
Psusi 26/10/2015
4
@psusi: Vejo que você mora no universo da fantasia, onde os programadores sempre fazem a coisa certa, em vez de criar suas próprias mensagens de erro. Parece que não moro lá.
Eric Towers