AI & Agents

NFS File Size Limit: Protocol Versions, Mount Constraints, and Distributed Workflows

The NFS file size limit varies by protocol version: legacy NFSv2 is capped at 2 GB by 32-bit signed offsets, while NFSv3 and NFSv4 support theoretical file sizes up to 8 EiB using 64-bit offsets. Practical boundaries depend on host filesystems, mount buffer settings, and network stability. Resolving multi-gigabyte transfer failures requires tuning mount parameters and addressing concurrency bottlenecks.

Derek Labian 29 min read Updated
Comparing 32-bit and 64-bit NFS protocol file size limits, buffer parameters, and distributed mount constraints.

Why NFS Protocol Versions Dictate File Size Limits

When an application attempts to write beyond 2,147,483,647 bytes on an NFSv2 mount, the Linux kernel halts the operation and returns an EFBIG error ("File too large") because the 32-bit signed integer offset wraps into negative values. While RFC 1813 (NFSv3) and RFC 7530 (NFSv4) expanded offsets to 64-bit unsigned integers to support theoretical file sizes up to 8 exbibytes (EiB), multi-gigabyte file transfers in production environments routinely stumble across lower ceilings imposed by underlying host filesystems, network buffer negotiation, and distributed lock contention. Understanding protocol boundaries and operational constraints is essential for systems engineers and distributed computing teams managing large datasets across network mounts.

The 2 GB Barrier in NFSv2 (RFC 1094)

Defined in RFC 1094 in March 1989, NFS version 2 represents the foundation of network file sharing on Unix systems. Under the NFSv2 specification, all file offsets and length attributes within External Data Representation (XDR) structures are defined as signed 32-bit integers (int32).

Under legacy protocol specifications, because 32-bit signed integers allocate one bit for sign representation, the maximum addressable file offset limit is 2,147,483,647 bytes (2 GB minus 1 byte). When a client process issues a write RPC call targeting an offset beyond this legacy boundary, the offset arithmetic wraps into negative numbers. The NFSv2 server interprets this negative offset as invalid, immediately aborting the call and returning the protocol error NFSERR_FBIG (mapped in POSIX systems to EFBIG: File too large).

Beyond this 2 GB protocol boundary, NFSv2 transfers are constrained by packet buffer limits. The specification restricts read and write payloads to a maximum of 8,192 bytes (8 KB) per RPC packet over UDP. Attempting to transfer multi-gigabyte payloads across an 8 KB UDP pipe results in severe packet fragmentation, packet loss on congested switches, and frequent transfer timeouts.

64-Bit Offsets and File Size Expansion in NFSv3 (RFC 1813)

To eliminate the structural limitations of NFSv2, the Internet Engineering Task Force (IETF) published RFC 1813 in June 1995, defining the NFS version 3 protocol. The primary architectural advancement in NFSv3 is the transition from 32-bit to 64-bit data types for all file sizes, file allocations, and byte offsets.

In RFC 1813, file offsets (offset64) and file lengths (size64) use 64-bit unsigned integers (uint64), expanding the theoretical maximum file size from 2 GB to $2^{64} - 1$ bytes (16 EiB). In practical POSIX implementations, because operating system kernel system calls rely on signed 64-bit offsets, the usable upper boundary under the NFS protocol is $2^{63} - 1$ bytes, which equals 9,223,372,036,854,775,807 bytes (approximately 8 exbibytes or 8 EiB).

NFSv3 also introduced the FSINFO RPC procedure. When a client mounts an export, it invokes FSINFO to query the server's operational limits. The server responds with parameters including rtmax (maximum read transfer size), wtmax (maximum write transfer size), and maxfilesize. As defined in RFC 1813: "The maxfilesize field determines whether a server's particular file system uses 32 bit sizes and offsets or 64 bit file sizes and offsets." NFSv3 also introduced asynchronous writes, allowing clients to send UNSTABLE write requests followed by a COMMIT RPC to verify that dirty blocks are flushed to non-volatile storage.

NFSv4 Protocol Architecture and Minor Version Enhancements

NFS version 4 represents a major redesign of the protocol, documented in RFC 3010, RFC 3530, and RFC 7530. Unlike its predecessors, which operated as stateless protocols accompanied by auxiliary sidecar daemons (mountd, statd, lockd), NFSv4 is a stateful protocol operating over a single designated TCP port (port 2049).

