32-Bit-Anwendung stoppt Lese- oder Schreibvorgang bei Dateisystem

Fehler bei Lese-/Schreibvorgang von 32-Bit-Anwendung bei Dateisystem beheben

Symptom: Nach einer Phase ordnungsgemäßer Funktion stoppt eine 32-Bit-Anwendung plötzlich das Lesen aus einem oder Schreiben in ein Dateisystem. Die Lese-/Schreibvorgänge sind nicht erfolgreich, und es wird ein Fehler wie der folgende ausgegeben:

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

Möglicherweise kann die Anwendung auch nicht gestartet werden, und es treten Fehler ähnlich dem folgenden auf:

RCV: Value too large for defined data type

Ursache: Die 32-Bit-Anwendung kann größere Datei-IDs nicht verarbeiten. Der File Storage-Service ist auf 64-Bit-Anwendungen ausgelegt, sodass die von File Storage erzeugten Datei-IDs zu groß für die Verarbeitung durch Legacy-Anwendungen werden. Weitere Informationen zu den Maximalwerten für Datei-IDs:

  • Wenn die Anwendung eine vorzeichenbehaftete 32-Bit-Ganzzahl zum Speichern der Datei-ID verwendet, ist der maximale Wert, den die Anwendung verarbeiten kann, bevor es zum Überlauf kommt, 2147483647 (2**(31-1)).
  • Wenn die Anwendung eine nicht vorzeichenbehaftete 32-Bit-Ganzzahl zum Speichern der Datei-ID verwendet, ist der maximale Wert, den die Anwendung verarbeiten kann, bevor es zum Überlauf kommt, 4294967295 (2**(32-1)).
  • Wenn die Anwendung eine vorzeichenbehaftete 64-Bit-Ganzzahl zum Speichern der Datei-ID verwendet, ist der maximale Wert, den die Anwendung verarbeiten kann, bevor es zum Überlauf kommt, 9223372036854775807 (2**(63-1))

Um die Größe der neu erzeugten Datei-IDs zu prüfen, öffnen Sie auf einer verbundenen Instanz ein Terminal, und führen Sie den folgenden Befehl aus:

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

Sofortige Lösung: Setzen Sie den Kernel-Parameter enable_ino64=0.

Wenn Sie nfs.enable_ino64=0 setzen, wird der NFS-Client angewiesen, für readdir()- und stat()-Systemaufrufe 32-Bit-inode-Nummern zurückzugeben (anstelle der vollständigen 64-Bit-inode-Nummern).
Wichtig

Für diese Lösung ist ein Neustart der Instanz erforderlich.
  1. Öffnen Sie auf der Instanz als root-Benutzer ein Terminalfenster, und geben Sie den folgenden Befehl ein, um die aktuelle Einstellung nfs.enable_ino64=0 zu prüfen.
    #  cat /sys/module/nfs/parameters/enable_ino64

    Das System muss Y zurückgeben, was anzeigt, dass 64-Bit-Inodes aktiviert sind.

  2. Führen Sie den folgenden Befehl aus, um nfs.enable_ino64=0 zu setzen.
    echo "options nfs enable_ino64=0"  > /etc/modprobe.d/nfs.conf
  3. Starten Sie die Instanz neu.
  4. Prüfen Sie mit dem folgenden Befehl, ob die Einstellung aktualisiert wurde:

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

    Das System muss N zurückgeben, was anzeigt, dass 64-Bit-Inodes deaktiviert sind und wieder 32-Bit-Inodes verwendet werden.

  5. Prüfen Sie, ob das Dateisystem auf der Instanz gemountet ist, oder mounten Sie das Dateisystem. Weitere Informationen dazu finden Sie unter Dateisysteme mounten.

Zwischenlösung: Erstellen Sie ein neues Dateisystem zur Verwendung mit Ihrer 32-Bit-Legacy-Anwendung. Auch wenn Sie Dateien aus dem ursprünglichen Dateisystem entfernen, beginnt die Datei-ID-Erstellung nicht wieder bei 0. Daher müssen Sie ein neues Dateisystem erstellen, um wieder bei kleinen Datei-IDs zu beginnen. Bedenken Sie, dass die Datei-IDs nach einer bestimmten Zeit wieder zu groß für die 32-Bit-Anwendung werden.

Hinweis

Diese Lösung ist je nach Anwendungsart und den erstellten Dateien nicht in allen Fällen anwendbar. Beispiel: Wenn Sie eine Datenaktualisierung durchführen, bei der Dateien aus einem Produktionsdateisystem in ein Nicht-Produktionsdateisystem kopiert werden, funktioniert diese Option. Für Anwendungen mit organisch wachsenden Dateisystemen funktioniert diese Option jedoch möglicherweise nicht.

Langfristige Lösung: Führen Sie ein Upgrade Ihrer Anwendung auf eine 64-Bit-Version durch.