# networks. This service provides NFS server functionality, \
# which is configured via the /etc/exports file.
# probe: true
+# config: /etc/sysconfig/nfs
# Source function library.
. /etc/rc.d/init.d/functions
[ -x /usr/sbin/exportfs ] || exit 0
[ -s /etc/exports ] || exit 0
-# Number of servers to be started up by default
-RPCNFSDCOUNT=8
-# Default to NFS version 3.
-RPCMOUNTDOPTS=""
+# Check for and source configuration file otherwise set defaults
+# TUNE_QUEUE: controls whether to up the size of input queues
+[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
+
+[ -z "$MOUNTD_NFS_V2" ] && MOUNTD_NFS_V2=auto
+[ -z "$MOUNTD_NFS_V3" ] && MOUNTD_NFS_V3=auto
+
+# Number of servers to be started by default
+[ -z "$NFSDCOUNT" ] && NFSDCOUNT=8
+
+# Remote quota server
+[ -z "$RQUOTAD" ] && RQUOTAD=`type -path rpc.rquotad`
+
+# Get the initial values for the input sock queues
+# at the time of running the script.
+if [ "$TUNE_QUEUE" = "yes" ]; then
+ RMEM_DEFAULT=`/sbin/sysctl -n net.core.rmem_default`
+ RMEM_MAX=`/sbin/sysctl -n net.core.rmem_max`
+ # 256kb recommended minimum size based on SPECsfs NFS benchmarks
+ [ -z "$NFS_QS" ] && NFS_QS=262144
+fi
# See how we were called.
case "$1" in
start)
# Start daemons.
+ # Apply input queue increase for nfs server
+ if [ "$TUNE_QUEUE" = "yes" ]; then
+ /sbin/sysctl -w net.core.rmem_default=$NFSD_QS >/dev/null 2>&1
+ /sbin/sysctl -w net.core.rmem_max=$NFSD_QS >/dev/null 2>&1
+ fi
action "Starting NFS services: " /usr/sbin/exportfs -r
- echo -n "Starting NFS quotas: "
- daemon rpc.rquotad
- echo
+ if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
+ echo -n "Starting NFS quotas: "
+ daemon rpc.rquotad
+ echo
+ fi
echo -n "Starting NFS daemon: "
- daemon rpc.nfsd $RPCNFSDCOUNT
+ daemon rpc.nfsd $NFSDCOUNT
echo
- # Let's see if we support NFS version 3.
- /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null
- if [ $? -ne 0 ]; then
- RPCMOUNTDOPTS="--no-nfs-version 3"
- fi
+ [ -n "$MOUNTD_PORT" ] \
+ && MOUNTD_OPTIONS="$MOUNTD_OPTIONS -p $MOUNTD_PORT"
+ [ "$MOUNTD_TCP" = "no" -o "$MOUNTD_TCP" = "NO" ] \
+ && MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-tcp"
+
+ case $MOUNTD_NFS_V2 in
+ auto|AUTO)
+ # Let's see if we support NFS version 2.
+ /usr/sbin/rpcinfo -u localhost nfs 2 &>/dev/null
+ if [ $? -ne 0 ]; then
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 2"
+ fi
+ ;;
+ no|NO)
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 2"
+ ;;
+ yes|YES)
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --nfs-version 2"
+ ;;
+ esac
+
+ case $MOUNTD_NFS_V3 in
+ auto|AUTO)
+ # Let's see if we support NFS version 3.
+ /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null
+ if [ $? -ne 0 ]; then
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 3"
+ fi
+ ;;
+ no|NO)
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 3"
+ ;;
+ yes|YES)
+ MOUNTD_OPTIONS="$MOUNTD_OPTIONS --nfs-version 3"
+ ;;
+ esac
echo -n "Starting NFS mountd: "
- daemon rpc.mountd $RPCMOUNTDOPTS
+ daemon rpc.mountd $MOUNTD_OPTIONS
echo
touch /var/lock/subsys/nfs
+ # reset input queue for rest of network services
+ if [ "$TUNE_QUEUE" = "yes" ]; then
+ /sbin/sysctl -w net.core.rmem_default=$RMEM_DEFAULT >/dev/null 2>&1
+ /sbin/sysctl -w net.core.rmem_max=$RMEM_MAX >/dev/null 2>&1
+ fi
;;
stop)
# Stop daemons.
echo -n "Shutting down NFS daemon: "
killproc nfsd
echo
- echo -n "Shutting down NFS quotas: "
- killproc rpc.rquotad
- echo
+ if [ -n "$RQUOTAD" ]; then
+ echo -n "Shutting down NFS quotas: "
+ killproc rpc.rquotad
+ echo
+ fi
# Do it the last so that clients can still access the server
# when the server is running.
action "Shutting down NFS services: " /usr/sbin/exportfs -au
status)
status rpc.mountd
status nfsd
- status rpc.rquotad
+ if [ -n "$RQUOTAD" ]; then
+ status rpc.rquotad
+ fi
;;
restart)
$0 stop