Arrêt de la lecture ou de l'écriture d'une application 32 bits dans un système de fichiers

Résolvez 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 arrête soudainement de lire ou d'écrire dans un système de fichiers. Les opérations de lecture/d'écriture échouent avec une erreur semblable à la suivante :

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 utiliser d'ID de fichier trop grand. Le service File Storage est conçu pour fonctionner avec des applications 64 bits. Les ID de fichier qu'il génère deviennent donc trop grands pour que les applications héritées puissent les utiliser. Voici plus d'informations sur les valeurs maximales d'identificateur de fichier :

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

Pour vérifier la taille des nouveaux ID de fichier générés, 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.

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

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

    Le système doit renvoyer Y, ce qui indique que les inodes 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 a été mis à jour à l'aide de la commande suivante :

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

    Le système doit renvoyer N, ce qui indique que les inodes 64 bits sont désactivés et renvoyés en 32 bits.

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

Solution intermédiaire : créez un système de fichiers à utiliser avec votre application 32 bits héritée. La suppression de fichiers du système de fichiers d'origine ne réinitialise pas sur 0 la génération de l'ID de fichier. Vous devez donc créer un autre système de fichiers pour recommencer avec de petits ID de fichier. N'oubliez pas qu'après un certain temps, les ID de fichier deviendront trop grands pour l'application 32 bits.

Remarque

Cette solution n'est pas applicable dans tous les cas. Tout dépend de la nature de l'application et des fichiers qu'elle génère. Par exemple, si vous effectuez une actualisation des données qui copie les fichiers d'un système de fichiers de production vers un système de fichiers autre que de production, cette option fonctionne. En revanche, pour les applications avec des systèmes de fichiers à croissance "naturelle", cette option peut ne pas fonctionner.

Solution à long terme : mettez à niveau l'application vers une version 64 bits.