Как создать файл размером более 2 ГБ в Linux/Unix?

У меня есть эта домашняя работа, где я должен передать очень большой файл из одного источника на несколько машин, используя своего рода алгоритм bittorrent. Сначала я разрезаю файлы на куски и передаю куски всем целевым объектам. Цели обладают интеллектом, позволяющим делиться имеющимися у них фрагментами с другими целями. Это работает нормально. Я хотел передать файл размером 4 ГБ, поэтому заархивировал четыре файла размером 1 ГБ. Когда я создал tar-файл размером 4 ГБ, он не выдал ошибку, но на другом конце, когда я собирал все фрагменты обратно в исходный файл, он выдает ошибку, говоря, что превышен предел размера файла. Как я могу решить эту проблему ограничения 2 ГБ?


person Ram    schedule 18.02.2009    source источник
comment
Какая у вас файловая система, версия ядра и дистрибутив/версия?   -  person womble    schedule 18.02.2009


Ответы (5)


Я могу предположить две возможные причины:

  • В ядре Linux не включена поддержка больших файлов.
  • Ваше приложение не скомпилировано с поддержкой больших файлов (вам может потребоваться передать дополнительные флаги gcc, чтобы указать ему использовать 64-разрядные версии определенных функций ввода-вывода файлов, например, gcc -D_FILE_OFFSET_BITS=64)
person codelogic    schedule 18.02.2009
comment
Не забудьте хотя бы упомянуть файловую систему (драйвер). Некоторые FS имеют произвольные ограничения. Только Btrfs, ZFS и, возможно, некоторые другие имеют 128-битные возможности (в результате, например, 16 экзабайт (16×1018 байт) — Максимальный размер одного файла) - person sehe; 28.04.2011
comment
Примечание. _FILE_OFFSET_BITS передает O_LARGEFILE системному вызову open в правильной арке, но _FILE_OFFSET_BITS предпочтительнее для переносимости: stackoverflow.com/questions/2888425/ - person Ciro Santilli 新疆再教育营六四事件ۍ 17.08.2017

Это зависит от типа файловой системы. При использовании ext3 у меня нет таких проблем с файлами значительно большего размера.

Если базовым диском является FAT, NTFS или CIFS (SMB), вы также должны убедиться, что используете последнюю версию соответствующего драйвера. Есть некоторые старые драйверы, которые имеют ограничения на размер файла, такие как те, с которыми вы сталкиваетесь.

person krosenvold    schedule 18.02.2009

Может ли это быть связано с системой конфигурация ограничения ?

$ ulimit -a
vi /etc/security/limits.conf
vivek       hard  fsize  1024000

Если вы не хотите никаких ограничений, удалите fsize из /etc/security/limits.conf.

person VonC    schedule 18.02.2009

Если ваша система поддерживает это, вы можете получить подсказки с помощью: man largefile.

person mouviciel    schedule 18.02.2009

Вы должны использовать fseeko и ftello, см. fseeko(3) Обратите внимание, что вы должны определить #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
person Artyom    schedule 18.02.2009