Latest revision |
Your text |
Line 1: |
Line 1: |
| There are two ways to setup NFS server on common [[HN]]: | | There are two ways to setup NFS server on common [[HN]]: |
| use a user-space NFS server daemon or use an in-kernel implementation | | use a user-space NFS server daemon or use an in-kernel implementation |
− | of NFS server. | + | of NFS server. Some peculiarities appear if you intend to run NFS server |
| + | in [[VE]]. |
| | | |
− | {{Note|for information about NFS client inside container, see [[NFS]].}} | + | {{Note|for information about NFS client inside VE, see [[NFS]].}} |
| | | |
| == Kernel NFS server == | | == Kernel NFS server == |
− | | + | Binary RPMs that are provided by OpenVZ community contain kernels compiled |
− | Kernel-space NFS server is supported by latest RHEL5 and RHEL6 based kernels and since vzctl-3.0.24.
| + | without NFS server support. Thus you have to |
− | | + | [[Kernel build|recompile the kernel]] with <code>CONFIG_NFSD=m</code>. After booting in this kernel you'll be able |
− | NB! Currently only NFSv3 is supported - no NFSv4 support yet.
| + | to use NFS server on [[HN]]. |
− | | + | In-kernel NFS server runs kernel threads to service requests of clients. |
− | === Prerequisites ===
| + | But for security reasons kernel threads are prohibited in [[VE]]s! So you won't |
− | In order to run an NFS server inside a container, make sure:
| + | be able to run NFS server inside [[VE]] without patching the kernel. |
− | * '''nfsd kernel module is loaded on host system before starting a container'''
| |
− | * '''nfsd feature for a container is turned on''' (<code>vzctl set $CTID --feature nfsd:on --save</code>)
| |
− | | |
− | === Setup ===
| |
− | * Make sure that rpcbind service is started before nfs service:
| |
− | : <code>chkconfig rpcbind on && service rpcbind start</code>
| |
− | * Disable NFSv4 and nfsd module loading warnings in /etc/sysconfig/nfs by uncommenting the following lines:
| |
− | MOUNTD_NFS_V3="yes"
| |
− | RPCNFSDARGS="-N 4"
| |
− | NFSD_MODULE="noload"
| |
− | * Start NFS service:
| |
− | : <code>chkconfig nfs on && service nfs start</code>
| |
− | | |
− | === Troubleshooting ===
| |
− | | |
− | Make sure that:
| |
− | # you have enabled nfsd feature for your container
| |
− | # nfsd kernel module is loaded before you started the container
| |
− | | |
− | ==== rpcbind ====
| |
− | | |
− | If you see this:
| |
− | <pre>
| |
− | # service nfs start
| |
− | ...
| |
− | Starting NFS services: [ OK ]
| |
− | Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
| |
− | rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
| |
− | </pre>
| |
− | | |
− | It means you haven't started rpcbind service. Solution:
| |
− | <pre>chkconfig rpcbind on && service rpcbind start</pre>
| |
− | | |
− | ==== nfsd module ====
| |
− | If you see this:
| |
− | <pre>
| |
− | # service nfs start
| |
− | ....
| |
− | Starting NFS daemon: rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory).
| |
− | Please try, as root, 'mount -t nfsd nfsd /proc/fs/nfsd' and then restart rpc.nfsd to correct the problem
| |
− | [FAILED]
| |
− | # mount -t nfsd nfsd /proc/fs/nfsd
| |
− | mount: unknown filesystem type 'nfsd'
| |
− | </pre>
| |
− | | |
− | It means you haven't loaded nfsd kernel module on host before starting container.
| |
− | | |
− | ==== warnings ====
| |
− | | |
− | If you see this:
| |
− | <pre>
| |
− | # /etc/init.d/nfs start
| |
− | FATAL: Module nfsd not found.
| |
− | FATAL: Error running install command for nfsd
| |
− | ...
| |
− | </pre>
| |
− | | |
− | It is actually harmless, you don't need to do anything. In case you want this to go away, uncomment (or add) the line
| |
− | | |
− | NFSD_MODULE="noload"
| |
− | | |
− | in <code>/etc/sysconfig/nfs</code> file.
| |
| | | |
| == User-space NFS server == | | == User-space NFS server == |
Line 92: |
Line 31: |
| The reason is that these daemons check the major number of the device where the directory to export resides. | | The reason is that these daemons check the major number of the device where the directory to export resides. |
| If major equals 0 then daemons assume that it is NFS and don't want to re-export it. Symptoms are | | If major equals 0 then daemons assume that it is NFS and don't want to re-export it. Symptoms are |
− | that clients will always get a "permission denied" error. Simfs (the file system on which container is located) | + | that clients will always get a "permission denied" error. Simfs (the file system on which VE is located) |
| is associated with so called unnamed device, in which major equals 0. So, to prevent daemons from checking for | | is associated with so called unnamed device, in which major equals 0. So, to prevent daemons from checking for |
| re-exporting — just use this <code>-r</code> option. | | re-exporting — just use this <code>-r</code> option. |
Line 101: |
Line 40: |
| | | |
| Please note that the user-space NFS server does not provide locking, or at least I couldn't get locking to work - [[User:Elronxenu|Elronxenu]] 19:49, 15 November 2007 (EST) | | Please note that the user-space NFS server does not provide locking, or at least I couldn't get locking to work - [[User:Elronxenu|Elronxenu]] 19:49, 15 November 2007 (EST) |
− |
| |
− | === On Debian Lenny ===
| |
− |
| |
− | The current stable debian version 5.0 (lenny) provides two packages for user space nfs support: <code>nfs-user-server</code> and <code>unfs3</code>. Here i describe my experiences with them --[[User:Strimo|Strimo]] 17:47, 16 February 2009 (UTC)
| |
− |
| |
− | It seems that also the unfs3 package has been removed from the debian repositories. --[[Special:Contributions/95.21.175.189|95.21.175.189]] 23:39, 30 July 2011 (UTC)
| |
− |
| |
− | ==== nfs-user-server ====
| |
− |
| |
− | IMPORTANT : read http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515957 , nfs-user-server was removed
| |
− |
| |
− | <pre>
| |
− | aptitude install nfs-user-server
| |
− | </pre>
| |
− |
| |
− | First i used nfs-user-server package since i didn't know unfs3. After installing i always got the '''permission denied''' error when i tried to mount any exported path until i found this article. So i patched the /etc/init.d/nfs-user-server file to include the <code>-r</code> parameter by adding <code>-- -r</code> to the <code>start-stop-daemon</code> line responsible for starting <code>rpc.mountd</code> and <code>rpc.nfsd</code>:
| |
− |
| |
− | <pre>
| |
− | start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/rpc.nfsd -- -r
| |
− | start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/rpc.mountd -- -r
| |
− | </pre>
| |
− |
| |
− | After the modification and a nfs server restart (<code>/etc/init.d/nfs-user-server restart</code>) i was able to mount a nfs share. At first the nfs server seems to work fine but anytime i want to edit any text file (using nano or mcedit) i got strange errors on writing to the file and i never solved the problem nor detected why this happens. So i switched to unfs3 ...
| |
− |
| |
− | <b>Note</b>: nfsmount from busybox not works with nfs-user-server in Debian Lenny, it write message "rpc failed: 2" when I try boot from nfs server. unfs3 works fine.
| |
− | Such problem into Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nfs-user-server/+bug/189593
| |
− |
| |
− | ==== unfs3 ====
| |
− |
| |
− | <pre>
| |
− | aptitude install unfs3
| |
− | </pre>
| |
− |
| |
− | Works fine until now. Note that both unfs3 and nfs-user-server do not support file locking!
| |
− | NOTE: I tested on centos 5.6 using unfs3 and I had to run the /etc/init.d/nfs service and see it work before I could use unfs. also use exports -a before using sudo /usr/sbin/unfsd -T -e /etc/exports
| |
− |
| |
− | === On CentOS 5 ===
| |
− |
| |
− | If you are running RedHat/CentOS, you can [http://dag.wieers.com/rpm/packages/unfs3/ get unfs3 from the DAG repository]
| |
| | | |
| == External links == | | == External links == |