如何在Linux/Unix中创建大于2GB的文件?
问题描述:
我有这个家庭工作,我必须从一个源传输一个非常大的文件到多个机器使用bittorrent kinda的算法。最初我将文件分割成块,然后将块传送到所有目标。目标有智能分享他们与其他目标的区块。它工作正常。我想传输一个4GB的文件,所以我标记了四个1GB的文件。它在创建4GB tar文件时没有出错,但在另一端将所有块组装回原始文件时出错,说明超出了文件大小限制。我该如何解决这个2GB限制问题?如何在Linux/Unix中创建大于2GB的文件?
答
我能想到的两个可能的原因:
- 你不必在你的Linux内核启用Large File Support
- 您的应用程序不具有大文件支持编译(您可能需要通过额外的gcc标志来告诉它使用特定的文件I/O功能的64位版本。例如
gcc -D_FILE_OFFSET_BITS=64
)
答
这取决于filesystem type。当使用ext3时,我不会遇到那些显着更大的文件的问题。
如果底层磁盘是FAT,NTFS或CIFS(SMB),则还必须确保使用最新版本的相应驱动程序。有一些较旧的驱动程序具有您所体验的文件大小限制。
答
这可能与system limitation configuration有关吗?
$ ulimit -a
vi /etc/security/limits.conf
vivek hard fsize 1024000
如果你不希望任何限制从/etc/security/limits.conf
删除fsize
。
答
如果您的系统支持它,您可以通过以下方式获得提示:man largefile
。
答
您应该使用fseeko和ftello,看到fseeko(3) 注意你应该定义#define _FILE_OFFSET_BITS 64
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
你正在运行什么文件系统,内核版本和发行版本? – womble 2009-02-18 08:27:31
重新标记以添加linux – 2009-02-18 08:50:00