In the NFSv4 specification, file size capabilities remain anchored to 64-bit unsigned integer data types. The server advertises its maximum supported file size via Attribute 27 (maxfilesize), defined as a read-only uint64_t. The theoretical protocol limit remains 8 EiB, with minor versions providing specialized capabilities:

  • NFSv4.0 (RFC 7530): Batches operations into compound RPC procedures and integrates byte-range locking directly into the core protocol using client leases, replacing the external Network Lock Manager (NLM).
  • NFSv4.1 and Parallel NFS (RFC 5661): Decouples metadata management from data storage via pNFS, striping file blocks across multiple Data Servers for parallel high-throughput transfers.
  • NFSv4.2 (RFC 7862): Adds Server-Side Copy (SSC) to duplicate multi-gigabyte files directly on the storage server without client network transit, alongside sparse file support (SEEK_DATA, SEEK_HOLE).

NFS Protocol Version Comparison

The following table compares specifications, offset widths, default network behaviors, and operational ceilings across all major NFS protocol versions:

Protocol Version RFC Specification Theoretical File Size Limit Offset Width Default Transport Primary Practical Bottleneck
NFSv2 RFC 1094 2 GB ($2^{31} - 1$ bytes) 32-bit signed UDP (Port 2049/RPC) 32-bit integer overflow; 8 KB packet buffers
NFSv3 RFC 1813 8 EiB ($2^{63} - 1$ bytes) 64-bit unsigned TCP or UDP Underlying server filesystem; NLM lock freezes
NFSv4.0 RFC 7530 8 EiB ($2^{63} - 1$ bytes) 64-bit unsigned TCP (Port 2049) Single-server network pipe; lease renewal drops
NFSv4.1 (pNFS) RFC 5661 8 EiB ($2^{63} - 1$ bytes) 64-bit unsigned TCP (Port 2049) Data server striping limits; storage fabric latency
NFSv4.2 RFC 7862 8 EiB ($2^{63} - 1$ bytes) 64-bit unsigned TCP (Port 2049) Host filesystem inode limits; storage array capacity

While NFSv3, NFSv4.1, and NFSv4.2 provide identical 8 EiB theoretical protocol limits, the operational experience differs based on transport handling, state management, and underlying filesystem support.

How Underlying Host Filesystems Constrain NFS Transfer Sizes

The NFS protocol defines only the network wire format and communication contract between client and server. An NFS server cannot create or store a file larger than what its local operating system and physical storage filesystem permit. When a client application sends an NFS WRITE RPC to append data to a file, the server-side kernel daemon (nfsd) translates that request into a standard local POSIX system call (write() or pwrite64()) against the host filesystem. If the backend storage volume uses a filesystem that enforces lower capacity boundaries, client write requests fail as soon as that local filesystem boundary is reached. Understanding host filesystem ceilings prevents unexpected transfer failures.

Local Filesystem Ceilings: ext4, XFS, ZFS, and Btrfs

When designing high-capacity NFS storage servers, the choice of local filesystem directly dictates the maximum supported file size:

  • ext4 (Fourth Extended Filesystem): Under underlying server storage limits, although the ext4 filesystem volume can span up to 1 EiB using 48-bit block addressing, individual inode block mappings restrict maximum file size to 16 TiB. On standard Linux deployments using the default 4 KiB block size, ext4 block count fields are restricted to 32 bits ($2^{32} \times 4096\text{ bytes} = 16\text{ TiB}$). Attempting to write a 17 TiB file to an NFS export formatted with ext4 causes the server kernel to return EFBIG or ENOSPC, regardless of whether NFSv3 or NFSv4 is mounted.
  • XFS: Developed for high-performance computing, XFS uses 64-bit block addressing throughout its B-tree allocation structures, supporting a theoretical maximum file size of 8 EiB ($2^{63} - 1$ bytes) and a volume capacity of 8 EiB. Because of its scalability and parallel I/O throughput, XFS is the standard default filesystem in enterprise distributions like Red Hat Enterprise Linux and Rocky Linux for NFS exports.
  • ZFS: OpenZFS implements 128-bit storage addressing, providing theoretical file size boundaries reaching 16 EiB ($2^{64}$ bytes) alongside copy-on-write integrity.
  • Btrfs: Btrfs uses 64-bit addressing and copy-on-write trees, supporting file sizes up to 16 EiB and filesystem capacities up to 16 EiB.

The following table summarizes the maximum file and volume sizes across common underlying server filesystems:

