Difference between revisions of "NFS"
(→Prerequisites) |
(→Prepare the HN) |
||
(31 intermediate revisions by 18 users not shown) | |||
Line 1: | Line 1: | ||
− | This page describes how to | + | This page describes how to use '''NFS client''' inside a container. |
− | + | {{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 == | |
+ | === Prerequisites === | ||
You will need the following software: | You will need the following software: | ||
− | # | + | # vzctl version 3.0.13 or higher (do <code>vzctl --version</code>) |
− | # | + | # 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 | + | Note: In all the kernels earlier than 028stab038, kernel NFS support can be given to a container by setting: |
sunrpc.ve_allow_rpc = 1 | sunrpc.ve_allow_rpc = 1 | ||
Line 20: | Line 20: | ||
This can be done by adding the above lines into /etc/sysctl.conf on the hardware node, and then running <code>sysctl -p</code>. | 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 | |
− | |||
− | # 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 48: | Line 61: | ||
</pre> | </pre> | ||
− | + | == 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 62: | Line 77: | ||
</pre> | </pre> | ||
− | For more details on how to setup NFS mount see [http://nfs.sourceforge.net/nfs-howto/ar01s04. | + | 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.
Note: see NFS server inside container for info about nfsd.
Mounting filesystems from the hardware node can be performed more elegantly using Bind mounts. |
Contents
Preparations[edit]
Prerequisites[edit]
You will need the following software:
- vzctl version 3.0.13 or higher (do
vzctl --version
) - 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.
- For Ubuntu/Debian OpenVZ containers, the