Limite de tamanho do arquivo

0

Qual é o limite máximo de tamanho de arquivo em rhel 32 bit OS, existe alguma limitação do sistema operacional para o tamanho do arquivo, se houver alguma limitação definida, por favor, diga-me o que será para root & oaa.

    
por vikram rao 05.04.2016 / 11:23

3 respostas

3

O tamanho do arquivo é limitado pelo tipo de sistema de arquivos, não pelo sistema operacional. Normalmente, o sistema operacional suporta vários sistemas de arquivos, portanto, não existe tal coisa como "limite de tamanho de arquivo do SO". Existem limites para sistemas de arquivos conhecidos:

FAT32 - 4Gib  
NTFS - 16Eib  
ext2/3 - 16Gib - 2Tib (depends from block size)  
ext4 - 16Gib - 16Tib  
XFS - 9Eib  
ZFS - 16Eib
    
por 05.04.2016 / 12:02
2

Desde mais de uma década, os aplicativos Linux de 32 bits são capazes de acessar arquivos maiores que 2 GiB (2 ^ 31) graças à implementação de suporte a arquivos grandes . A limitação atual do sistema operacional é de 8 EiB (2 ^ 63), que não deve acertar o nosso comum antes de um tempo ...

Você precisaria de um sistema de arquivos que não fizesse limite mais baixo para o tamanho do arquivo também.

    
por 05.04.2016 / 13:05
0

O suporte a arquivos grandes ( LFS ) não é suportado por padrão em:

  • kernels de 32 bits
  • Processos de 32 bits sendo executados em kernels de 64 bits.

Conforme declarado no seguinte post deve ser explicitamente habilitado no kernel no momento da compilação. Caso contrário, o tamanho do arquivo é limitado a 2147483647 bytes = 2 ^ 31 - 1 (1 byte é provavelmente reservado para o kernel ou FS).

  • Se você tiver um 32 bit RHEL , poderá verificar isso rapidamente com o seguinte comando:

    dd if=/dev/zero of=./LargeFile bs=1024 count=3000000
    
  • Se você tem um RHEL de 64 bits e o processo é compilado para sistemas de 32 bits, você tem o mesmo problema. Você pode verificar isso executando o seguinte programa:

    #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;
    }
    

Você precisa compilar o programa como executável de 32 bits:

gcc -m32 -Wall -g main.c -o main

Ambos os programas serão interrompidos antes que o arquivo atinja o tamanho de 3 GB

    
por 23.11.2017 / 16:13