Filesystem Max Individual File Size Max Volume Capacity Default Block Size Allocation Architecture
ext4 16 TiB 1 EiB 4 KiB Extent trees with 48-bit block addressing
XFS 8 EiB 8 EiB 4 KiB Allocation Groups with 64-bit B+ trees
OpenZFS 16 EiB 256 ZiB Variable (128 KiB recordsize) 128-bit Merkle tree with pooled vdevs
Btrfs 16 EiB 16 EiB 4 KiB Copy-on-write B-trees

Client-Side Virtual File System (VFS) and 32-Bit System Boundaries

Even when the NFS server runs a 64-bit operating system with an XFS filesystem supporting exabyte-scale files, client-side application constraints can prevent large files from being written or read.

When a legacy 32-bit client utility attempts to query metadata on a dataset of 5 GB across an NFS mount using the standard stat system call, the operating system kernel returns an EOVERFLOW error ("Value too large for defined data type"). In 32-bit POSIX architectures, the system type off_t is defined as a signed 32-bit integer, capping file seeks and sizes at 2,147,483,647 bytes. The file exists on the NFS server, but the client process cannot represent the file size in its allocated memory structures.

To interact with files larger than 2 GB over NFS, 32-bit Linux binaries must be compiled with Large File Support (LFS) flags enabled:

gcc -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE application.c -o application

These macros instruct glibc to redefine off_t as a 64-bit signed integer (off64_t) and map calls like open(), lseek(), and stat() to their 64-bit counterparts (open64(), lseek64(), stat64()). On modern 64-bit Linux distributions (x86_64, aarch64), off_t defaults to 64 bits, allowing modern applications to interact with multi-terabyte NFS files natively.

Export Configuration Parameters and Quota Limits

Server administrators frequently set operational boundaries in /etc/exports that impact file processing and throughput.

A critical export parameter is no_subtree_check. By default, older NFS servers performed subtree verification to confirm that an accessed file remained within the exported directory hierarchy. On exports containing large directory trees or multi-terabyte files, subtree checking adds latency to file handle lookups and can cause transfer stalls if files are renamed during an active transfer. Setting no_subtree_check in /etc/exports disables this overhead:

/data/exports/models *(rw,sync,no_subtree_check,no_root_squash)

When an NFS storage mount server enforces user quotas (usrquota), group quotas (grpquota), or project quotas (prjquota), an application attempting to write a 100 GB archive across that mount will fail mid-transfer. The client application receives an EDQUOT error ("Disk quota exceeded") or ENOSPC ("No space left on device"). In unmonitored automated jobs, this failure is often misdiagnosed as an NFS protocol ceiling.

How to Tune Mount Options and Network Buffers for Large Files

Sustaining high transfer rates for multi-gigabyte files across NFS mounts requires configuring client mount parameters to maximize network socket utilization. Even though NFSv3 and NFSv4 support multi-exabyte files on paper, poor buffer configurations cause large file transfers to crawl, drop packets, or abort due to client-side RPC timeouts. When transferring a 50 GB dataset, machine learning checkpoint, or raw media archive, the interaction between network packet size, client-side buffer limits, and retry semantics determines whether the transfer completes cleanly or fails midway through execution. Properly tuning buffer sizes, mount durability, and network frame parameters prevents unnecessary transfer failures and maximizes throughput.

Tuning rsize and wsize for Multi-Gigabyte Payloads

The rsize and wsize mount options define the maximum chunk size of data transmitted in each individual NFS READ and WRITE network RPC request between client and server.

In the Linux nfs(5) manual page, the parameter wsize is defined as: "The maximum number of bytes per network WRITE request that the NFS client can send when writing data to a file on an NFS server." The manual notes: "The largest write payload supported by the Linux NFS client is 1,048,576 bytes (one megabyte)."

Historically, older Linux kernels and legacy Unix environments defaulted to conservative values such as 8,192 bytes (8 KiB) or 32,768 bytes (32 KiB). The impact on multi-gigabyte transfers is substantial:

  • 8 KiB wsize buffer: To write a 50 GB dataset requires 6,553,600 individual round-trip RPC calls across the network. Each call incurs kernel context switches, RPC header serialization, and TCP acknowledgment overhead.
  • 1 MiB wsize buffer: Using the maximum write payload of 1,048,576 bytes, transferring that same 50 GB dataset requires only 51,200 RPC calls across the network. This represents a massive reduction in network RPC transaction count, allowing client write buffers and storage controllers to operate at full wire speed.

When mounting an NFS share, modern Linux clients automatically attempt to negotiate the largest rsize and wsize supported by both the client kernel and the server. To verify the active negotiated buffer sizes for a mounted NFS export, inspect /proc/mounts:

cat /proc/mounts | grep nfs

