Difference between revisions of "NFS"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(Prepare the HN)
(Prepare the HN)
 
(37 intermediate revisions by 22 users not shown)
Line 1: Line 1:
This page describes how to mount NFS partition inside VE.
+
This page describes how to use '''NFS client''' inside a container.
  
== NFS server ==
+
{{Note|see [[NFS server inside container]] for info about nfsd.
Currently OpenVZ kernel doesn't include kernel NFS server support. Howether you are still able to use user space [[NFS server inside VE]].
 
  
== NFS client ==
+
Mounting filesystems from the '''hardware node''' can be performed more elegantly using [[Bind mounts]].}}
=== Preparations ===
+
 
==== Software ====
+
== Preparations ==
 +
=== Prerequisites ===
 
You will need the following software:
 
You will need the following software:
# [http://download.openvz.org/kernel/devel/ kernel] version 028test006 or higher
 
# [http://download.openvz.org/utils/vzctl/ vzctl] version 3.0.13 or higher
 
==== Prepare the HN ====
 
<pre>
 
# modprobe nfs
 
</pre>
 
  
==== Prepare the VE ====
+
# vzctl version 3.0.13 or higher (do <code>vzctl --version</code>)
To allow a VE use NFS filesystem, you will need to start it with "nfs" feature enabled.
+
# kernel version 2.6.18-028test006 or higher (2.6.18-028stab* will do), or any recent RHEL5-based or 2.6.20-based kernel.
<pre>
+
 
# vzctl set 101 --features "nfs:on" --save
+
Note: In all the kernels earlier than 028stab038, kernel NFS support can be given to a container by setting:
# vzctl start 101
+
 
</pre>
+
      sunrpc.ve_allow_rpc = 1
 +
      fs.nfs.ve_allow_nfs = 1
 +
      kernel.ve_allow_kthreads = 1
 +
 
 +
This can be done by adding the above lines into /etc/sysctl.conf on the hardware node, and then running <code>sysctl -p</code>.
 +
 
 +
=== Prepare the HN ===
 +
 
 +
For NFS mounts to work in the containers with the RHEL5-based kernels you must enable kernel threads in the container by setting <code>kernel.ve_allow_kthreads=1</code> in <code>/etc/sysctl.conf</code>.
 +
 
 +
