L'applicazione a 32 bit interrompe la lettura o la scrittura in un file system
Risolvere l'errore di lettura/scrittura dell'applicazione a 32 bit in un file system.
Sintomo: dopo un periodo di funzionamento corretto, un'applicazione a 32 bit interrompe improvvisamente la lettura o la scrittura in un file system. Le operazioni di lettura/scrittura non riescono con un errore come:
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'applicazione potrebbe anche non avviarsi e rilevare errori come quelli riportati di seguito.
RCV: Value too large for defined data type
Causa: l'applicazione a 32 bit non può utilizzare ID file di dimensioni maggiori. Il servizio di storage di file è progettato per funzionare con le applicazioni a 64 bit, pertanto gli ID di file generati dallo storage di file diventano troppo grandi per l'utilizzo da parte delle applicazioni precedenti. Di seguito sono riportate ulteriori informazioni sui valori massimi dell'identificativo file.
- Se l'applicazione utilizza un numero intero a 32 bit firmato per memorizzare l'identificativo file, il valore massimo che l'applicazione può gestire prima dell'overflow è
2147483647 (2**(31-1))
. - Se l'applicazione utilizza un numero intero a 32 bit non firmato per memorizzare l'identificativo file, il valore massimo che l'applicazione può gestire prima dell'overflow è
4294967295 (2**(32-1))
. - Se l'applicazione utilizza un numero intero a 64 bit firmato per memorizzare l'identificativo file, il valore massimo che l'applicazione può gestire prima dell'overflow è
9223372036854775807 (2**(63-1))
Per controllare la dimensione dei nuovi ID di file generati, aprire un terminale in un'istanza connessa ed eseguire il comando seguente:
touch <File_Storage_mount_point>/test; ls -i <File_Storage_mount_point>/test
Soluzione immediata: impostare il parametro kernel enable_ino64=0
.
nfs.enable_ino64=0
indica al client NFS di restituire numeri inode a 32 bit per le chiamate di sistema readdir() e stat() (anziché i numeri inode a 64 bit completi).Questa soluzione richiede il riavvio di un'istanza.
- Aprire una finestra del terminale sull'istanza come utente
root
e digitare il comando seguente per verificare l'impostazionenfs.enable_ino64=0
corrente.# cat /sys/module/nfs/parameters/enable_ino64
Il sistema deve restituire
Y
, a indicare che gli inodi a 64 bit sono abilitati. - Eseguire il comando seguente per impostare
nfs.enable_ino64=0
.echo "options nfs enable_ino64=0" > /etc/modprobe.d/nfs.conf
- Reboot dell'istanza.
-
Verificare che l'impostazione sia stata aggiornata utilizzando il comando seguente:
# cat /sys/module/nfs/parameters/enable_ino64
Il sistema dovrebbe restituire
N
, indicando che gli inodi a 64 bit sono disabilitati e restituiti a 32 bit. - Verificare che il file system sia stato installato nell'istanza o eseguirne il MOUNT. Vedere Attivazione dei file system.
Soluzione intermedia: creare un nuovo file system da utilizzare con l'applicazione a 32 bit precedente. La rimozione dei file dal file system originale non ripristina la generazione degli ID file su 0, pertanto è necessario creare un nuovo file system per ricominciare con ID file di piccole dimensioni. Ricorda che dopo un certo periodo di tempo, gli ID file diventeranno troppo grandi per l'applicazione a 32 bit.
Questa soluzione non è applicabile in tutti i casi, a seconda della natura dell'applicazione e dei file prodotti. Ad esempio, se si esegue un aggiornamento dei dati che copia i file da un file system di produzione a un file system non di produzione, questa opzione potrebbe funzionare. Tuttavia, per le applicazioni con file system in crescita organica, questa opzione potrebbe non funzionare.
Soluzione a lungo termine: aggiornare l'applicazione a una versione a 64 bit.