If the active rsize or wsize displays 32768 or 65536 on a modern 10GbE network, explicitly configure the mount command to request 1 MiB buffers:

mount -t nfs -o rw,nfsvers=4.2,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 nas.internal.net:/data /mnt/storage

Hard Mounts Versus Soft Mounts: Protecting Large Transfers

The choice between hard and soft mount options is critical when moving large files across distributed systems.

  • Soft Mounts (soft): If an NFS request fails to receive a server acknowledgment within the specified timeout (timeo), the client kernel retransmits the request up to the limit defined by retrans. If the server still does not respond, the client gives up and immediately returns an I/O error (EIO) to the calling application process. On multi-gigabyte file transfers, temporary network latency spikes, switch failovers, or storage controller flush delays can easily exceed the timeo window. When this occurs on a soft mount, the file write aborts abruptly, resulting in truncated archives, corrupted container layers, or unreadable database backups.
  • Hard Mounts (hard): With a hard mount, the client kernel retries unacknowledged RPC requests indefinitely until the server responds. The client process goes into uninterruptible sleep state (D state in Linux process tables) during a network outage, but resumes writing cleanly without data loss once network connectivity returns.

For production storage hosting multi-gigabyte or multi-terabyte files, always specify hard mounts with timeo=600 (60 seconds) and retrans=2.

MTU Sizing, Jumbo Frames, and TCP Windowing

A 1 MiB (1,048,576 byte) NFS write payload cannot fit into a single network packet. Standard Ethernet infrastructure enforces a Maximum Transmission Unit (MTU) of 1,500 bytes. When sending a 1 MiB payload over TCP across a standard MTU network, the Linux networking stack fragments the payload into roughly 700 individual TCP packets.

On dedicated enterprise networks and storage fabrics, configuring Jumbo Frames (MTU 9,000) improves large-file transfer performance:

  • Standard MTU (1,500 bytes): Generates ~700 packets per 1 MiB RPC payload, requiring frequent interrupt handling on both client and server CPUs.
  • Jumbo Frames (9,000 bytes): Configuring Jumbo Frames with 9000 bytes delivers write payload chunks across the network with reduced protocol processing overhead, transmitting data in roughly 118 packets per 1 MiB RPC.

To use Jumbo Frames effectively, the 9,000 MTU setting must be configured end-to-end: on the client NIC, all intermediate network switches, and the NFS storage server NIC.

In addition, tune the Linux TCP buffer memory parameters in /etc/sysctl.conf to prevent TCP window exhaustion on high-bandwidth links:

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432

These parameters allow the TCP sliding window to scale up to 32 MB, ensuring that multi-gigabyte file streams fully use available network bandwidth without artificial flow-control stalls.

Fastio features

Eliminate NFS Transfer Bottlenecks in Distributed Agent Workspaces

Move beyond kernel mount timeouts and locking freezes with Fast.io shared workspaces. Connect agents via the Model Context Protocol at mcp.fast.io and manage files up to 100 GB on Enterprise with built-in indexing and per-file version history. Monthly plans start with a 14-day free trial that requires a credit card.

Why Distributed Workflows Fail: ESTALE, Lock Freezes, and Split-Brain States

Competitor documentation often recites the theoretical 8 EiB specification without examining the operational failures that disrupt distributed systems in production. In high-concurrency environments, multi-gigabyte transfers rarely fail because someone attempted to create a 9 exbibyte file. Failures occur because of distributed state anomalies, file handle invalidation, and locking deadlocks. Diagnosing and mitigating these failure modes is essential for maintaining resilient data pipelines across distributed clusters. Understanding how file handles, lock managers, and caching consistency interact reveals the hidden limits of network storage mounts under real-world operational stress. When automated worker swarms concurrently read and write shared data volumes, network mounts require careful architectural isolation to prevent cascading pipeline outages.

Stale File Handles (ESTALE) During Large File Processing

One of the most persistent errors encountered in distributed NFS environments is ESTALE (POSIX Error 116: "Stale file handle").

In NFS, the client does not reference files by file path during active I/O. Instead, the server issues an opaque file handle containing the filesystem identifier (fsid), the internal inode number, and an inode generation number. The generation number is an incrementing counter managed by the server filesystem to detect when an inode has been recycled after file deletion.

