You can support us by downloading this article as PDF from the Link below. Download the guide as PDF

Welcome to our guide on how you can configure NFS Filesystem for use in OpenNebula Cloud Storage. In OpenNebula a Storage datastore is is required to store disk images for running virtual machines. There are three different datastore types officially supported by OpenNebula:

  • Images Datastore: This stores the images repository.
  • System Datastore: This holds disk for running virtual machines. Disk are moved, or cloned to/from the Images datastore when the VMs are deployed or terminated; or when disks are attached or snapshotted.
  • Files & Kernels Datastore: Used to store plain files and not disk images. The plain files can be used as kernels, ram-disks or context files.
opennebula datastore overview

Disk images are transferred between the Image and System datastores by the transfer manager (TM) drivers. These drivers are specialized pieces of software that perform low-level storage operations.

The following table summarizes the available transfer modes for each datastore:

DatastoreImage to System Datastore disk transfers methods
Filesystemshared, images are exported in a shared filesystemssh, images are copied using the ssh protocolqcow2, like shared but specialized for the qcow2 format
Cephceph, all images are exported in Ceph poolsshared, volatile & context disks exported in a shared FS.
LVMfs_lvm, images exported in a shared FS but dumped to a LV
Raw Devicesdev, images are existing block devices in the nodes
iSCSI libvirtiscsi, images are iSCSI targets

Step 1: Install NFS Server

This should be done on an NFS Server instance

Ubuntu / Debian

Update APT package index:

sudo apt update

Then install NFS Server packages:

sudo apt -y install nfs-kernel-server

CentOS / RHEL / Fedora

Run the commands below to install NFS server packages:

sudo yum -y install nfs-utils

Step 2: Configure NFS Exports for OpenNebula

I’ve mounted external storage devices on /mnt directory. I’ll create relevant directories there:

sudo mkdir -p /mnt/opennebula/{images,system,files}

Where:

  • /mnt/opennebula/images is the image repository path
  • /mnt/opennebula/system holds disk for running virtual machines
  • /mnt/opennebula/files stores plain files and not disk images

We will edit /etc/exports and export these paths.

$ sudo vim /etc/exports

# Example configurations to allow mounts from any host
/mnt/opennebula/images *(rw,no_root_squash,no_subtree_check)
/mnt/opennebula/system *(rw,no_root_squash,no_subtree_check)
/mnt/opennebula/files  *(rw,no_root_squash,no_subtree_check)

# Example configurations to allow mounts from known/trusted networks
/mnt/opennebula/images 10.10.20.0/24(rw,no_root_squash,no_subtree_check)
/mnt/opennebula/system 10.10.20.0/24(rw,no_root_squash,no_subtree_check)
/mnt/opennebula/files  10.10.20.0/24(rw,no_root_squash,no_subtree_check)

Restart the nfs-server after updating the changes:

# Ubuntu / Debian
sudo systemctl restart nfs-server

# CentOS / RHEL
sudo systemctl enable --now rpcbind nfs-server
sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --add-service={nfs3,mountd,rpc-bind} --permanent
sudo firewall-cmd --reload

Validate NFS exports:

$ sudo exportfs -rvv
exporting 10.10.20.0/24:/mnt/opennebula/files
exporting 10.10.20.0/24:/mnt/opennebula/system
exporting 10.10.20.0/24:/mnt/opennebula/images

Step 3: Mount NFS Shares on Frontend/KVM Nodes

Install NFS Client packages on the Front-end and virtualization host systems.

# CentOS / RHEL
sudo yum -y install nfs-utils

# Debian / Ubuntu
sudo apt update
sudo apt -y install nfs-common

Mounts on OpenNebula Frontend

The frontend only needs to mount the Image Datastores and not the System Datastores.

The Frontend needs to prepare the storage area for:

  • The Image Datastores, to store the images.
  • The System Datastores, will hold temporary disks and files for VMs stopped and undeployed.

Get pre-defined datastores IDs:

configure nfs datastores opennebula 01

Login to the front-end node and mount the Image Datastore directory in /var/lib/one/datastores/ directory.

$ sudo vim /etc/fstab
10.10.20.250:/mnt/opennebula/images /var/lib/one/datastores/1 nfs defaults,soft,intr,rsize=32768,wsize=32768 0 0
10.10.20.250:/mnt/opennebula/files /var/lib/one/datastores/2 nfs defaults,soft,intr,rsize=32768,wsize=32768 0 0