RHEL7-based kernels support [https://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-nfs.html three different NFS protocol versions]:
 +
{{Quote|
 +
NFS version 2 (NFSv2) is older and is widely supported.
 +
NFS version 3 (NFSv3) has more features, including 64bit file handles, Safe Async writes and more robust error handling.
 +
NFS version 4 (NFSv4) works through firewalls and on the Internet, no longer requires portmapper, supports ACLs, and utilizes stateful operations.
 +
Red Hat Enterprise Linux supports NFSv2, NFSv3, and NFSv4 clients, and when mounting a file system via NFS, Red Hat Enterprise Linux uses NFSv3 by default, if the server supports it.
 +
}}
 +
 
 +
Accordingly, there are three kernel modules: <code>nfs</code> (for NFSv2), <code>nfsv3</code>, and <code>nfsv4</code>. As [[NFS server inside container]] currently only supports NFSv3, it's very likely that you'll need to load <code>nfsv3</code> module for clients.
 +
 
 +
# modprobe nfs
 +
 
 +
You will probably want the nfs module to load automatically on reboots.  One way to do this is to put the modprobe  command in your /etc/rc.d/rc.local file:
 +
 
 +
  modprobe nfs
 +
 
 +
Alternatively, you can add a new line with <code>nfs</code> to your /etc/modules or /etc/modules.conf file.
 +
 
 +
=== Prepare the container ===
 +
To allow a container to use NFS filesystem, you will need to start it with "nfs" feature enabled. If the container is running while you set the <code>--features nfs:on</code>, you will need to reboot it.
 +
 
 +
# vzctl set 101 --features "nfs:on" --save
 +
# vzctl start 101
  
 
After this you may see nfs in <code>/proc/filesystems</code>
 
After this you may see nfs in <code>/proc/filesystems</code>
Line 35: Line 61:
 
</pre>
 
</pre>
  
=== Mounting NFS ===
+
== Mounting NFS ==
Assuming that you already have NFS server set up at <code>192.168.0.1:/nfs_pub</code> mounting will be simple
+
Make sure that packages <code>nfs-utils</code> and <code>nfs-utils-lib</code> or similar are installed in a container.  Also make sure that the <code>portmap</code> (or <code>rpcbind</code>) service is started, otherwise the mount with default options will fail and require the <code>-nolock</code> option.  See the [[NFS#Known issues|known issues]] for more information.
 +
 
 +
Assuming that you already have NFS server set up at <code>192.168.0.1:/nfs_pub</code>, mounting will be simple
 
<pre>
 
<pre>
 
# vzctl enter 100
 
# vzctl enter 100
Line 49: Line 77:
 
</pre>
 
</pre>
  
For more details on how to setup NFS mount see [http://nfs.sourceforge.net/nfs-howto/ar01s04.htm NFS-client HOWTO]
+
For more details on how to setup NFS mount, see [http://nfs.sourceforge.net/nfs-howto/ar01s04.html NFS-client HOWTO]
 +
 
 +
== Known issues ==
 +
* There are quite a few parameters in NFS, so sometimes it doesn't work due to misconfiguration. We've created a separate page describing such situations: [[NFS doesn't work]].
 +
* Package nfs-common can not be installed. Make sure you start <code>portmap</code> before trying to install nfs-common.
 +
** For Ubuntu/Debian OpenVZ containers, the <code>portmap/rpcbind</code> service may not start automatically. However, you can enable it by editing the <code>/etc/default/nfs-common</code> configuration file.
 +
 
 +
== See also ==
 +
* [http://nfs.sourceforge.net/nfs-howto/ar01s04.html NFS-client HOWTO]
  
 
[[Category: HOWTO]]
 
[[Category: HOWTO]]

Latest revision as of 19:34, 17 June 2016

This page describes how to use NFS client inside a container.

Yellowpin.svg Note: see NFS server inside container for info about nfsd.

Mounting filesystems from the hardware node can be performed more elegantly using Bind mounts.

Preparations[edit]

Prerequisites[edit]

You will need the following software:

  1. vzctl version 3.0.13 or higher (do vzctl --version)
  2. kernel version 2.6.18-028test006 or higher (2.6.18-028stab* will do), or any recent RHEL5-based or 2.6.20-based kernel.

Note: In all the kernels earlier than 028stab038, kernel NFS support can be given to a container by setting:

     sunrpc.ve_allow_rpc = 1
     fs.nfs.ve_allow_nfs = 1
     kernel.ve_allow_kthreads = 1

This can be done by adding the above lines into /etc/sysctl.conf on the hardware node, and then running sysctl -p.

Prepare the HN[edit]

For NFS mounts to work in the containers with the RHEL5-based kernels you must enable kernel threads in the container by setting kernel.ve_allow_kthreads=1 in /etc/sysctl.conf.

RHEL7-based kernels support three different NFS protocol versions:

NFS version 2 (NFSv2) is older and is widely supported. NFS version 3 (NFSv3) has more features, including 64bit file handles, Safe Async writes and more robust error handling. NFS version 4 (NFSv4) works through firewalls and on the Internet, no longer requires portmapper, supports ACLs, and utilizes stateful operations. Red Hat Enterprise Linux supports NFSv2, NFSv3, and NFSv4 clients, and when mounting a file system via NFS, Red Hat Enterprise Linux uses NFSv3 by default, if the server supports it.

Accordingly, there are three kernel modules: nfs (for NFSv2), nfsv3, and nfsv4. As NFS server inside container currently only supports NFSv3, it's very likely that you'll need to load nfsv3 module for clients.

# modprobe nfs

You will probably want the nfs module to load automatically on reboots. One way to do this is to put the modprobe command in your /etc/rc.d/rc.local file:

 modprobe nfs

Alternatively, you can add a new line with nfs to your /etc/modules or /etc/modules.conf file.

Prepare the container[edit]

To allow a container to use NFS filesystem, you will need to start it with "nfs" feature enabled. If the container is running while you set the --features nfs:on, you will need to reboot it.

# vzctl set 101 --features "nfs:on" --save
# vzctl start 101

After this you may see nfs in /proc/filesystems

# vzctl exec 101 cat /proc/filesystems
        ext3
        ext2
nodev   rpc_pipefs
nodev   proc
nodev   nfs
nodev   sysfs
nodev   tmpfs
nodev   devpts

Mounting NFS[edit]

Make sure that packages nfs-utils and nfs-utils-lib or similar are installed in a container. Also make sure that the portmap (or rpcbind) service is started, otherwise the mount with default options will fail and require the -nolock option. See the known issues for more information.

Assuming that you already have NFS server set up at 192.168.0.1:/nfs_pub, mounting will be simple

# vzctl enter 100
# mkdir /nfs
# mount -t nfs 192.168.0.1:/nfs_pub /nfs
# cat /proc/mounts 
simfs / simfs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw 0 0
nfs /nfs nfs rw,vers=3,rsize=32768,wsize=32768,hard,proto=tcp,timeo=600,retrans=2,sec=sys,addr=192.168.0.1 0 0

For more details on how to setup NFS mount, see NFS-client HOWTO

Known issues[edit]

  • There are quite a few parameters in NFS, so sometimes it doesn't work due to misconfiguration. We've created a separate page describing such situations: NFS doesn't work.
  • Package nfs-common can not be installed. Make sure you start portmap before trying to install nfs-common.
    • For Ubuntu/Debian OpenVZ containers, the portmap/rpcbind service may not start automatically. However, you can enable it by editing the /etc/default/nfs-common configuration file.

See also[edit]