【问题标题】:How to create a file of size more than 2GB in Linux/Unix?如何在 Linux/Unix 中创建大小超过 2GB 的文件?
【发布时间】:2009-02-18 08:23:39
【问题描述】:

我有一项家庭作业,我必须使用 bittorrent 算法将一个非常大的文件从一个源传输到多台机器。最初,我将文件切割成块,然后将块传输到所有目标。目标具有与其他目标共享其拥有的块的智能。它工作正常。我想传输一个 4GB 的文件,所以我压缩了四个 1GB 的文件。当我创建 4GB tar 文件时它没有出错,但在另一端将所有块组装回原始文件时出错,说超出了文件大小限制。我该如何解决这个 2GB 限制问题?

【问题讨论】:

  • 您正在运行什么文件系统、内核版本和发行版/版本?

标签: linux tar filesize


【解决方案1】:

我能想到两个可能的原因:

  • 您的 Linux 内核中没有启用 Large File Support
  • 您的应用程序编译时不支持大文件(您可能需要传递 gcc 额外标志来告诉它使用某些文件 I/O 函数的 64 位版本。例如gcc -D_FILE_OFFSET_BITS=64

【讨论】:

【解决方案2】:

这取决于filesystem type。使用 ext3 时,我对大得多的文件没有这样的问题。

如果底层磁盘是 FAT、NTFS 或 CIFS (SMB),您还必须确保使用相应驱动程序的最新版本。有一些较旧的驱动程序具有文件大小限制,就像您遇到的那样。

【讨论】:

    【解决方案3】:

    这可能与system limitation configuration 有关吗?

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

    如果您不想要任何限制,请从 /etc/security/limits.conf 中删除 fsize

    【讨论】:

      【解决方案4】:

      如果您的系统支持,您可以通过以下方式获得提示:man largefile

      【讨论】:

        【解决方案5】:

        您应该使用 fseeko 和 ftello,请参阅 fseeko(3) 注意你应该定义#define _FILE_OFFSET_BITS 64

        #define _FILE_OFFSET_BITS 64
        #include <stdio.h>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-19
          • 2011-08-30
          • 2010-09-13
          • 2012-06-21
          • 2011-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多