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

StackOverflow https://stackoverflow.com/questions/560238

  •  05-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

  • У тебя нет Поддержка больших файлов включено в вашем ядре Linux
  • Ваше приложение не скомпилировано с поддержкой больших файлов (возможно, вам придется передать дополнительные флаги gcc, чтобы указать ему использовать 64-разрядные версии определенных функций файлового ввода-вывода.например gcc -D_FILE_OFFSET_BITS=64)

Другие советы

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

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

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

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

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

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

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

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top