When distributed processes work with multi-gigabyte files, ESTALE occurs in several common scenarios:

  1. Atomic File Overwrites: A distributed pipeline client worker opens a 20 GB checkpoint across the network mount and begins reading blocks. Simultaneously, an upstream ingestion process downloads an updated version of the file to a temporary location and executes an atomic replacement: mv dataset_tmp.tar.gz dataset.tar.gz. The local filesystem unlinks the old file and assigns a new inode or increments the generation counter for the filename. When the reading worker issues its next READ RPC using its existing file handle, the NFS server cannot locate the original inode generation and returns NFSERR_STALE.
  2. Server Snapshot Restores: If a storage administrator rolls back an underlying ZFS or NetApp volume snapshot to recover from an error, the filesystem generation numbers revert to an earlier state. Every client holding open file handles across the mount immediately throws ESTALE errors.
  3. Client Directory Cache Drift: When files are deleted on the server by external processes, client directory attribute caches (acdirmin, acdirmax) may continue serving the deleted file's metadata for up to 60 seconds, leading processes to attempt opening handles that no longer exist on the server.

To avoid ESTALE in automated data pipelines, worker processes should write updates to uniquely versioned file paths rather than performing in-place replacements on active shared files.

NLM Lock Daemon Freezes in NFSv3 Versus Lease State in NFSv4

File locking is necessary when multiple distributed workers coordinate writes to shared files. However, the locking implementation in NFSv3 introduces substantial operational risk.

NFSv3 relies on the external Network Lock Manager (NLM) protocol and the Network Status Monitor (rpc.statd) daemon. Because NFSv3 is stateless, the NLM daemon attempts to maintain lock tracking outside the core file protocol:

  • The NFSv3 Lock Freeze: If a worker node acquires an exclusive write lock on a 100 GB database archive and experiences a network partition, kernel panic, or container crash, the NLM daemon on the storage server remains unaware of the client's failure. The server retains the exclusive lock indefinitely. Other distributed workers attempting to acquire the lock freeze in uninterruptible sleep state (D state), halting the entire pipeline until an administrator manually clears the lock or restarts the lock service.
  • The NFSv4 Lease Recovery Mechanism: NFSv4 resolves this vulnerability by integrating byte-range locking directly into the core stateful protocol. In NFSv4, all locks are governed by time-bounded client leases (typically defaulting to 90 seconds). The client must periodically renew its lease by sending compound RPC operations to the server. If a client crashes or loses network connectivity, the server detects lease expiration, enters a designated grace period, and automatically releases the orphaned locks.

For any distributed workflow that requires concurrent read and write operations, NFSv4 is necessary to prevent unrecoverable lock freezes.

Close-to-Open Cache Inconsistency and Buffer Flushing

NFS enforces a relaxed cache coherency model known as "close-to-open" consistency.

Under close-to-open consistency:

  1. When a client process opens a file (open()), the client kernel checks the file's modification timestamp against the server to determine whether its local page cache is fresh or needs invalidation.
  2. While the file is open, writes are cached in the client's local memory buffers.
  3. When the client closes the file (close()), the client kernel flushes all dirty memory pages across the network to the server and waits for write confirmations.

This model creates severe performance and consistency challenges for multi-gigabyte files:

  • Close Delays: When a process writes a 30 GB dataset and calls close(), the close() system call blocks until all 30 GB of dirty pages in the client's RAM are transmitted over the network and acknowledged by the server. If the network interface is saturated, the close() call can block for minutes, causing application-level health checks or container liveness probes to fail.
  • Intermediate Read Hazards: If a secondary worker node on another machine opens the file before the first worker's close() system call completes, the secondary node reads incomplete data. The secondary node does not receive an error; it simply reads a truncated file because the dirty blocks have not yet flushed to the server.

Mounting with noac (no attribute cache) or actimeo=0 forces the client to bypass memory caching and send writes synchronously. However, this degrades file write throughput severely, creating an unavoidable compromise between data consistency and network throughput.

Why AI Agent Swarms Overwhelm Shared NFS Mounts

Modern data pipelines, machine learning training clusters, and autonomous AI agent swarms present severe challenges for NFS architectures. When dozens or hundreds of distributed workers (such as autonomous coding agents, data processing scripts, or model fine-tuning nodes) concurrently access shared datasets, log files, or model weights, traditional NFS mounts break down under concurrency pressure. Understanding why NFS struggles with modern multi-agent workflows clarifies why engineering teams are adopting dedicated workspace platforms. The mismatch between POSIX filesystem assumptions and autonomous agent concurrency models creates operational friction that network tuning alone cannot solve. Transitioning to dedicated collaboration platforms removes local mount fragility while providing structured coordination layers for agent swarms.

How Concurrent Agent Writes Trigger Silent Overwrites and Lock Deadlocks

