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