NFS clients often need one server endpoint even when the files behind that endpoint live on a distributed GlusterFS volume. NFS-Ganesha can serve the volume through the GLUSTER FSAL, so Linux, Unix, and appliance clients mount a normal NFSv4 path without installing the GlusterFS FUSE client.
NFS-Ganesha reads export definitions from /etc/ganesha/ganesha.conf and any included export files. The GLUSTER FSAL uses libgfapi to reach a trusted-pool node and named volume, while the Pseudo path defines the NFSv4 location mounted by clients.
A production export needs a stable gateway address or a separately managed high-availability design, restricted client networks, and root squashing unless a documented workload requires root ownership writes. Examples use Fedora or RHEL-family dnf package names when a repository provides nfs-ganesha-gluster; RHEL-compatible hosts may need an additional storage repository before that package appears.
$ sudo gluster volume info volume1 Volume Name: volume1 Type: Replicate Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node1:/srv/gluster/brick1/volume1 Brick2: node2:/srv/gluster/brick1/volume1
Run this from a trusted-pool node before configuring the NFS-Ganesha gateway.
$ sudo dnf install --assumeyes nfs-ganesha nfs-ganesha-gluster ##### snipped ##### Installing: nfs-ganesha nfs-ganesha-gluster ##### snipped ##### Complete!
If dnf reports no match for nfs-ganesha-gluster, enable the GlusterFS or NFS-Ganesha repository supported by that distribution before continuing.
$ sudo mkdir -p /etc/ganesha/exports
$ sudo vi /etc/ganesha/exports/volume1.conf
EXPORT {
Export_Id = 101;
Path = "/";
Pseudo = "/volume1";
Protocols = 4;
Transports = TCP;
Access_Type = RW;
Squash = Root_Squash;
SecType = sys;
FSAL {
Name = GLUSTER;
hostname = "node1";
volume = "volume1";
}
CLIENT {
Clients = 192.0.2.0/24;
Access_Type = RW;
Protocols = 4;
Transports = TCP;
Squash = Root_Squash;
}
}
Keep Export_Id unique on this NFS-Ganesha instance. Pseudo is the path clients mount over NFSv4, and Squash = Root_Squash prevents client root from creating server-side root-owned files.
$ sudo vi /etc/ganesha/ganesha.conf
%include "/etc/ganesha/exports/volume1.conf"
$ sudo systemctl enable nfs-ganesha Created symlink /etc/systemd/system/multi-user.target.wants/nfs-ganesha.service -> /usr/lib/systemd/system/nfs-ganesha.service.
$ sudo systemctl restart nfs-ganesha
A restart interrupts clients already mounted through this gateway. Schedule the change or move clients before restarting a production export.
$ sudo systemctl status nfs-ganesha --no-pager
* nfs-ganesha.service - NFS-Ganesha file server
Loaded: loaded (/usr/lib/systemd/system/nfs-ganesha.service; enabled; preset: disabled)
Active: active (running) since Tue 2026-06-16 10:08:21 UTC; 8s ago
##### snipped #####
If the service fails to start, inspect the NFS-Ganesha log and check the export file for an invalid Export_Id, unreachable hostname, or wrong volume name.
$ sudo firewall-cmd --zone=public --permanent --add-service=nfs success
For an NFSv4-only export, client traffic uses TCP port 2049. NFSv3 exports require additional RPC services and firewall planning.
$ sudo firewall-cmd --reload success
$ sudo mkdir -p /mnt/volume1
$ sudo mount -t nfs4 files1:/volume1 /mnt/volume1
Install the client-side NFS utilities package first if the host does not have the mount.nfs4 helper.
$ findmnt -T /mnt/volume1 TARGET SOURCE FSTYPE OPTIONS /mnt/volume1 files1:/volume1 nfs4 rw,relatime,vers=4.2,proto=tcp,sec=sys