Почему я не могу создавать файлы размером более 2 ГБ в Linux?

8

Я хотел поделиться некоторыми знаниями, которые я получил, когда столкнулся с проблемами при использовании libpcap и фырканья, чтобы прослушать сетевой канал с высокой пропускной способностью (1 ГБ, полный дуплекс; 2 ГБ, максимальный объем). Приложения успешно прослушивали весь трафик, но зависали, когда размер файла достигал 2 ГБ.

Если у вас есть проблемы с созданием файлов размером 2 ГБ, даже если у вас есть файловая система, которая поддерживает это, и / или вы знаете, что ядро ​​поддерживает это, это для вас.

romandas
источник
Думал, что поделюсь этим с сообществом; дайте мне знать, если есть какие-либо изменения, которые мне нужно сделать.
romandas

Ответы:

22

Поддержка больших файлов (> 2 ГБ) для Linux должна осуществляться в трех разных местах, чтобы избежать ограничения максимального размера файла в 2 ГБ:

  1. Поддержка больших файлов включена в ядре

  2. Файловая система, которая поддерживает файлы большого размера (многие файловые системы на основе Linux поддерживают (ext3, reiserfs> = 3.6 и т. Д.))

  3. Поддержка больших файлов в используемых библиотеках или приложениях

Поддержка ядра для больших файлов существует с 2.4.0-test7; если вы используете собственное ядро, убедитесь, что вы включили параметры большого файла.

Большинство файловых систем Linux поддерживают большие файлы, но у вас могут возникнуть проблемы с использованием сетевой файловой системы.

Наконец, библиотеки (т.е. libpcap) и приложения должны быть скомпилированы с опциями gcc -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64. Убедитесь, что пакеты, которые вы используете, поставляются предварительно скомпилированными с этими опциями или сверните свои собственные.

Смотрите здесь для более подробной информации.

romandas
источник
3
Вместо «FILE_OFFSET_BITS» это должно быть «_FILE_OFFSET_BITS».
Джулиано
Вы правы. Исправлено.
romandas
1
Если вы отрицаете, хотя бы будьте порядочным и скажите мне, почему .
Романдас
Примечание: _FILE_OFFSET_BITSпереходит O_LARGEFILEк openсистемному вызову на правильной арке, но _FILE_OFFSET_BITSпредпочтительнее для переносимости: stackoverflow.com/questions/2888425/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
2

Похоже, это проблема с libpcap ... Как указано в первом ответе.

Перекомпилируйте libpcap или найдите другую версию.

Джозеф Керн
источник