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=$LUSTRE/utils/lctl
14 DBGCTL=$LUSTRE/utils/lctl
15 ACCEPTOR=$PORTALS/linux/utils/acceptor
17 OBDCTL=$LUSTRE/utils/lctl
20 # should have configure set the paths here
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 lsmod | grep -q "\<$BASE\>" && return 0
45 [ "$MODULE" ] || fail "usage: $0 <module>"
47 if [ "$USEDEV" = "yes" ]; then
48 [ -f $MODULE ] || echo "$0: module '$MODULE' not found" 1>&2
57 [ "$MODULE" ] || fail "usage: $0 <module>"
58 lsmod | grep -q $MODULE || return 0
59 rmmod $MODULE || lsmod | sed "s/^/$MODULE failed: /"
62 # Return the next unused loop device on stdout and in the $LOOPDEV
63 # environment variable.
66 while [ -b ${LOOP}${LOOPNUM} ]; do
67 LOOPDEV=${LOOP}${LOOPNUM}
68 losetup ${LOOPDEV} > /dev/null 2>&1 || NEXT=${LOOPDEV}
69 LOOPNUM=`expr ${LOOPNUM} + 1`
70 [ "$NEXT" ] && echo ${NEXT} && break
74 # Create a new filesystem. If we are using a loopback device, we check
75 # for existing "template" filesystems instead of creating a new one,
76 # because it is _much_ faster to gunzip the empty filesystem instead of
77 # creating a new one from scratch. Conversely, if we are creating a
78 # filesystem on a device we use mkfs, because that only writes sparsely
79 # to the device. The empty filesystems are also highly compressed (1000:1)
80 # so they don't take too much space.
83 echo "new_fs <fstype> {device | file} [size]" 1>&2
91 [ "$1" = "ext3" ] && MKFS="mkfs.ext2 -j"
92 if [ "$1" = "extN" ]; then
98 [ $# -lt 2 -o $# -gt 3 ] && new_fs_usage
101 [ -r "$PM" ] || PM="/etc/mtab"
103 grep "$2 " $PM 1>&2 && echo "$0: $2 is in $PM!" 1>&2 && exit -1
105 $MKFS $MKFSOPT $2 $3 || exit -1
106 LOOPDEV=$2 # Not really a loop device
108 [ $# -ne 3 ] && new_fs_usage
110 if [ -r "$EFILE" ]; then
111 echo "using prepared filesystem $EFILE for $2"
112 zcat "$EFILE" > $2 || exit -1
115 echo "creating new sparse filesystem on $2"
116 dd if=/dev/zero of=$2 bs=1k seek=$3 count=1 1>&2 || exit -1
117 $MKFS $MKFSOPT -F $2 1>&2 || exit -1
119 LOOPDEV=`next_loop_dev`
120 losetup ${LOOPDEV} $2 1>&2 || exit -1
123 # Enable hash-indexed directories for extN filesystems
124 [ "$1" = "extN" ] && echo "feature FEATURE_C5" | debugfs -w $2
127 # Set up to use an existing filesystem. We take the same parameters as
128 # new_fs, even though we only use the <fstype> and <file> parameters, to
129 # make it easy to convert between new_fs and old_fs in testing scripts.
134 LOOPDEV=$2 # Not really a loop device
136 LOOPDEV=`next_loop_dev`
137 losetup ${LOOPDEV} $2 1>&2 || exit -1
142 $DBGCTL modules > $R/tmp/ogdb
143 echo "The GDB module script is in $R/tmp/ogdb"
144 [ "$DEBUG_WAIT" = "yes" ] && echo -n "Press ENTER to continue" && read < /dev/tty
148 # start acceptor for a given network and port.
149 # not all networks need an acceptor
152 elan) [ "$PORT" ] && fail "$0: NETWORK is elan but PORT is set"
154 tcp) [ "$PORT" ] || fail "$0: NETWORK is tcp but PORT is not set"
155 $ACCEPTOR -r 1048576 -s 1048576 $PORT
157 *) fail "$0: unknown NETWORK '$NETWORK'" ;;
162 # We need at least one setup file to be given. It can be passed on
163 # the command-line, or it can be found in the home directory, or it
164 # can even be sourced into the current shell environment.
166 DEF=/etc/lustre/lustre.cfg
167 if [ "$#" = 0 -a -r $DEF ]; then
173 *.cfg) [ -r "$CFG" ] && . $CFG && SETUP=y ;;
174 *) echo "unknown option '$CFG'" 1>&2
178 if [ "$SETUP" != "y" ]; then
179 echo "error: no config file on command-line and no $DEF" 1>&2
183 [ "$MDC_NAMES" ] || export MDC_NAMES=MDCDEV
184 [ "$OSC_NAMES" ] || export OSC_NAMES=OSCDEV
185 [ -z "$MOUNT_LIST" -a "$OSCMT" ] && export MOUNT_LIST="MT" && export MT="$OSCMT OSCDEV MDCDEV"
189 [ -z "$OSTNODE" ] && OSTNODE=$SERVER
190 [ -z "$MDSNODE" ] && MDSNODE=$SERVER
191 [ -z "$DLM" ] && DLM=$SERVER
197 if egrep -q "ksocknal|kqswnal" /proc/modules; then
198 echo "$0: portals already appears to be set up, skipping"
202 if [ -z "$NETWORK" -o -z "$LOCALHOST" ]; then
203 echo "$0: NETWORK or LOCALHOST is not set" 1>&2
207 if [ -z "$OSTNODE" -a -z "$MDSNODE" -a -z "$DLM" ]; then
208 echo "$0: SERVER (or OSTNODE and MDSNODE and DLM) not set" 1>&2
212 [ -c /dev/portals ] || mknod /dev/portals c 10 240
214 do_insmod $PORTALS/linux/oslib/portals.o || exit -1
215 #do_insmod $PORTALS/linux/router/kptlrouter.o || exit -1
218 elan) do_insmod $PORTALS/linux/rqswnal/kqswnal.o || exit -1
223 tcp) do_insmod $PORTALS/linux/socknal/ksocknal.o || exit -1
224 MYNID="mynid $LOCALHOST"
225 RECV_MEM="recv_mem 1048576"
226 SEND_MEM="send_mem 1048576"
228 *) fail "$0: unknown NETWORK '$NETWORK'" ;;
240 add_uuid self $LOCALHOST
244 if [ "$SETUP_MDS" -o "$SETUP_MDC" ]; then
247 connect $MDSNODE $PORT
248 add_uuid $MDSNODE $MDSNODE
254 if [ "$SETUP_OST" -o "$SETUP_OSC" ]; then
257 connect $OSTNODE $PORT
258 add_uuid $OSTNODE $OSTNODE
265 [ -c /dev/obd ] || mknod /dev/obd c 10 241
267 do_insmod $LUSTRE/obdclass/obdclass.o || exit -1
268 do_insmod $LUSTRE/ptlrpc/ptlrpc.o || exit -1
269 do_insmod $LUSTRE/ldlm/ldlm.o || exit -1
270 do_insmod $LUSTRE/extN/extN.o || \
271 echo "info: can't load extN.o module, not fatal if using ext3"
272 do_insmod $LUSTRE/mds/mds.o || exit -1
273 #do_insmod $LUSTRE/mds/mds_ext2.o || exit -1
274 #do_insmod $LUSTRE/mds/mds_ext3.o || exit -1
275 do_insmod $LUSTRE/mds/mds_extN.o || \
276 echo "info: can't load mds_extN.o module, needs extN.o"
277 do_insmod $LUSTRE/obdecho/obdecho.o || exit -1
278 #do_insmod $LUSTRE/obdext2/obdext2.o || exit -1
279 do_insmod $LUSTRE/obdfilter/obdfilter.o || exit -1
280 do_insmod $LUSTRE/ost/ost.o || exit -1
281 do_insmod $LUSTRE/osc/osc.o || exit -1
282 do_insmod $LUSTRE/mdc/mdc.o || exit -1
283 do_insmod $LUSTRE/lov/lov.o || exit -1
284 do_insmod $LUSTRE/llite/llite.o || exit -1
286 echo "$R/tmp/lustre-log" > /proc/sys/portals/debug_path
288 if $OBDCTL name2dev RPCDEV > /dev/null 2>&1; then
289 echo "$0: RPCDEV is already configured, skipping"
294 $OBDCTL <<- EOF || return $?
301 [ -d /mnt/lustre ] || mkdir /mnt/lustre
305 [ "$SETUP_LDLM" = "y" ] || return 0
307 [ -c /dev/portals ] || mknod /dev/portals c 10 240
309 $OBDCTL <<- EOF || return $?
311 attach ldlm LDLMDEV LDLMUUID
319 echo "usage: $0 <devname>" 1>&2
327 [ "$SETUP_MDS" = "y" ] || return 0
329 if [ -z "$MDSFS" -o -z "$MDSDEV" ]; then
330 echo "error: setup_mds: MDSFS or MDSDEV unset" 1>&2
335 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
336 echo "usage: setup_mds {new_fs|old_fs}" 1>&2
340 if $OBDCTL name2dev MDSDEV > /dev/null 2>&1; then
341 echo "$0: MDSDEV is already configured"
345 $DO_FS ${MDSFS} ${MDSDEV} ${MDSSIZE}
348 $OBDCTL <<- EOF || return $?
350 attach mds MDSDEV MDSUUID
351 setup ${MDS} ${MDSFS}
357 [ "$SETUP_MDS" = "y" ] || return 0
359 if [ -z "$LOVUUID" ]; then
360 echo "No LOV configured"
364 $OBDCTL <<- EOF || return $?
367 lovconfig ${LOVUUID} 1 4096 0 OSCDEV-`hostname`
375 [ "$SETUP_OST" = "y" ] || return 0
377 if [ -z "$OSTTYPE" ]; then
378 echo "error: setup_ost: OSTTYPE unset" 1>&2
390 obdfilter) OBDARG=$OSTFS
393 *) echo "error: setup_ost: unknown OSTTYPE '$OSTTYPE'" 1>&2
398 if $OBDCTL name2dev OBDDEV > /dev/null 2>&1; then
399 echo "$0: OBDDEV is already configured"
403 if [ "$NEED_FS" = "y" ]; then
405 if [ -z "$OSTFS" -o -z "$OSTDEV" ]; then
406 echo "error: setup_ost: OSTFS or OSTDEV unset" 1>&2
410 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
411 echo "usage: setup_ost {new_fs|old_fs}" 1>&2
415 $DO_FS ${OSTFS} ${OSTDEV} ${OSTSIZE}
419 $OBDCTL <<- EOF || return $?
421 attach ${OSTTYPE} OBDDEV OBDUUID
422 setup ${OBD} ${OBDARG}
426 $OBDCTL <<- EOF || return $?
428 attach ost OSTDEV OSTUUID
435 #setup_mds $1 && setup_mds_lov $1 && setup_ost $1
436 setup_mds $1 && setup_ost $1
440 [ "$SETUP_OSC" != "y" ] && return 0
441 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
443 for THEOSC in $OSC_NAMES ; do
444 if $OBDCTL name2dev $THEOSC > /dev/null 2>&1; then
445 echo "$0: OSCDEV is already configured"
449 [ -z "$OBD_UUID" ] && OBD_UUID="OBDUUID"
450 $OBDCTL <<- EOF || return $rc
452 attach osc $THEOSC ${THEOSC}-`hostname`
453 setup $OBD_UUID $OSTNODE
460 [ "$SETUP_MDC" != "y" ] && return 0
461 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
463 for THEMDC in $MDC_NAMES ; do
464 if $OBDCTL name2dev $THEMDC > /dev/null 2>&1; then
465 echo "$0: MDCDEV is already configured"
469 $OBDCTL <<- EOF || return $?
471 attach mdc $THEMDC ${THEMDC}-`hostname`
472 setup MDSUUID $MDSNODE
479 [ "$SETUP_MDC" != "y" ] && return 0
481 if [ -z "$LOVUUID" ]; then
482 echo "No LOV configured"
486 $OBDCTL <<- EOF || return $?
488 attach lov LOVNAME ${LOVUUID}
489 setup MDCDEV-`hostname`
496 [ "$SETUP_MOUNT" != "y" ] && return 0
498 [ "$MOUNT_LIST" ] || fail "error: $0: MOUNT_LIST unset"
500 for THEMOUNT in $MOUNT_LIST; do
501 eval "echo \$$THEMOUNT" | while read MTPT THEOSC THEMDC; do
502 if mount | grep -q $MTPT; then
503 echo "$0: $MTPT is already mounted"
507 [ ! -d $MTPT ] && mkdir $MTPT
508 echo mount -t lustre_lite -o osc=${THEOSC}-`hostname`,mdc=${THEMDC}-`hostname` none $MTPT
509 mount -t lustre_lite -o osc=${THEOSC}-`hostname`,mdc=${THEMDC}-`hostname` none $MTPT
515 # setup_osc && setup_mdc && setup_lov && setup_mount
516 setup_osc && setup_mdc && setup_mount
519 DEBUG_ON="echo 0xffffffff > /proc/sys/portals/debug"
520 DEBUG_OFF="echo 0 > /proc/sys/portals/debug"
523 echo "Turn OFF debug" && eval "$DEBUG_OFF"
527 echo "Turn ON debug" && eval "$DEBUG_ON"
531 echo "Turning OFF debug on client" && eval "$DEBUG_OFF"
535 echo "Turning ON debug on client" && eval "$DEBUG_ON"
539 [ -z "$NETWORK" ] && NETWORK=tcp
561 [ "$TIME" ] && $DBGCTL debug_kernel $R/tmp/debug.5.$TIME
590 [ "$SETUP" -a -z "$SETUP_LDLM" ] && return 0
592 LDLMDEVNO=`find_devno LDLMDEV`
593 if [ "$LDLMDEVNO" ]; then
604 [ "$SETUP" -a -z "$SETUP_MDS" ] && return 0
606 MDSDEVNO=`find_devno MDSDEV`
607 if [ "$MDSDEVNO" ]; then
618 [ "$SETUP" -a -z "$SETUP_OST" ] && return 0
620 OSTDEVNO=`find_devno OSTDEV`
621 if [ "$OSTDEVNO" ]; then
630 OBDDEVNO=`find_devno OBDDEV`
631 if [ "$OBDDEVNO" ]; then
642 cleanup_ost && cleanup_mds
646 [ "$SETUP_MOUNT" != "y" ] && return 0
648 [ "$MOUNT_LIST" ] || fail "error: $0: MOUNT_LIST unset"
650 for THEMOUNT in $MOUNT_LIST; do
651 eval "echo \$$THEMOUNT" | while read MTPT THEOSC THEMDC; do
652 if [ "`mount | grep $MTPT`" ]; then
653 umount $MTPT || fail "unable to unmount $MTPT"
660 [ "$SETUP" -a -z "$SETUP_OSC" ] && return 0
661 [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
663 for THEOSC in $OSC_NAMES ; do
664 OSCDEVNO=`find_devno $THEOSC`
665 if [ "$OSCDEVNO" ]; then
677 [ "$SETUP" -a -z "$SETUP_MDC" ] && return 0
678 [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
680 for THEMDC in $MDC_NAMES ; do
681 MDCDEVNO=`find_devno $THEMDC`
682 if [ "$MDCDEVNO" ]; then
694 RPCDEVNO=`find_devno RPCDEV`
695 if [ "$RPCDEVNO" ]; then
706 cleanup_mount && cleanup_osc && cleanup_mdc && cleanup_rpc
710 echo "ERROR: $1" 1>&2
711 [ $2 ] && RC=$2 || RC=1