Warum kann ich unter Linux keine Dateien mit mehr als 2 GB erstellen?

8

Ich wollte etwas Wissen teilen, das ich gesammelt habe, als ich Probleme mit libpcap hatte und schnaubte, um eine Netzwerkverbindung mit hoher Kapazität (1 GB Vollduplex; maximal 2 GB Aggregat) zu schnüffeln. Die Anwendungen würden den gesamten Datenverkehr erfolgreich abhören, aber abstürzen, wenn die Dateigröße 2 GB erfasst.

Wenn Sie Probleme beim Erstellen von 2-GB-Dateien haben, obwohl Sie ein Dateisystem haben, das dies unterstützt, und / oder wenn Sie wissen, dass der Kernel dies unterstützt, ist dies das Richtige für Sie.

Romandas
quelle
Ich dachte, ich würde das mit der Community teilen. Lassen Sie mich wissen, ob ich Änderungen vornehmen muss.
Romandas

Antworten:

22

Die Unterstützung großer Dateien (> 2 GB) für Linux muss an drei verschiedenen Speicherorten erfolgen, um sicherzustellen, dass Sie nicht auf die maximale Dateigrößenbeschränkung von 2 GB stoßen:

  1. Unterstützung für große Dateien im Kernel aktiviert

  2. Ein Dateisystem, das große Dateigrößen unterstützt (viele Linux-basierte Dateisysteme tun dies (ext3, reiserfs> = 3.6 usw.)).

  3. Unterstützung für große Dateien in den verwendeten Bibliotheken oder Anwendungen

Die Kernel-Unterstützung für große Dateien gibt es seit 2.4.0-test7. Wenn Sie einen benutzerdefinierten Kernel verwenden, stellen Sie sicher, dass Sie die Optionen für große Dateien enthalten haben.

Die meisten Linux-Dateisysteme unterstützen große Dateien, es kann jedoch zu Problemen bei der Verwendung eines Netzwerkdateisystems kommen.

Zuletzt müssen Bibliotheken (dh libpcap) und Anwendungen mit den gcc-Optionen -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64 kompiliert werden. Stellen Sie sicher, dass die von Ihnen verwendeten Pakete entweder mit diesen Optionen vorkompiliert sind oder Ihre eigenen rollen.

Sehen Sie hier für weitere Details.

Romandas
quelle
3
Anstelle von "FILE_OFFSET_BITS" sollte es "_FILE_OFFSET_BITS" sein.
Juliano
Du hast recht. Korrigiert.
Romandas
1
Wenn Sie abstimmen, seien Sie zumindest anständig und sagen Sie mir warum .
Romandas
Hinweis: _FILE_OFFSET_BITSgeht O_LARGEFILEauf die opensyscall auf dem richtigen Bogen, sondern _FILE_OFFSET_BITSist für die Portabilität bevorzugt: stackoverflow.com/questions/2888425/...
Ciro Santilli冠状病毒审查六四事件法轮功
2

Sieht so aus, als wäre dies ein Problem mit libpcap ... Wie in der ersten Antwort angegeben.

Kompilieren Sie libpcap neu oder suchen Sie eine andere Version.

Joseph Kern
quelle