Por que não consigo criar arquivos maiores que 2 GB no Linux?

8

Eu queria compartilhar um pouco do conhecimento adquirido quando tive problemas ao usar o libpcap e o snort para detectar um link de rede de alta capacidade (1 GB full duplex; 2 GB no máximo). Os aplicativos farejavam todo o tráfego com êxito, mas travavam quando o tamanho do arquivo atingia 2 GB capturados.

Se você está tendo problemas com a criação de arquivos de 2 GB, mesmo que tenha um sistema de arquivos que o suporte e / ou saiba que o kernel suporta, isso é para você.

romandas
fonte
Pensei em compartilhar isso com a comunidade; deixe-me saber se há alguma alteração que precise fazer.
Romandas

Respostas:

22

O suporte a arquivos grandes (> 2 GB) para Linux precisa ser tratado em três locais separados para garantir que você não atinja o limite máximo de tamanho de arquivo de 2 GB:

  1. Suporte a arquivos grandes ativado no kernel

  2. Um sistema de arquivos que suporta grandes tamanhos de arquivo (muitos sistemas de arquivos baseados em Linux suportam (ext3, reiserfs> = 3.6, etc))

  3. Suporte a arquivos grandes nas bibliotecas ou aplicativos utilizados

O suporte do kernel para arquivos grandes existe desde o 2.4.0-test7; se você usar um kernel personalizado, inclua as opções de arquivos grandes.

A maioria dos sistemas de arquivos Linux suporta arquivos grandes, mas você pode ter problemas ao usar um sistema de arquivos em rede.

Por fim, bibliotecas (por exemplo, libpcap) e aplicativos precisam ser compilados com as opções do gcc -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64. Verifique para garantir que os pacotes que você está usando sejam pré-compilados com essas opções ou role seus próprios.

Veja aqui para mais detalhes.

romandas
fonte
3
Em vez de "FILE_OFFSET_BITS", ele deve ser "_FILE_OFFSET_BITS".
Juliano
Você está certo. Corrigido.
Romandas 12/06/09
11
Se você recusar, pelo menos seja decente e me diga o porquê .
Romandas 07/08/09
Nota: _FILE_OFFSET_BITSpassa O_LARGEFILEpara o opensyscall no arco correto, mas _FILE_OFFSET_BITSé preferível para portabilidade: stackoverflow.com/questions/2888425/…
Ciro Santilli
2

Parece que isso é um problema com a libpcap ... Como indicado na primeira resposta.

Recompile a libpcap ou encontre outra versão.

Joseph Kern
fonte