Autonomous AI agents operating across distributed containers or cloud instances often attempt to record intermediate reasoning traces, generated code artifacts, or dataset partitions to a shared directory. In an NFS setup, concurrent non-atomic writes produce corrupted records, overlapping block writes, and lock contention.

If multiple agents attempt to append outputs to a shared summary file, standard POSIX append operations (O_APPEND) are not atomic across NFS. Because each client maintains its own cached view of the file size and end-of-file offset, concurrent writes from different nodes overwrite each other's data blocks silently.

Furthermore, if agents employ advisory POSIX file locks via fcntl() to serialize writes, high lock contention across dozens of workers halts agent execution loops. An agent waiting for an NFS lock can exceed its execution timeout, causing the parent orchestration framework to terminate the container and leave orphaned locks behind.

Metadata Bottlenecks and Attribute Storms

Autonomous agents make frequent filesystem status queries: checking directory listings, inspecting file timestamps, verifying file existence, and reading metadata headers. In a swarm of 50 agents executing concurrently, these queries generate millions of GETATTR, LOOKUP, and ACCESS RPC calls per minute.

This metadata storm exhausts the NFS server thread pool (nfsd). The server spends its CPU cycles validating file attributes rather than streaming bulk data, causing latency spikes and worker timeouts across the entire cluster. Even with aggressive directory caching, cache validation overhead degrades performance.

Decoupling Agent Storage from OS Network Mounts with Fast.io

Engineering teams managing high-concurrency agent workflows frequently transition away from fragile operating system mounts toward API-driven cloud workspaces. While local disk storage or object stores like Amazon S3 or Google Drive provide basic persistence, they lack native collaborative intelligence and multi-agent coordination capabilities.

Fast.io provides a purpose-built platform with shared workspaces designed for agentic teams. Rather than managing complex /etc/fstab parameters, kernel RPC daemons, and NFS export permissions, teams coordinate files through programmatic APIs and the Model Context Protocol (MCP).

Fast.io eliminates the failure modes of legacy NFS mounts while supporting massive file transfers:

  • Substantial File Size Limits: Fast.io workspace storage supports single-file uploads up to 25 GB on Starter, 50 GB on Business, and 100 GB on Enterprise, accommodating massive datasets, model weights, and media archives.
  • Advisory Per-File Leases: Fast.io provides advisory per-file leases in workspace storage acquired and released through MCP actions: lock-acquire and lock-release on the storage_manage tool, and lock-status on the storage tool. Locks expire automatically unless heartbeated, other members can observe who holds a lease, and concurrent writes land safely because per-file version history preserves every revision without destructive overwriting.
  • Built-in Intelligence Mode: When Intelligence Mode is enabled on a workspace, files are indexed upon arrival for semantic search, full-text search, and structured metadata extraction. Agents query documents directly with citations instead of streaming hundreds of gigabytes across network sockets to locate specific records.
  • Detailed Activity Log: Workspaces track changes to files, permissions, and shares in a detailed activity log, recording uploads, edits, moves, and deletions without logging passive views or downloads.
  • Events Feed: Agents subscribe to workspace activity over WebSocket or long-polling, reacting immediately when files change without generating metadata polling storms.
  • Cloud Sync and Import: Teams can import files directly from Google Drive, Dropbox, Box, and OneDrive, plus import from a URL without consuming local bandwidth. Scheduled or on-demand Cloud Sync is available for Google Drive, Dropbox, Box, and OneDrive (one-way or two-way).

AI agents connect directly to Fast.io via the Model Context Protocol (MCP) using Streamable HTTP. See the Fast.io MCP setup guide for client instructions. Connection endpoints include:

  • https://mcp.fast.io/mcp/tools for Claude desktop, mobile, web, and general client applications.
  • https://mcp.fast.io/mcp/code for coding agents like Claude Code, Cursor, Cline, and terminal environments.
  • https://mcp.fast.io/mcp/operations for custom ChatGPT and Codex configurations (with the Fastio plugin preferred).

The following table details available plans and capacities:

Plan Price Included Storage and Workspaces Monthly Credits Maximum Upload
Starter $9.99/mo 3 seats, 250 GB, 5 workspaces 100,000 credits 25 GB upload
Business $49.99/mo 10 seats, 5 TB, 50 workspaces 600,000 credits 50 GB upload
Enterprise $199.99/mo 30 seats included (extra seats $1/mo up to 200), 25 TB, 200 workspaces 3,000,000 credits 100 GB upload

Monthly plans start with a 14-day free trial that requires a credit card. Review options on the pricing page or explore storage for agents.

