rhel 32 位操作系统中的最大文件大小限制是多少,操作系统对文件大小是否有限制,如果设置了任何限制,请告诉我 root 和 oaa 的限制。
答案1
文件大小受文件系统类型的限制,而不是操作系统的限制。通常,操作系统支持多个文件系统,因此不存在“操作系统文件大小限制”之类的东西。众所周知的文件系统有一些限制:
FAT32 - 4Gib
NTFS - 16Eib
ext2/3 - 16Gib - 2Tib (depends from block size)
ext4 - 16Gib - 16Tib
XFS - 9Eib
ZFS - 16Eib
答案2
十多年来,由于实施了以下方法,32 位 Linux 应用程序能够访问大于 2 GiB (2^31) 的文件大文件支持。当前的操作系统限制是 8 EiB (2^63),不久之后我们就不会再对它感到陌生了……
您需要一个对文件大小也没有下限的文件系统。
答案3
大文件支持(线性FS) 默认情况下不支持:
- 32 位内核
- 32 位进程在 64 位内核上运行。
如下所述邮政它应该在编译时在内核中显式启用。否则文件大小限制为2147483647 字节= 2^31 - 1(1 个字节可能是为内核或 FS 保留的)。
如果你有一个32位RHEL您可以使用以下命令快速验证:
dd if=/dev/zero of=./LargeFile bs=1024 count=3000000
如果你有一个64位RHEL并且该过程是为 32 位系统编译的,您也有同样的问题。您可以通过运行以下程序来验证:
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char *argv[], char *envp[]) { int result; long long to_write = 3000000000; int file_descriptor = open("LargeFile" , O_CREAT | O_RDWR , 0600); char chunk[1024]; memset(chunk , 'A' , 1024); while(to_write > 0) { result = write(file_descriptor , chunk , 1024); if(result != 1024) { printf("***ERROR*** %d\n" , result); break; } to_write -= 1024; usleep(200); } close(file_descriptor); return 0; }
您需要将程序编译为 32 位可执行文件:
gcc -m32 -Wall -g main.c -o main
在文件达到 3 GB 大小之前,两个程序都会停止