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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.