Where 10.10.20.250 is the IP Address of the NFS Server.

Mount the NFS Shares using the mount command to confirm the changes in /etc/fstab are valid.

$ sudo mount -av
/                        : ignored
/boot                    : already mounted
none                     : ignored
/media/cdrom0            : ignored
mount.nfs: timeout set for Tue Mar 23 16:55:04 2021
mount.nfs: trying text-based options 'soft,intr,rsize=32768,wsize=32768,vers=4.2,addr=10.10.20.250,clientaddr=10.10.20.251'
/var/lib/one/datastores/1: successfully mounted
/var/lib/one/datastores/2: successfully mounted

Confirm the mount status with the df command:

$ df -hT /var/lib/one/datastores/1
Filesystem                          Type  Size  Used Avail Use% Mounted on
10.10.20.250:/mnt/opennebula/images nfs4  915G  1.6G  867G   1% /var/lib/one/datastores/1

$ df -hT /var/lib/one/datastores/2
Filesystem                         Type  Size  Used Avail Use% Mounted on
10.10.20.250:/mnt/opennebula/files nfs4  915G  1.6G  867G   1% /var/lib/one/datastores/2

Datastores listing in the UI after the changes.

configure nfs datastores opennebula 02

Mounts on OpenNebula Virtualization Nodes

Login to the Nodes running the VMS and do the mounting in a similar way done in the front-end.

$ sudo vim /etc/fstab
10.10.20.250:/mnt/opennebula/system /var/lib/one/datastores/0 nfs defaults,soft,intr,rsize=32768,wsize=32768 0 0
10.10.20.250:/mnt/opennebula/images /var/lib/one/datastores/1 nfs defaults,soft,intr,rsize=32768,wsize=32768 0 0
10.10.20.250:/mnt/opennebula/files /var/lib/one/datastores/2 nfs defaults,soft,intr,rsize=32768,wsize=32768 0 0

Create mount directories:

sudo mkdir /var/lib/one/datastores/{0,1,2}
sudo chown -R oneadmin:oneadmin /var/lib/one/datastores/{0,1,2}

Run the mount command:

$ sudo mount -av
/                        : ignored
/boot                    : already mounted
none                     : ignored
mount.nfs: timeout set for Tue Mar 23 17:12:25 2021
mount.nfs: trying text-based options 'soft,intr,rsize=32768,wsize=32768,vers=4.2,addr=10.10.20.250,clientaddr=10.10.20.252'
/var/lib/one/datastores/0: successfully mounted
mount.nfs: timeout set for Tue Mar 23 17:12:25 2021
mount.nfs: trying text-based options 'soft,intr,rsize=32768,wsize=32768,vers=4.2,addr=10.10.20.250,clientaddr=10.10.20.252'
/var/lib/one/datastores/1: successfully mounted
mount.nfs: timeout set for Tue Mar 23 17:12:25 2021
mount.nfs: trying text-based options 'soft,intr,rsize=32768,wsize=32768,vers=4.2,addr=10.10.20.250,clientaddr=10.10.20.252'
/var/lib/one/datastores/2: successfully mounted

Confirm mount status:

$ df -hT | grep one
10.10.20.250:/mnt/opennebula/system nfs4      915G  3.6G  865G   1% /var/lib/one/datastores/0
10.10.20.250:/mnt/opennebula/images nfs4      915G  3.6G  865G   1% /var/lib/one/datastores/1
10.10.20.250:/mnt/opennebula/files  nfs4      915G  3.6G  865G   1% /var/lib/one/datastores/2

More guides:

Create CentOS|Ubuntu|Debian VM Templates on OpenNebula

Import CentOS 8 | CentOS 7 Qcow2 Images on OpenNebula

Reference:

As an appreciation for the content we put out,
we would be thrilled if you support us!


As we continue to grow, we would wish to reach and impact more people who visit and take advantage of the guides we have on our blog. This is a big task for us and we are so far extremely grateful for the kind people who have shown amazing support for our work over the time we have been online.

Thank You for your support as we work to give you the best of guides and articles. Click below to buy us a coffee.

LEAVE A REPLY

Please enter your comment!
Please enter your name here