O Aplicativo de 32 Bits Interrompe a Leitura ou a Gravação em um Sistema de Arquivos

Solucione problemas de falha de leitura/gravação de aplicativos de 32 bits em um sistema de arquivos.

Sintoma: Depois de um período de funcionamento correto, um aplicativo de 32 bits para de repente de ler ou gravar em um sistema de arquivos. As operações de leitura/gravação falham com um erro como:

Applications fail to install on FSS mount point: "Value too large for defined data type" - OCI FSS/Mount Target Resources (Doc ID 2672465.1) 

O aplicativo também pode falhar ao iniciar e encontrar erros como os seguintes:

RCV: Value too large for defined data type

Causa: O aplicativo de 32 bits não pode consumir IDs de arquivo maiores. O serviço File Storage foi projetado para funcionar com aplicativos de 64 bits, de modo que os IDs de arquivo gerados pelo File Storage se tornam muito grandes para serem consumidos por aplicativos legados. Mais informações sobre os valores máximos do identificador de arquivo são:

  • Se o aplicativo usar um número inteiro assinado de 32 bits para armazenar o identificador de arquivo, o valor máximo que o aplicativo poderá tratar antes do overflow será 2147483647 (2**(31-1)).
  • Se o aplicativo usar um inteiro de 32 bits não assinado para armazenar o identificador de arquivo, o valor máximo que o aplicativo poderá tratar antes do overflow será 4294967295 (2**(32-1)).
  • Se o aplicativo usar um inteiro assinado de 64 bits para armazenar o identificador de arquivo, o valor máximo que o aplicativo poderá tratar antes do overflow será 9223372036854775807 (2**(63-1))

Para verificar o tamanho dos novos IDs de arquivo que estão sendo gerados, abra um terminal em uma instância conectada e execute o seguinte comando:

touch <File_Storage_mount_point>/test; ls -i <File_Storage_mount_point>/test 

Solução imediata: Defina o parâmetro de kernel enable_ino64=0.

A definição de nfs.enable_ino64=0 instrui o cliente NFS a retornar números de inode de 32 bits para chamadas do sistema readdir() e stat() (em vez dos números de inode completos de 64 bits).
Importante

Esta solução requer uma reinicialização da instância.
  1. Abra uma janela de terminal na instância como usuário root e digite o seguinte comando para verificar a definição nfs.enable_ino64=0 atual.
    #  cat /sys/module/nfs/parameters/enable_ino64

    O sistema deve retornar Y, indicando que os inodes de 64 bits estão ativados.

  2. Execute o comando a seguir para definir nfs.enable_ino64=0.
    echo "options nfs enable_ino64=0"  > /etc/modprobe.d/nfs.conf
  3. Reinicialize a instância.
  4. Verifique se a definição foi atualizada usando o seguinte comando:

    #  cat /sys/module/nfs/parameters/enable_ino64

    O sistema deve retornar N, indicando que os inodes de 64 bits estão desativados e retornaram para 32 bits.

  5. Verifique se o sistema de arquivos está montado na instância ou monte o sistema de arquivos. Consulte Montando Sistemas de Arquivos.

Solução intermediária: Crie um novo sistema de arquivos para usar com seu aplicativo legado de 32 bits. A remoção de arquivos do sistema de arquivos original não redefine a geração de ID de arquivo de volta para 0, por isso você deve criar um novo sistema de arquivos para começar novamente com IDs de arquivos pequenos. Lembre-se de que, após determinado período, os IDs de arquivo se tornarão muito grandes para o aplicativo de 32 bits.

Observação

Essa solução não é aplicável em todos os casos, dependendo da natureza do aplicativo e dos arquivos que ele produz. Por exemplo, se você estiver executando uma atualização de dados que copia arquivos de um sistema de arquivos de produção para um sistema de arquivos de não produção, essa opção funcionará. No entanto, para aplicativos com sistemas de arquivos em crescimento orgânico, essa opção pode não funcionar.

Solução de longo prazo: Faça upgrade do seu aplicativo para uma versão de 64 bits.