How to Configure and Troubleshoot High-Capacity NFS Mounts

For environments that rely on native Linux NFS mounts for local infrastructure or high-performance compute clusters, proper configuration and diagnostic practices are critical. Understanding how to interpret error codes and configure /etc/fstab prevents unexpected job terminations. When transfers fail or throughput drops, systematic troubleshooting separates client buffer misconfigurations from server-side filesystem constraints. Following established diagnostic procedures ensures rapid resolution of storage bottlenecks across enterprise clusters. By applying verified mount parameters and monitoring kernel RPC counters, administrators can maximize network file transfer reliability while preparing distributed architectures for modern multi-agent scale. Establishing clear monitoring baselines and tuning mount parameters allows engineering teams to identify network stalls before they impact mission-critical production jobs.

Diagnostic Workflow for File Size and Transfer Errors

When an application reports an I/O error during a large file transfer over NFS, use the following systematic diagnostic process:

  1. EFBIG (File too large):
    • Check the active NFS protocol version: cat /proc/mounts | grep nfs. If vers=2 is reported, unmount and remount with vers=4.2 or vers=3.
    • Verify whether the calling binary is 32-bit: file /path/to/binary. If 32-bit, recompile with -D_FILE_OFFSET_BITS=64.
    • Check backend server filesystem: verify whether the export resides on ext4, and whether the file has reached the 16 TiB ext4 boundary.
  2. ENOSPC (No space left on device) and EDQUOT (Disk quota exceeded):
    • Check disk space and inode counts on the server: df -hT /export and df -i /export. An exhausted inode table returns ENOSPC even when gigabytes of free disk blocks remain.
    • Check user or project quotas on the server: quota -u username or xfs_quota -c 'report' /export.
  3. EIO (Input/output error) or ETIMEDOUT (Connection timed out):
    • Inspect mount options: verify that the share is mounted with hard, not soft.
    • Examine client RPC statistics: run nfsstat -c to review retransmission counts (retrans) and timeout spikes.
    • Examine server RPC statistics: run nfsstat -s to check if nfsd thread pools are saturated.
  4. ESTALE (Stale file handle):
    • Verify whether another process unlinked, rotated, or atomically replaced the active file.
    • Check if the server exported filesystem was unmounted, rebooted, or rolled back to an earlier storage snapshot.

To configure a production-ready, high-throughput NFSv4.2 mount on Linux endpoints, add the following entry to /etc/fstab:

storage.internal.net:/exports/data /mnt/data nfs4 rw,nfsvers=4.2,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,sec=sys,proto=tcp,_netdev 0 0

Key configuration parameters in this entry include:

  • rw: Mounts the filesystem with read and write privileges.
  • nfsvers=4.2: Forces NFS version 4.2, unlocking Server-Side Copy, sparse files, and integrated lease locking.
  • rsize=1048576 and wsize=1048576: Sets network read and write payload buffers to 1 MiB, minimizing RPC overhead for multi-gigabyte transfers.
  • hard: Enforces indefinite retries on network interruptions, preventing data truncation.
  • timeo=600: Sets the RPC timeout to 60 seconds (600 tenths of a second) before initiating retransmissions.
  • retrans=2: Specifies two minor retransmissions before issuing a major timeout warning.
  • proto=tcp: Mandates TCP transport for reliable stream reassembly.
  • _netdev: Instructs the operating system to delay mounting until the network subsystem is fully initialized during system boot.

Architectural Decision Framework: NFS Versus Cloud Workspaces

The following decision matrix helps engineering teams determine when to maintain enterprise NFS infrastructure versus when to adopt modern cloud workspaces:

Operational Dimension Enterprise NFSv4.2 Architecture Fast.io Intelligent Workspaces
Primary Workload High-performance computing (HPC), raw VM disk storage, low-latency LAN clusters Distributed AI agent swarms, team document collaboration, cross-cloud data pipelines
Maximum File Size Up to 8 EiB (bounded by host filesystem: 16 TiB on ext4, 8 EiB on XFS) Up to 100 GB per file on Enterprise plan
Network Fabric Dedicated 10GbE/100GbE local network, InfiniBand, Jumbo Frames Public Internet, WAN, HTTPS, Streamable HTTP
Concurrency & Locking POSIX byte-range locks, lease timeouts, lock contention bottlenecks Advisory per-file leases via MCP, automatic per-file version history
Content Intelligence Raw passive storage; requires external indexers and vector databases Built-in Intelligence Mode; auto-indexed RAG and semantic search with citations
Client Footprint Kernel mount drivers, root /etc/fstab privileges, fixed VPNs Remote MCP endpoint, OAuth or Bearer API keys, zero OS mount dependencies
Change Tracking Local filesystem access times; no central activity auditing Detailed activity log tracking file edits, moves, uploads, and deletions

