É uma boa ideia deixar os arquivos crescerem acima de 2GB no ext2?

2

Estou trabalhando em um programa que precisa ser executado em uma distribuição Linux com um sistema de arquivos ext2. Este programa irá gravar arquivos que podem se tornar muito grandes. Percebo que o ext2 tem um tamanho máximo de arquivo de 16 GB a 64 GB. No entanto, uma coisa na página da wikipedia que me assustou um pouco é a seguinte linha:

There are also many userspace programs that can't handle files larger than 2 GB.

... quando se fala sobre as limitações do ext2. Isso significa que devo ter cuidado ao deixar um arquivo crescer com mais de 2 GB?

    
por Jason Baker 08.12.2009 / 16:05

4 respostas

2

O que você encontrará é que alguns programas usam 'fseek' para se mover em um arquivo.

int fseek ( FILE * stream, long int offset, int origin );

Se eles fizerem coisas relativas ao início do arquivo (SEEK_SET para o parâmetro de origem), então eles só terão um inteiro de 32 bits assinado como parâmetro de deslocamento, para que eles possam obter apenas 2 GB no arquivo.

Para programas que não usam fseek / ftell (por exemplo, um programa que lê apenas todo o arquivo de maneira linear), e para programas que usam fseek para ir e voltar um pouco da posição atual ( SEEK_CUR com deslocamentos < 2G), não há problema, tudo funcionará muito bem, não importa o tamanho do arquivo. São apenas programas que acessam aleatoriamente os dados do arquivo que terão um problema.

Note que alguns ambientes possuem as funções 'fseek64' e 'ftell64', que dão ao chamador um inteiro assinado de 64 bits, e assim acessam o que quiserem.

    
por 08.12.2009 / 16:45
1

Eu nunca tive problemas, e meus logs de sistema são rotineiramente maiores que 2 GB em alguns dos meus servidores com IPs externos (os logs giram semanalmente, não por tamanho). Eu também executo alguns feeds massivos que produzem arquivos de 3-6 GB de tamanho, e eu também não tive problemas com eles.

Eu diria que é completamente dependente de quais programas de usuários você precisa: se houver um problema, talvez seja necessário reavaliar.

    
por 08.12.2009 / 16:31
1

O limite de tamanho do arquivo é muito dependente do tamanho do bloco do seu sistema de arquivos. O limite de arquivo único é de 16 GB se você tiver um tamanho de bloco de 1 K, 256 GB para 2 K e 4 TB para 4K. Você pode verificar o tamanho do seu bloco usando:

mojo-jojo david% sudo tune2fs -l /dev/sda1 | grep "Block size"
Block size:               4096

Isso está em uma partição ext3, mas eles terão os mesmos limites. Eu ficaria muito surpreso se você tiver uma partição de tamanho de bloco de 1K e, como tal, você não precisa se preocupar com o sistema de arquivos.

Dito isto, alguns programas não conseguem ter suporte a arquivos grandes (maiores que 2GB), mas eu não vi um em um tempo muito longo. O último que vi foi o jsvc do commons-java, que caiu quando o arquivo de log ficou maior que 2GB. Quase tudo escrito nos últimos 6 anos funcionará, a menos que alguém faça algo estranho.

    
por 08.12.2009 / 19:42
1

O limite de 2 GB tem sua origem no tamanho de 32 bits de ssize_t / size_t / off_t em sistemas mais antigos. Essa é a porta da especificação POSIX e não está especialmente relacionada ao ext2.

Como menciona um comentário acima, você pode compilar seu aplicativo com o sinalizador "_FILE_OFFSET_BITS = 64" para que esses tipos tenham um tamanho de 64 bits.

Aqui está um artigo sobre o estado do suporte a arquivos grandes no Linux .

    
por 09.12.2009 / 10:28