¿Por qué no puedo crear archivos de más de 2 GB en Linux?

8

Quería compartir algunos conocimientos que aprendí cuando me encontré con problemas al usar libpcap y resoplar para detectar un enlace de red de alta capacidad (1 GB full duplex; 2 GB máximo agregado). Las aplicaciones detectarían todo el tráfico con éxito, pero se bloquearían cuando el tamaño del archivo alcanzara los 2 GB capturados.

Si tiene problemas para crear archivos de 2 GB, a pesar de que tiene un sistema de archivos que lo admite y / o sabe que el núcleo lo admite, esto es para usted.

romandas
fuente
Pensé que compartiría esto con la comunidad; Avíseme si hay algún cambio que deba hacer.
romandas

Respuestas:

22

La compatibilidad con archivos grandes (> 2 GB) para Linux debe abordarse en tres ubicaciones separadas para garantizar que no se encuentre con el límite de tamaño máximo de archivo de 2 GB:

  1. Soporte de archivos grandes habilitado en el kernel

  2. Un sistema de archivos que admite archivos de gran tamaño (muchos sistemas de archivos basados ​​en Linux lo hacen (ext3, reiserfs> = 3.6, etc.))

  3. Soporte de archivos grandes dentro de las bibliotecas o aplicaciones utilizadas

El soporte del kernel para archivos grandes ha existido desde 2.4.0-test7; Si utiliza un núcleo personalizado, asegúrese de haber incluido las opciones de archivos grandes.

La mayoría de los sistemas de archivos de Linux admiten archivos de gran tamaño, pero puede tener problemas al usar un sistema de archivos de red.

Por último, las bibliotecas (es decir, libpcap) y las aplicaciones deben compilarse con las opciones gcc -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64. Verifique para asegurarse de que los paquetes que está utilizando vienen precompilados con estas opciones o enrolle los suyos.

Ver aquí para más detalles.

romandas
fuente
3
En lugar de "FILE_OFFSET_BITS", debería ser "_FILE_OFFSET_BITS".
Juliano
Tienes razón. Corregido
romandas
1
Si votas mal, al menos sé decente y dime por qué .
romandas
Nota: _FILE_OFFSET_BITSpasa O_LARGEFILEa la openllamada al sistema en el arco correcto, pero _FILE_OFFSET_BITSse prefiere para la portabilidad: stackoverflow.com/questions/2888425/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
2

Parece que este es un problema con libpcap ... Como se indicó en la primera respuesta.

Vuelva a compilar libpcap o busque otra versión.

Joseph Kern
fuente