ファイルサイズ制限

ファイルサイズ制限

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

10年以上にわたり、32ビットLinuxアプリケーションは、次の実装のおかげで2GiB(2 ^ 31)より大きいファイルにアクセスできました。大容量ファイルのサポート。現在、オペレーティングシステムの制限は8EiB(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

ファイルサイズが3GBに達する前に、両方のプログラムが停止します。

関連情報