NFS Migration Checklist for Renamed Datasets and Stable File Handles

Eva Wong is the Technical Writer and resident tinkerer at ZimaSpace. A lifelong geek with a passion for homelabs and open-source software, she specializes in translating complex technical concepts into accessible, hands-on guides. Eva believes that self-hosting should be fun, not intimidating. Through her tutorials, she empowers the community to demystify hardware setups, from building their first NAS to mastering Docker containers.

The safe approach is to treat a quiesced export migration that preserves the client-facing namespace where possible and deliberately remounts clients when handle identity changes as a sequence of observable gates, not a single command.

On a Linux NFS server migrating a NAS dataset used by home-server clients, the practical risk is renaming or moving an exported dataset may leave clients with stale NFS file handles or remount failures. Record the current identity and recovery point, start with the least invasive discriminator, interpret pass and fail results before changing another variable, and stop when storage becomes unstable or the only recoverable copy would be exposed. The workflow below ends only after the original workload succeeds or the evidence reaches an escalation boundary.

Inventory the export and file-handle dependencies

Record the source filesystem or dataset identity, server-side path, NFSv4 pseudo-root, export options, explicit fsid values, client mount paths, autofs or systemd units, and every container or application using the mount. Capture active mounts and open files before planning downtime.

NFS file handles encode server-selected object identity, so an unchanged path string does not guarantee a stable handle after a filesystem move. An independent NFS stale file handle mechanics explains how deleted, recreated, or remapped exports produce stale handles even when the directory visibly exists.

Choose whether the goal is namespace stability or live-handle continuity. Preserving the client-facing path reduces configuration changes, but moving data to a different filesystem may still require every client to unmount and obtain new handles.

Prepare the target while clients remain on the source

Create the target dataset, copy data with ACLs, owners, extended attributes, hard links, sparse files, and timestamps preserved, and compare counts and representative hashes. Match export security and identity mapping before exposing the target to production clients.

Use the ZimaSpace guide on NFSv4 identity mapping guide to align NFSv4 identities across Linux servers. Stable file handles do not solve numeric ownership or name-domain mismatches, so validate both the file identity layer and the user identity layer independently.

Perform an initial synchronization while the source is live only if the copy method supports it, then plan a final stopped delta. Do not export both copies read-write under the same client namespace because writes can diverge without an obvious failure.

Quiesce clients and cut over the export

Stop application writers, containers, and scheduled jobs on every client, then verify no important process holds files below the mount. Unmount clients cleanly. After the final synchronization, unexport or make the source read-only, switch the server-side mount or export to the target, and reload exports.

A GitLab engineering account of an NFS rename and stale state case shows that rename and delegation behavior can yield stale or inconsistent client observations. The safe operational response is planned quiescence and remounting, not repeated cache-clearing commands while applications continue writing.

If the target changes filesystem identity, expect new handles and mount clients afresh. Keep the original export available under a nonproduction recovery name, but never let old and new trees accept competing writes.

Remount every client and verify the new identity

Remount one canary client first and test list, read, create, rename, delete, file locking, and ownership. Restart its dependent application and verify the original workload. Then roll through remaining clients, recording mount source, NFS version, and absence of stale-handle errors.

Reboot or restart automount on a canary to prove persistent configuration points to the stable client-facing namespace. Check server logs, client kernels, backup jobs, and containers for hidden old paths. A successful manual mount does not prove boot ordering or service dependencies are correct.

Retire the source only after all clients remount, normal jobs pass, a backup succeeds, and one restore is tested. Roll back before accepting new writes if the canary fails; after target writes begin, stop and reconcile deliberately rather than switching exports back and forth.

Support & Tips

More to Read

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.