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
.
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).Für diese Lösung ist ein Neustart der Instanz erforderlich.
- Öffnen Sie auf der Instanz als
root
-Benutzer ein Terminalfenster, und geben Sie den folgenden Befehl ein, um die aktuelle Einstellungnfs.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. - 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
- Starten Sie die Instanz neu.
-
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. - 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.
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.