32-Bit Application Stops Reading or Writing to a File System
Troubleshoot 32-bit application read/write failure on a file system.
Symptom: After a period of functioning correctly, a 32-bit application suddenly stops reading or writing to a file system. The read/write operations fail with an error such as:
Applications fail to install on FSS mount point: "Value too large for defined data type" - OCI FSS/Mount Target Resources (Doc ID 2672465.1)
The application might also fail to start and encounter errors like the following:
RCV: Value too large for defined data type
Cause: The 32-bit application cannot consume larger file IDs. The File Storage service is designed to work with 64-bit applications, so the file IDs generated by File Storage become too large for legacy applications to consume. More information on file identifier maximum values follows:
- If the application uses a signed 32-bit integer to store the file identifier, then the maximum value that the application can handle before overflow is
2147483647 (2**(31-1))
. - If the application uses an unsigned 32-bit integer to store the file identifier, then the maximum value that the application can handle before overflow is
4294967295 (2**(32-1))
. - If the application uses a signed 64-bit integer to store the file identifer, then the maximum value that the application can handle before overflow is
9223372036854775807 (2**(63-1))
To check the size of new file IDs being generated, open a terminal on a connected instance, and run the following command:
touch <File_Storage_mount_point>/test; ls -i <File_Storage_mount_point>/test
Immediate solution: Set the kernel parameter enable_ino64=0
.
nfs.enable_ino64=0
instructs the NFS client to return 32-bit inode numbers for readdir() and stat() system calls (instead of the full 64-bit inode numbers).This solution requires an instance reboot.
- Open a terminal window on the instance as the
root
user and type the following command to verify the currentnfs.enable_ino64=0
setting.# cat /sys/module/nfs/parameters/enable_ino64
The system should return
Y
, indicating that 64-bit inodes are enabled. - Run the following command to set
nfs.enable_ino64=0
.echo "options nfs enable_ino64=0" > /etc/modprobe.d/nfs.conf
- Reboot the instance.
-
Verify that the setting is updated using the following command:
# cat /sys/module/nfs/parameters/enable_ino64
The system should return
N
, indicating that 64-bit inodes are disabled and returned to 32-bit. - Verify that the file system is mounted to the instance, or mount the file system. See Mounting File Systems.
Intermediate solution: Create a new file system to use with your legacy 32-bit application. Removing files from the original file system does not reset the file ID generation back to 0, so you must create a new file system to start again with small file IDs. Remember that after a certain amount of time, file IDs will become too large for the 32-bit application.
This solution isn't applicable in all cases, depending on the nature of the application and the files it produces. For example, if you are performing a data refresh that copies files from a production file system to a non-production file system, this option would work. However, for applications with organically growing file systems, this option may not work.
Long-term solution: Upgrade your application to a 64-bit version.