You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
3.4 KiB
198 lines
3.4 KiB
#!/bin/sh
|
|
|
|
. /etc/init.d/globals
|
|
|
|
SRVFLAG=/var/etc/.srv
|
|
|
|
MTAB=/etc/mtab
|
|
FSTAB=/etc/fstab
|
|
FSTAB_VAR=/var/etc/fstab
|
|
|
|
is_mount()
|
|
{
|
|
RET=1
|
|
test -f $MTAB || return $RET
|
|
while read _DEV _MTPT _FSTYPE _OPTS _REST
|
|
do
|
|
case "$_FSTYPE" in
|
|
"tmpfs")
|
|
continue
|
|
;;
|
|
esac
|
|
case "$1" in
|
|
"$_DEV"|"$_MTPT")
|
|
RET=0
|
|
break
|
|
;;
|
|
esac
|
|
done < $MTAB
|
|
return $RET
|
|
}
|
|
|
|
mount_local()
|
|
{
|
|
SHOWINFO "mount all local stuff from $FSTAB"
|
|
test -f $FSTAB || return
|
|
while read DEV MTPT FSTYPE OPTS REST
|
|
do
|
|
case "$DEV" in
|
|
""|\#*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$OPTS" in
|
|
noauto|*,noauto|noauto,*|*,noauto,*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$FSTYPE" in
|
|
swap)
|
|
#SHOWINFO "enable all swaps from $FSTAB"
|
|
#swapon -a
|
|
SHOWINFO "ignoring all swaps from $FSTAB"
|
|
continue
|
|
;;
|
|
nfs|cifs)
|
|
continue
|
|
;;
|
|
*)
|
|
test -d $MTPT || mkdir -p $MTPT;
|
|
SHOWINFO "trying to mount $DEV to $MTPT"
|
|
if OUT=$(mount $MTPT 2>&1 >/dev/null)
|
|
then
|
|
RET=$?
|
|
LOGINFO "mount: $MTPT - success ($RET)"
|
|
else
|
|
RET=$?
|
|
LOGWARN "mount: $MTPT - failed ($RET)"
|
|
echo "$OUT" | LOGWARN
|
|
fi
|
|
;;
|
|
esac
|
|
done < $FSTAB
|
|
}
|
|
|
|
mount_netfs()
|
|
{
|
|
SHOWINFO "mount all netfs stuff from $FSTAB_VAR"
|
|
test -f $FSTAB_VAR || return
|
|
rm -f $SRVFLAG
|
|
while read DEV MTPT FSTYPE OPTS REST
|
|
do
|
|
case "$DEV" in
|
|
""|\#*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$OPTS" in
|
|
noauto|*,noauto|noauto,*|*,noauto,*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$FSTYPE" in
|
|
nfs|cifs)
|
|
if ! is_mount $MTPT; then
|
|
test -d $MTPT || mkdir -p $MTPT;
|
|
SHOWINFO "trying to mount $DEV to $MTPT"
|
|
(
|
|
try=51
|
|
while(true); do
|
|
if OUT=$(mount -t $FSTYPE -o $OPTS $DEV $MTPT 2>&1 >/dev/null); then
|
|
RET=$?
|
|
LOGINFO "mount: $MTPT - success ($RET)"
|
|
test -e $SRVFLAG || touch $SRVFLAG
|
|
break
|
|
else
|
|
RET=$?
|
|
LOGWARN "mount: $MTPT - failed ($RET)"
|
|
echo "$OUT" | LOGWARN
|
|
if [ ${try:1:1} -eq ${try:0:1} ]; then
|
|
LOGWARN "mount: $MTPT - cancel!"
|
|
break
|
|
fi
|
|
try=$((try+1))
|
|
LOGWARN "mount: $MTPT - try ${try:1:1} in 30 seconds ..."
|
|
sleep 30
|
|
fi
|
|
done
|
|
) &
|
|
else
|
|
SHOWINFO "already mounted $MTPT"
|
|
test -e $SRVFLAG || touch $SRVFLAG
|
|
fi
|
|
;;
|
|
*)
|
|
continue
|
|
;;
|
|
esac
|
|
done < $FSTAB_VAR
|
|
}
|
|
|
|
umount_netfs()
|
|
{
|
|
SHOWINFO "unmount all netfs stuff from $MTAB"
|
|
test -f $MTAB || return
|
|
rm -f $SRVFLAG
|
|
while read DEV MTPT FSTYPE OPTS REST
|
|
do
|
|
case "$OPTS" in
|
|
noauto|*,noauto|noauto,*|*,noauto,*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$FSTYPE" in
|
|
nfs|cifs)
|
|
SHOWINFO "trying to unmount $DEV from $MTPT"
|
|
(
|
|
if OUT=$(umount -f $MTPT 2>&1 >/dev/null); then
|
|
RET=$?
|
|
LOGINFO "umount: $MTPT - success ($RET)"
|
|
else
|
|
RET=$?
|
|
LOGWARN "umount: $MTPT - failed ($RET)"
|
|
echo "$OUT" | LOGWARN
|
|
test -e $SRVFLAG || touch $SRVFLAG
|
|
fi
|
|
) &
|
|
;;
|
|
*)
|
|
continue
|
|
;;
|
|
esac
|
|
done < $MTAB
|
|
}
|
|
|
|
if [ -e /tmp/.flash.start ]; then
|
|
SHOWINFO "flash.start flag found"
|
|
umount_netfs
|
|
SHOWINFO "exiting"
|
|
exit 0
|
|
fi
|
|
|
|
case "$1" in
|
|
"start")
|
|
mount_local
|
|
mount_netfs
|
|
;;
|
|
"start_netfs")
|
|
mount_netfs
|
|
;;
|
|
"stop_netfs")
|
|
umount_netfs
|
|
;;
|
|
"stop")
|
|
umount_netfs
|
|
|
|
#SHOWINFO "unmount all sysfs, tmpfs, devpts and usbfs mounts"
|
|
#umount -a -t sysfs, tmpfs, devpts, usbfs
|
|
|
|
#SHOWINFO "disable all swaps"
|
|
#swapoff -a
|
|
|
|
#SHOWINFO "detach jffs2 filesystems"
|
|
#umount -l -t jffs2
|
|
;;
|
|
*)
|
|
echo "[$BASENAME] Usage: $0 {start|start_netfs|stop_netfs|stop}"
|
|
;;
|
|
esac
|
|
|