Une application 32 bits s'arrête de lire ou d'écrire dans un système de fichiers

Dépanner l'échec de lecture/d'écriture d'une application 32 bits dans un système de fichiers.

Symptôme : Après une période de fonctionnement correct, une application 32 bits cesse subitement de lire ou d'écrire dans un système de fichiers. Les opérations de lecture/écriture échouent avec une erreur telle que :

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

L'application peut également ne pas démarrer et rencontrer des erreurs telles que les suivantes :

RCV: Value too large for defined data type

Cause : L'application 32 bits ne peut pas consommer des ID fichiers plus volumineux. Le service de stockage de fichiers est conçu pour fonctionner avec des applications 64 bits, de sorte que les ID fichier générés par le stockage de fichiers deviennent trop volumineux pour que les applications existantes puissent les consommer. Voici plus d'informations sur les valeurs maximales d'identificateur de fichier :

  • Si l'application utilise un entier signé à 32 bits pour stocker l'identificateur de fichier, la valeur maximale que l'application peut traiter avant le débordement est 2147483647 (2**(31-1)).
  • Si l'application utilise un entier de 32 bits non signé pour stocker l'identificateur de fichier, la valeur maximale que l'application peut traiter avant le débordement est 4294967295 (2**(32-1)).
  • Si l'application utilise un nombre entier signé de 64 bits pour stocker l'identificateur de fichier, la valeur maximale que l'application peut traiter avant le débordement est 9223372036854775807 (2**(63-1))

Pour vérifier la taille des nouveaux ID fichier en cours de génération, ouvrez un terminal sur une instance connectée et exécutez la commande suivante :

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

Solution immédiate : Définissez le paramètre de noyau enable_ino64=0.

Le paramètre nfs.enable_ino64=0 indique au client NFS de retourner des numéros d'inode 32 bits pour les appels système readdir() et stat() (au lieu des numéros d'inode 64 bits complets).
Important

Cette solution nécessite un redémarrage de l'instance.
  1. Ouvrez une fenêtre de terminal sur l'instance en tant qu'utilisateur root et entrez la commande suivante pour vérifier le paramètre nfs.enable_ino64=0 courant.
    #  cat /sys/module/nfs/parameters/enable_ino64

    Le système doit retourner Y, indiquant que les inodes de 64 bits sont activés.

  2. Exécutez la commande suivante pour définir nfs.enable_ino64=0.
    echo "options nfs enable_ino64=0"  > /etc/modprobe.d/nfs.conf
  3. Redémarrez l'instance.
  4. Vérifiez que le paramètre est mis à jour à l'aide de la commande suivante :

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

    Le système doit retourner N, indiquant que les inodes de 64 bits sont désactivés et retournés à 32 bits.

  5. Vérifiez que le système de fichiers est monté sur l'instance ou montez-le. Voir Montage de systèmes de fichiers.

Solution intermédiaire : Créez un nouveau système de fichiers à utiliser avec votre application 32 bits existante. La suppression de fichiers du système de fichiers initial ne réinitialise pas la génération d'ID fichier à 0. Vous devez donc créer un nouveau système de fichiers pour recommencer avec de petits ID fichier. Rappelez-vous qu'après un certain temps, les ID fichier deviendront trop volumineux pour l'application 32 bits.

Note

Cette solution ne s'applique pas dans tous les cas, selon la nature de l'application et des fichiers qu'elle produit. Par exemple, si vous effectuez une actualisation des données qui copie des fichiers d'un système de fichiers de production vers un système de fichiers hors production, cette option fonctionnera. Cependant, pour les applications avec des systèmes de fichiers à croissance organique, cette option peut ne pas fonctionner.

Solution à long terme : Mettez à niveau votre application vers une version de 64 bits.