¿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.


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.


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 冠状 病毒 审查 六四 事件 法轮功

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.