Perché non riesco a creare file di dimensioni superiori a 2 GB su Linux?


8

Volevo condividere alcune conoscenze acquisite quando ho riscontrato problemi con libpcap e snort per annusare un collegamento di rete ad alta capacità (1 GB full duplex; 2 GB max aggregato). Le applicazioni annuserebbero con successo tutto il traffico, ma si arresterebbero in modo anomalo quando la dimensione del file raggiungesse i 2 GB acquisiti.

Se hai problemi con la creazione di file da 2 GB, anche se hai un filesystem che lo supporta e / o sai che il kernel lo supporta, questo è per te.


Ho pensato di condividere questo con la comunità; fammi sapere se ci sono cambiamenti che devo fare.
Romandia,

Risposte:


22

Il supporto di file di grandi dimensioni (> 2 GB) per Linux deve essere indirizzato in tre posizioni separate per garantire che non si verifichino limiti di dimensione massima del file di 2 GB:

  1. Supporto di file di grandi dimensioni abilitato nel kernel

  2. Un filesystem che supporta file di grandi dimensioni (lo fanno molti filesystem basati su Linux (ext3, reiserfs> = 3.6, ecc.))

  3. Supporto di file di grandi dimensioni all'interno delle librerie o delle applicazioni utilizzate

Il supporto del kernel per file di grandi dimensioni esiste da 2.4.0-test7; se usi un kernel personalizzato, assicurati di aver incluso le opzioni di file di grandi dimensioni.

La maggior parte dei filesystem Linux supporta file di grandi dimensioni, ma potresti avere problemi con l'utilizzo di un file system di rete.

Infine, le librerie (es. Libpcap) e le applicazioni devono essere compilate con le opzioni gcc -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64. Verifica che i pacchetti che stai utilizzando vengano precompilati con queste opzioni o arrotoli i tuoi.

Vedi qui per maggiori dettagli.


3
Invece di "FILE_OFFSET_BITS", dovrebbe essere "_FILE_OFFSET_BITS".
Juliano,

Hai ragione. Corretto.
Romandia,

1
Se riduci il voto, almeno sii decente e dimmi perché .
Romandia,

Nota: _FILE_OFFSET_BITSpassa O_LARGEFILEalla opensyscall sull'arco corretto, ma _FILE_OFFSET_BITSè preferibile per la portabilità: stackoverflow.com/questions/2888425/...
Ciro Santilli冠状病毒审查六四事件法轮功

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.