Eu estava executando um processo Python que cria um grande número de arquivos em um único diretório (eu deveria ter sido mais inteligente e ter sido dividido em vários diretórios, mas isso é outra história).
Depois de um tempo, percebi que não podia ir mais longe e o script começou a me dar um erro:
IOError: [Errno 28] No space left on device: /scr1/data/somefile_00023532.txt
Ao pesquisar, descobri que os motivos mais comuns são (1) a partição realmente não tem espaço e (2) todos os inodes estão esgotados. No entanto,
df
mostra
$ df -h
...
/dev/sdb1 2.7T 1.2T 1.4T 46% /scr1
...
( / dev / sdb1 é a partição em questão) e
$ df -i
...
/dev/sdb1 183148544 17725595 165422949 10% /scr1
...
para que tanto o espaço quanto os inodes estejam realmente disponíveis.
Pode haver muitos arquivos:
$ ls /scr1/data | wc
6468500 6468500 349747747
mas o ext4 deve ser capaz de lidar com isso.
O que poderia estar causando o Linux a pensar que o espaço está esgotado?
UPDATE 1
Aparece com problema acontece com um nome de arquivo específico. Por exemplo,
$ touch /scr1/data/somefilewithproblem.txt
touch: cannot touch ‘/scr1/data/somefilewithproblem.txt‘: No space left on device
mas outros arquivos com o mesmo padrão de nome de arquivo (estou usando algo benigno, como um hash em hexadecimal, número de ID numérico, etc.) não têm o mesmo problema.
UPDATE 2
DUH !! Parece que o sistema de arquivos estava corrompido de alguma forma e, depois de executar fsck.ext4
na partição em questão, o problema desapareceu.
Muito obrigado por aqueles que me ofereceram ajuda!