EXT4 “Nenhum espaço deixado no dispositivo (28)” incorreto

6

Eu já passei por outras perguntas / respostas sobre o uso do inode, problemas de montagem e outros, mas nenhuma dessas questões parece se aplicar ...

df -h

/dev/sdd1 931G 100G 785G 12% /media/teradisk

df -ih

/dev/sdd1 59M 12M 47M 21% /media/teradisk

Basicamente, eu tenho um tamanho de unidade 1TB EXT4 formatado e estou escrevendo 12 milhões (12201106) arquivos em um diretório. Não consigo encontrar nenhuma documentação sobre um limite de arquivos por diretório para o EXT4, mas o sistema de arquivos não reporta nenhum espaço à esquerda.

Estranhamente, ainda posso criar novos arquivos na unidade e na pasta de destino, mas ao fazer um grande cp / rsync, as chamadas para mkstemp e rename não relatam espaço no dispositivo.

rsync: mkstemp "/media/teradisk/files/f.xml.No79k5" failed: No space left on device (28)

rsync: rename "/media/teradisk/files/f.xml.No79k5" -> "files/f.xml": No space left on device (28)

Sei que armazenar muitos arquivos em um diretório não é aconselhável por vários motivos, mas, a menos que eu possa ajudá-lo, não quero separá-los.

O uso de inodes e espaço para tmpfs, o dispositivo e tudo o mais parece bem. Alguma idéia da causa?

    
por Aiden Bell 30.04.2012 / 15:56

5 respostas

2

O sistema de arquivos XFS seria uma solução mais suportável (de longo prazo) para o que você está tentando fazer agora . Grandes diretórios de contagem de arquivos não são um problema para o XFS. Obviamente, corrigir isso no nível do aplicativo também seria útil ...

    
por 30.04.2012 / 16:29
5

Parece que você está atingindo o limite de tamanho de diretório. Diretório em si é algum tipo de arquivo especial que contém nomes (+ inode numbers e provavelmente alguns outros metadados) de todos os arquivos nele contidos. E não pode ser maior que 2G.

De qualquer forma, não é uma boa ideia ter mais de alguns milhares de arquivos em um diretório: as pesquisas por nome de arquivo seriam muito lentas e você terá muitos problemas com ferramentas padrão como ls, rm e outras.

Atualização:

a-ha!

link

On Mar 13, 2008 13:23 -0400, Theodore Ts'o wrote:

There is no limit to the number of files in a folder, except for the fact that the directory itself can't be bigger than 2GB, and the number of inodes that the entire filesystem has available to it. Of course, if you don't have directory indexing turned on, you may not like the performance of doing directory lookups, but that's a different story.

     

Há também um limite no código atual da h3 do ext3 para ser apenas 2   níveis profundos. Juntamente com o limite de 2GB você atinge problemas em torno de 15M   arquivos, dependendo do tamanho dos nomes de arquivos.

    
por 30.04.2012 / 16:32
1

o ext4 é absolutamente necessário para você? Atualmente, o XFS deve lidar com uma situação como essa sem problemas.

    
por 30.04.2012 / 16:26
1

Eu tive esse problema. Minha solução foi:

mkfs.ext4 -i 1024 -b 1024 /dev/blah

    
por 20.02.2013 / 14:22
-4

Parece que você está ficando sem i-nodes. Mostrar saída de df -iht ext4 .

Eu também tive um problema com a remoção de um diretório no EXT4 contendo ~ 1 milhão de arquivos (linux kernel 3.0, IIRC). Qual é a versão do kernel no seu caso?

Por fim, sugiro usar o Reiser3 - ele não tem limites de i-node em tempo de formato e, no caso mencionado, parece ter resolvido o problema também.

UPD .: Para aqueles que se perguntam se o Reiser3 é suportado em:

cd linux-stable/fs/reiserfs && git log --pretty='format:%aD %s' . | head -n20

Tue, 10 Jan 2012 15:110:11 -0800 reiserfs: don't lock root inode searching
Tue, 10 Jan 2012 15:11:09 -0800 reiserfs: don't lock journal_init()
Tue, 10 Jan 2012 15:11:07 -0800 reiserfs: delay reiserfs lock until journal initialization
Tue, 10 Jan 2012 15:11:05 -0800 reiserfs: delete comments referring to the BKL
Mon, 9 Jan 2012 12:51:21 -0800 Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Wed, 21 Dec 2011 21:18:43 +0100 reiserfs: Force inode evictions before umount to avoid crash
Wed, 21 Dec 2011 17:35:34 +0100 reiserfs: Fix quota mount option parsing
Wed, 21 Dec 2011 20:17:10 +0100 reiserfs: Properly display mount options in /proc/mounts
Wed, 7 Dec 2011 18:16:57 -0500 vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
Tue, 26 Jul 2011 02:50:53 -0400 reiserfs: propagate umode_t
Tue, 26 Jul 2011 01:52:52 -0400 switch ->mknod() to umode_t
Tue, 26 Jul 2011 01:42:34 -0400 switch ->create() to umode_t
Tue, 26 Jul 2011 01:41:39 -0400 switch vfs_mkdir() and ->mkdir() to umode_t
Mon, 12 Dec 2011 15:51:45 -0500 vfs: fix the stupidity with i_dentry in inode destructors
Fri, 9 Dec 2011 08:06:57 -0500 vfs: mnt_drop_write_file()
Wed, 23 Nov 2011 11:57:51 -0500 switch a bunch of places to mnt_want_write_file()
Fri, 28 Oct 2011 14:13:29 +0200 filesystems: add set_nlink()
Fri, 28 Oct 2011 14:13:28 +0200 filesystems: add missing nlink wrappers
Tue, 25 Oct 2011 12:11:02 +0200 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
Thu, 15 Sep 2011 15:08:05 +0200 Merge branch 'master' into for-next
    
por 30.04.2012 / 16:05