For localized clusters requiring microsecond POSIX I/O, NFSv4.2 on XFS remains a viable choice. For distributed teams and AI agents requiring collaborative access, version tracking, and content search, cloud workspaces provide a resilient and scalable alternative.

Sources

References used to verify factual claims in this guide.

  1. 1 IETF RFC 1813 Accessed

    Under RFC 1813 protocol specifications, NFSv3 expanded file size limits and offsets to 64-bit architectures, replacing legacy 32-bit 2GB caps that trigger large file error conditions, enabling theoretical limits up to 8 EiB as negotiated by the server maxfilesize attribute across client operating systems, local filesystems, volumes, and network exports.

  2. 2 Linux man-pages (nfs) Accessed

    While NFS protocol specifications permit theoretical multi-exabyte file transfers, Linux client implementations restrict network write payloads according to wsize and rsize buffer parameters, capping single write requests at 1,048,576 bytes while filesystem quotas, mount options, block sizes, and storage capacities govern real-world throughput.

Frequently Asked Questions

What is the maximum file size allowed in NFS?

The maximum file size allowed in NFS depends on the protocol version. Legacy NFSv2 protocol limits are strictly capped at 2 GB due to 32-bit signed offsets. NFSv3 and NFSv4 use 64-bit offsets, supporting a theoretical file size limit of 8 EiB (approximately 9.22 million TB), though practical file sizes are bounded by the underlying host filesystem, such as 16 TiB on ext4 or 8 EiB on XFS.

Why does NFS give a 'File too large' error at 2GB?

An NFS 'File too large' error (EFBIG) at 2 GB indicates that the share is mounted using legacy NFSv2 protocol settings. In NFSv2, file offsets are represented as 32-bit signed integers, which max out at 2,147,483,647 bytes. Attempting to write beyond this point causes an integer overflow, prompting the server to return NFSERR_FBIG. Upgrading the mount to NFSv3 or NFSv4 resolves this limitation.

What is the difference between NFSv3 and NFSv4 file size limits?

Both NFSv3 and NFSv4 support the same theoretical maximum file size limit of 8 EiB using 64-bit offsets. The key difference lies in protocol architecture: NFSv3 is a stateless protocol that relies on external daemons for locking and mounting, while NFSv4 is a stateful protocol with integrated byte-range locking, lease-based recovery, compound RPCs, and advanced features like Server-Side Copy in NFSv4.2.

How do rsize and wsize affect large file transfers over NFS?

The rsize and wsize mount options define the maximum byte payload transferred in each individual network read and write RPC request. Increasing wsize from 8 KiB to 1 MiB (1,048,576 bytes, the maximum supported by the Linux NFS client) reduces the total number of network RPC requests by orders of magnitude, markedly improving throughput on multi-gigabyte file transfers.

Can the underlying server filesystem restrict the NFS file size limit?

Yes. An NFS server cannot store a file larger than what its local host filesystem permits. For example, if an NFSv4 export resides on an ext4 filesystem formatted with 4 KiB blocks, individual files cannot exceed 16 TiB. Exceeding the underlying filesystem ceiling returns an EFBIG or ENOSPC error to the NFS client.

Why does NFS return an ESTALE error during large file operations?

An ESTALE (Stale file handle) error occurs when a client attempts to read or write using an opaque file handle whose corresponding inode on the server has been deleted, replaced, or modified with a new generation number. This frequently occurs when another process rotates, renames, or unlinks a large file while a client is actively reading it.

How do AI agent swarms handle file concurrency compared to NFS?

On traditional NFS mounts, concurrent writes from multiple AI agents often result in file corruption, silent overwrites, or lock contention deadlocks. Modern cloud workspaces like Fast.io replace POSIX locking with advisory per-file leases via MCP, ensuring concurrent writes land safely while per-file version history preserves every revision.

Related Resources

Fastio features

Eliminate NFS Transfer Bottlenecks in Distributed Agent Workspaces

Move beyond kernel mount timeouts and locking freezes with Fast.io shared workspaces. Connect agents via the Model Context Protocol at mcp.fast.io and manage files up to 100 GB on Enterprise with built-in indexing and per-file version history. Monthly plans start with a 14-day free trial that requires a credit card.