NFS, Network File System, is a server-client protocol used for sharing files between linux/unix to unix/linux systems. NFS enables you to mount a remote share locally. You can then directly access any of the files on that remote share.
Scenario
In this how-to I use two systems running with CentOS 6.5, but it will work on all CentOS / RHEL / Scientific Linux 6.x distros.
NFS Server IP Address: 192.168.1.250/24 NFS Client IP Address: 192.168.1.251/24
1. Install NFS in Server system
# yum install nfs* -y
2. Start NFS service
# service rpcbind start # chkconfig rpcbind on # service nfs start # chkconfig nfs on
3. Install NFS in Client System
# yum install nfs* -y
4. Start NFS service
# service rpcbind start # chkconfig rpcbind on # service nfs start # chkconfig nfs on
5. Create shared directories in server
Create a shared directory named ‘/var/unixmen_share’ in server and let the client users to read and write files in that directory.
# mkdir /var/unixmen_share # chmod 755 /var/unixmen_share/
6. Export shared directory on NFS Server
Edit file /etc/exports,
# vi /etc/exports
Add the entry as shown below.
/var/unixmen_share/ 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash)
where,
/var/unixmen_share – shared directory
192.168.1.0/24 – IP address range of clients
rw – Writable permission to shared folder
sync – Synchronize shared directory
no_root_squash – Enable root privilege
no_all_squash – Enable user’s authority
7. Restart the NFS service.
# service nfs restart
8. Mount the share directory in client
Create a mount point to mount the share directory ‘var/unixmen_local’ which we created in the earlier step 5.
# mkdir /var/nfs_share
Mount the share from server to client as shown below
# mount -t nfs 192.168.1.250:/var/unixmen_share/ /var/nfs_share/ mount.nfs: Connection timed out
Probably it will show a connection timed out error which means that the firewall is blocking NFS server. To allow NFS server to access from outbound, goto NFS server system and add the as shown below in the ‘etc/sysconfig/iptables’ file.
# vi /etc/sysconfig/iptables
Append the following lines shown in red colour.
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Now restart the iptables service.
# service iptables restart
Again mount the share in client system with command:
# mount -t nfs 192.168.1.250:/var/unixmen_share/ /var/nfs_share/
Now the NFS share will mount without any connection timed out error.
9. Verify NFS
Verify the share from the server is mounted or not using ‘mount’ command.
# mount
Sample output:
/dev/mapper/vg_client-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.1.250:/var/unixmen_share/ on /var/nfs_share type nfs (rw,vers=4,addr=192.168.1.250,clientaddr=192.168.1.251)
10. Automount the Shares
To mount the shares automatically instead of mounting them manually at every reboot, add the following lines shown in red colour in the ‘/etc/fstab’ file of your client system.
# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Mar 3 22[root@client unixmen]:10:15 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_client-lv_root / ext4 defaults 1 1
UUID=1aa7d041-056b-48f4-a773-f713759e981f /boot ext4 defaults 1 2
/dev/mapper/vg_client-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
192.168.1.250:/var/unixmen_share/ /var/nfs_share/ nfs rw,sync,hard,intr 0 0
Reboot the client system and check the share whether it is automatically mounted or not.
# mount
Sample output:
/dev/mapper/vg_client-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.1.250:/var/unixmen_share/ on /var/nfs_share type nfs (rw,vers=4,addr=192.168.1.250,clientaddr=192.168.1.251)
Thats it. Now NFS server is ready to use.