文件大小限制

文件大小限制

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 大小之前,两个程序都会停止

相关内容