2 export PATH=$PATH:/sbin:/usr/sbin
6 # check if running in source directory
7 # will probably need to create variable for each module.
8 if [ -f $SRCDIR/Makefile.am ]; then
10 PORTALS=$SRCDIR/../../portals
13 PTLCTL=$PORTALS/linux/utils/ptlctl
14 DBGCTL=$PORTALS/linux/utils/debugctl
15 ACCEPTOR=$PORTALS/linux/utils/acceptor
17 OBDCTL=$LUSTRE/utils/obdctl
20 # should have configure set the paths here
26 DBGCTL=$BINDIR/debugctl
27 ACCEPTOR=$BINDIR/acceptor
31 LOOPNUM=0; export LOOPNUM
32 if [ -b /dev/loop0 ]; then
34 elif [ -b /dev/loop/0 ]; then
37 echo "Cannot find /dev/loop0 or /dev/loop/0" 1>&2 && exit -1
42 BASE=`echo $MODULE | sed -e "s^.*/^^" -e "s/\.o$//"`
44 [ "$MODULE" ] || fail "usage: $0 <module>"
45 [ -f $MODULE ] || echo "$0: module '$MODULE' not found" 1>&2
46 lsmod | grep -q "\<$BASE\>" && return 0
52 [ "$MODULE" ] || fail "usage: $0 <module>"
53 lsmod | grep -q $MODULE || return 0
54 rmmod $MODULE || lsmod | sed "s/^/$MODULE failed: /"
57 # Return the next unused loop device on stdout and in the $LOOPDEV
58 # environment variable.
61 while [ -b ${LOOP}${LOOPNUM} ]; do
62 LOOPDEV=${LOOP}${LOOPNUM}
63 losetup ${LOOPDEV} > /dev/null 2>&1 || NEXT=${LOOPDEV}
64 LOOPNUM=`expr ${LOOPNUM} + 1`
65 [ "$NEXT" ] && echo ${NEXT} && break
69 # Create a new filesystem. If we are using a loopback device, we check
70 # for existing "template" filesystems instead of creating a new one,
71 # because it is _much_ faster to gunzip the empty filesystem instead of
72 # creating a new one from scratch. Conversely, if we are creating a
73 # filesystem on a device we use mkfs, because that only writes sparsely
74 # to the device. The empty filesystems are also highly compressed (1000:1)
75 # so they don't take too much space.
78 echo "new_fs <fstype> {device | file} [size]" 1>&2
86 [ "$1" = "ext3" ] && MKFS="mkfs.ext2 -j"
87 if [ "$1" = "extN" ]; then
93 [ $# -lt 2 -o $# -gt 3 ] && new_fs_usage
96 [ -r "$PM" ] || PM="/etc/mtab"
98 grep "$2 " $PM 1>&2 && echo "$0: $2 is in $PM!" 1>&2 && exit -1
100 $MKFS $MKFSOPT $2 $3 || exit -1
101 LOOPDEV=$2 # Not really a loop device
103 [ $# -ne 3 ] && new_fs_usage
105 if [ -r "$EFILE" ]; then
106 echo "using prepared filesystem $EFILE for $2"
107 zcat "$EFILE" > $2 || exit -1
110 echo "creating new sparse filesystem on $2"
111 dd if=/dev/zero of=$2 bs=1k seek=$3 count=1 1>&2 || exit -1
112 $MKFS $MKFSOPT -F $2 1>&2 || exit -1
114 LOOPDEV=`next_loop_dev`
115 losetup ${LOOPDEV} $2 1>&2 || exit -1
118 # Enable hash-indexed directories for extN filesystems
119 # [ "$1" = "extN" ] && echo "feature FEATURE_C5" | debugfs -w $2
122 # Set up to use an existing filesystem. We take the same parameters as
123 # new_fs, even though we only use the <fstype> and <file> parameters, to
124 # make it easy to convert between new_fs and old_fs in testing scripts.
129 LOOPDEV=$2 # Not really a loop device
131 LOOPDEV=`next_loop_dev`
132 losetup ${LOOPDEV} $2 1>&2 || exit -1
137 $DBGCTL modules > $R/tmp/ogdb
138 echo "The GDB module script is in $R/tmp/ogdb"
139 [ "$DEBUG_WAIT" = "yes" ] && echo -n "Press ENTER to continue" && read
142 # start acceptor for a given network and port.
143 # not all networks need an acceptor
146 elan) [ "$PORT" ] && fail "$0: NETWORK is elan but PORT is set"
148 tcp) [ "$PORT" ] || fail "$0: NETWORK is tcp but PORT is not set"
151 *) fail "$0: unknown NETWORK '$NETWORK'" ;;
155 # We need at least one setup file to be given. It can be passed on
156 # the command-line, or it can be found in the home directory, or it
157 # can even be sourced into the current shell environment.
159 DEF=/etc/lustre/lustre.cfg
160 [ -r $DEF ] && . $DEF && SETUP=y
164 *.cfg) [ -r "$CFG" ] && . $CFG && SETUP=y ;;
165 *) echo "unknown option '$CFG'" 1>&2
169 if [ "$SETUP" != "y" ]; then
170 echo "error: no config file on command-line and no $DEF" 1>&2
174 [ -z "$MDS_RSH" ] && MDS_RSH="eval"
175 [ -z "$OST_RSH" ] && OST_RSH="eval"
176 [ -z "$OSC_RSH" ] && OSC_RSH="eval"
180 [ -z "$OSTNODE" ] && OSTNODE=$SERVER
181 [ -z "$MDSNODE" ] && MDSNODE=$SERVER
182 [ -z "$DLM" ] && DLM=$SERVER
186 if grep -q portals /proc/modules; then
187 echo "$0: portals already appears to be set up, skipping"
191 if [ -z "$NETWORK" -o -z "$LOCALHOST" -o -z "$SERVER" ]; then
192 echo "$0: NETWORK or LOCALHOST or SERVER is not set" 1>&2
198 [ -c /dev/portals ] || mknod /dev/portals c 10 240
200 if [ "$USEDEV" = "yes ]; then
201 do_insmod $PORTALS/linux/oslib/portals.o || exit -1
204 elan) do_insmod $PORTALS/linux/qswnal/kqswnal.o || exit -1
206 tcp) do_insmod $PORTALS/linux/socknal/ksocknal.o || exit -1
208 *) fail "$0: unknown NETWORK '$NETWORK'" ;;
216 connect $MDSNODE $PORT
218 connect $OSTNODE $PORT
228 [ -c /dev/obd ] || mknod /dev/obd c 10 241
230 if [ "$USEDEV" = "yes" ]; then
231 do_insmod $LUSTRE/obdclass/obdclass.o || exit -1
232 do_insmod $LUSTRE/ptlrpc/ptlrpc.o || exit -1
233 do_insmod $LUSTRE/ldlm/ldlm.o || exit -1
234 do_insmod $LUSTRE/extN/extN.o || \
235 echo "info: can't load extN.o module, not fatal if using ext3"
236 do_insmod $LUSTRE/mds/mds.o || exit -1
237 #do_insmod $LUSTRE/mds/mds_ext2.o || exit -1
238 #do_insmod $LUSTRE/mds/mds_ext3.o || exit -1
239 do_insmod $LUSTRE/mds/mds_extN.o || \
240 echo "info: can't load mds_extN.o module, needs extN.o"
241 do_insmod $LUSTRE/obdecho/obdecho.o || exit -1
242 #do_insmod $LUSTRE/obdext2/obdext2.o || exit -1
243 do_insmod $LUSTRE/obdfilter/obdfilter.o || exit -1
244 do_insmod $LUSTRE/ost/ost.o || exit -1
245 do_insmod $LUSTRE/osc/osc.o || exit -1
246 do_insmod $LUSTRE/mdc/mdc.o || exit -1
247 do_insmod $LUSTRE/lov/lov.o || exit -1
248 do_insmod $LUSTRE/llite/llite.o || exit -1
251 echo "$R/tmp/lustre-log" > /proc/sys/portals/debug_path
253 if $OBDCTL name2dev RPCDEV > /dev/null 2>&1; then
254 echo "$0: RPCDEV is already configured, skipping"
258 $OBDCTL <<- EOF || return $?
266 [ -d /mnt/lustre ] || mkdir /mnt/lustre
270 [ "$SETUP_LDLM" = "y" ] || return 0
272 [ -c /dev/portals ] || mknod /dev/portals c 10 240
274 $OBDCTL <<- EOF || return $?
285 echo "usage: $0 <devname>" 1>&2
293 [ "$SETUP_MDS" = "y" ] || return 0
295 if [ -z "$MDSFS" -o -z "$MDSDEV" ]; then
296 echo "error: setup_mds: MDSFS or MDSDEV unset" 1>&2
301 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
302 echo "usage: setup_mds {new_fs|old_fs}" 1>&2
306 if $OBDCTL name2dev MDSDEV > /dev/null 2>&1; then
307 echo "$0: MDSDEV is already configured"
311 $DO_FS ${MDSFS} ${MDSDEV} ${MDSSIZE}
314 $OBDCTL <<- EOF || return $?
316 attach mds MDSDEV MDSUUID
317 setup ${MDS} ${MDSFS}
325 [ "$SETUP_MDS" = "y" ] || return 0
327 if [ -z "$LOVUUID" ]; then
328 echo "No LOV configured"
332 $OBDCTL <<- EOF || return $?
335 lovconfig ${LOVUUID} 1 4096 0 OSCUUID
345 [ "$SETUP_OST" = "y" ] || return 0
347 if [ -z "$OSTTYPE" ]; then
348 echo "error: setup_ost: OSTTYPE unset" 1>&2
360 obdfilter) OBDARG=$OSTFS
363 *) echo "error: setup_ost: unknown OSTTYPE '$OSTTYPE'" 1>&2
368 if $OBDCTL name2dev OBDDEV > /dev/null 2>&1; then
369 echo "$0: OBDDEV is already configured"
373 if [ "$NEED_FS" = "y" ]; then
375 if [ -z "$OSTFS" -o -z "$OSTDEV" ]; then
376 echo "error: setup_ost: OSTFS or OSTDEV unset" 1>&2
380 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
381 echo "usage: setup_ost {new_fs|old_fs}" 1>&2
385 $DO_FS ${OSTFS} ${OSTDEV} ${OSTSIZE}
389 $OBDCTL <<- EOF || return $?
391 attach ${OSTTYPE} OBDDEV OBDUUID
392 setup ${OBD} ${OBDARG}
397 $OBDCTL <<- EOF || return $?
399 attach ost OSTDEV OSTUUID
407 #setup_mds $1 && setup_mds_lov $1 && setup_ost $1
408 setup_mds $1 && setup_ost $1
413 [ "$SETUP_OSC" != "y" ] && return 0
414 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
416 for THEOSC in $OSC_NAMES ; do
417 OSCDEVNO=`find_devno $THEOSC`
418 if $OBDCTL name2dev $THEOSC > /dev/null 2>&1; then
419 echo "$0: OSCDEV is already configured"
423 $OBDCTL <<- EOF || return $rc
425 attach osc $THEOSC ${THEOSC}-UUID
426 setup OBDUUID $OSTNODE
435 [ "$SETUP_MDC" != "y" ] && return 0
436 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
438 for THEMDC in $MDC_NAMES ; do
439 MDCDEVNO=`find_devno $THEMDC`
440 if $OBDCTL name2dev $THEMDC > /dev/null 2>&1; then
441 echo "$0: MDCDEV is already configured"
445 $OBDCTL <<- EOF || return $?
447 attach mdc $THEMDC ${THEMDC}-UUID
448 setup MDSUUID $MDSNODE
456 [ "$SETUP_MDC" != "y" ] && return 0
458 if [ -z "$LOVUUID" ]; then
459 echo "No LOV configured"
463 $OBDCTL <<- EOF || return $?
465 attach lov LOVNAME ${LOVUUID}
475 [ "$SETUP_MOUNT" != "y" ] && return 0
476 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
477 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
478 [ -z "$MOUNT_LIST" -a "$OSCMT" ] && MOUNT_LIST="MT" && MT="$OSCMT OSCDEV MDCDEV"
480 [ "$MOUNT_LIST" ] || fail "error: $0: MOUNT_LIST unset"
482 for THEMOUNT in $MOUNT_LIST; do
483 eval "echo \$$THEMOUNT" | while read MTPT THEOSC THEMDC; do
484 if mount | grep -q $MTPT; then
485 echo "$0: $MTPT is already mounted"
489 [ ! -d $MTPT ] && mkdir $MTPT
490 echo mount -t lustre_lite -o ost=${THEOSC}-UUID,mds=${THEMDC}-UUID none $MTPT
491 mount -t lustre_lite -o ost=${THEOSC}-UUID,mds=${THEMDC}-UUID none $MTPT
497 # setup_osc && setup_mdc && setup_lov && setup_mount
498 setup_osc && setup_mdc && setup_mount
501 DEBUG_ON="echo 0xffffffff > /proc/sys/portals/debug"
502 DEBUG_OFF="echo 0 > /proc/sys/portals/debug"
505 [ "$MDS_RSH" ] && echo "Turn OFF debug on MDS" && $MDS_RSH "$DEBUG_OFF"
506 [ "$OST_RSH" ] && echo "Turn OFF debug on OST" && $OST_RSH "$DEBUG_OFF"
510 [ "$MDS_RSH" ] && echo "Turn ON debug on MDS" && $MDS_RSH "$DEBUG_ON"
511 [ "$OST_RSH" ] && echo "Turn ON debug on OST" && $OST_RSH "$DEBUG_ON"
515 echo "Turning OFF debug on client" && $OSC_RSH "$DEBUG_OFF"
519 echo "Turning ON debug on client" && $OSC_RSH "$DEBUG_ON"
523 [ -z "$NETWORK" ] && NETWORK=tcp
571 [ "$SETUP" -a -z "$SETUP_LDLM" ] && return 0
573 LDLMDEVNO=`find_devno LDLMDEV`
574 if [ "$LDLMDEVNO" ]; then
585 [ "$SETUP" -a -z "$SETUP_MDS" ] && return 0
587 MDSDEVNO=`find_devno MDSDEV`
588 if [ "$MDSDEVNO" ]; then
599 [ "$SETUP" -a -z "$SETUP_OST" ] && return 0
601 OSTDEVNO=`find_devno OSTDEV`
602 if [ "$OSTDEVNO" ]; then
611 OBDDEVNO=`find_devno OBDDEV`
612 if [ "$OBDDEVNO" ]; then
623 cleanup_ost && cleanup_mds
628 [ "$SETUP_MOUNT" != "y" ] && return 0
629 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
630 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
631 [ -z "$MOUNT_LIST" -a "$OSCMT" ] && MOUNT_LIST="MT" && MT="$OSCMT OSCDEV MDCDEV"
633 [ "$MOUNT_LIST" ] || fail "error: $0: MOUNT_LIST unset"
635 for THEMOUNT in $MOUNT_LIST; do
636 eval "echo \$$THEMOUNT" | while read MTPT THEOSC THEMDC; do
637 if [ "`mount | grep $MTPT`" ]; then
638 umount $MTPT || fail "unable to unmount $MTPT"
645 [ "$SETUP" -a -z "$SETUP_OSC" ] && return 0
646 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
648 for THEOSC in $OSC_NAMES ; do
649 OSCDEVNO=`find_devno $THEOSC`
650 if [ "$OSCDEVNO" ]; then
662 [ "$SETUP" -a -z "$SETUP_MDC" ] && return 0
663 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
665 for THEMDC in $MDC_NAMES ; do
666 MDCDEVNO=`find_devno $THEMDC`
667 if [ "$MDCDEVNO" ]; then
679 RPCDEVNO=`find_devno RPCDEV`
680 if [ "$RPCDEVNO" ]; then
691 cleanup_mount && cleanup_osc && cleanup_mdc && cleanup_rpc
695 echo "ERROR: $1" 1>&2
696 [ $2 ] && RC=$2 || RC=1