160 lines
5.3 KiB
Bash
160 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
|
|
#Load engine configurator from engine.cfg file.
|
|
#Carga el configurador del engine desde el fichero engine.cfg
|
|
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
|
|
|
# Clear temporary file used as log track by httpdlog
|
|
# Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
|
|
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
|
|
|
|
# Registro de inicio de ejecución
|
|
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
|
|
|
# Solo ejecutable por OpenGnsys Client.
|
|
PATH=$PATH:$(dirname $0)
|
|
PROG=$(basename $0)
|
|
|
|
#____________________________________________________________________
|
|
#
|
|
# El parámetro $2 es el que aporta toda la información y el $1 se queda obsoleto
|
|
# Formato de entrada:
|
|
# dis=Número de disco
|
|
# *=caracter de separación
|
|
# che=Vale 0 o 1
|
|
# *=caracter de separación
|
|
# $tch=tamaño cache
|
|
# != caracter de separación
|
|
#
|
|
# Y un numero indeterminado de cadenas del tipo siguuenteseparadas por el caracter '$':
|
|
# par=Número de particion*cod=Código de partición*sfi=Sistema de ficheros*tam=Tamaño de la partición*ope=Operación
|
|
# @= caracter de separación
|
|
#____________________________________________________________________
|
|
|
|
# Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores).
|
|
#param='dis=1*che=0*tch=70000000!par=1*cpt=NTFS*sfi=NTFS*tam=11000000*ope=0%'
|
|
shift
|
|
param="$(echo $* | sed 's/[ ]//g')"
|
|
|
|
# Activa navegador para ver progreso
|
|
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
|
|
|
# Leer los dos bloques de parámetros, separados por '!'.
|
|
declare -a TBPRM
|
|
|
|
IFS='!' read -a TBPRM <<<"$param"
|
|
pparam="${TBPRM[0]}" # Parámetros generales del disco.
|
|
sparam="${TBPRM[1]}" # Parámetros de particionado y formateo.
|
|
|
|
|
|
# Toma valores de disco y caché, separados por "*".
|
|
# Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache.
|
|
unset TBPRM
|
|
IFS='*' read -a TBPRM <<<"$pparam"
|
|
[[ ${TBPRM} =~ = ]] && eval ${TBPRM[@]} # Comprobar asignación antes de exportar valores.
|
|
|
|
# Error si no se define el parámetro de disco (dis).
|
|
[ -z "$dis" ] && exit $OG_ERR_FORMAT
|
|
|
|
# Toma valores de distribución de particiones, separados por "%".
|
|
declare -a CFG # Valores de configuración.
|
|
declare -a TBP # Tabla de particionado.
|
|
declare -a TBF # Tabla de formateo.
|
|
|
|
unset TBPRM
|
|
IFS='%' read -a TBPRM <<<"$sparam"
|
|
|
|
maxp=0
|
|
for ((i=0; i<${#TBPRM[@]}; i++)); do
|
|
# Leer datos de la partición, separados por "*".
|
|
unset par
|
|
IFS='*' read -a CFG <<<"${TBPRM[i]}" 2>/dev/null
|
|
[[ ${CFG} =~ = ]] && eval ${CFG[@]} # Comprobar asignación antes de exportar valores.
|
|
# Componer datos de particionado.
|
|
if [ "$cpt" != "CACHE" ]; then
|
|
TBP[par]="$cpt:$tam"
|
|
fi
|
|
# Si se activa operación de formatear, componer datos de formateo.
|
|
if [ "$ope" == 1 ]; then
|
|
# Comprobamos que la particion y el s.f sean validos.
|
|
ogCheckStringInGroup $cpt "EMPTY EXTENDED LINUX-LVM LVM ZPOOL"
|
|
[ $? -ne 0 ] && TBF[par]="$sfi"
|
|
fi
|
|
# Obtener la partición mayor.
|
|
[ $par -gt $maxp ] && maxp=$par
|
|
done
|
|
#____________________________________________________
|
|
#
|
|
# Proceso
|
|
#____________________________________________________
|
|
|
|
# Tamaño actual de la cache
|
|
CACHESIZE=$(ogGetCacheSize)
|
|
|
|
# Desmonta todas las particiones y la caché
|
|
|
|
ogEcho session log "[10] $MSG_HELP_ogUnmountAll"
|
|
ogUnmountAll $dis &>/dev/null
|
|
ogUnmountCache
|
|
|
|
# Elimina la tabla de particiones
|
|
if [ `ogGetPartitionTableType 1` != 'MSDOS' ]; then
|
|
ogDeletePartitionTable $dis
|
|
ogExecAndLog COMMAND ogUpdatePartitionTable $dis
|
|
|
|
# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
|
|
ogCreatePartitionTable $dis MSDOS
|
|
fi
|
|
|
|
# Inicia la cache.
|
|
if echo "$sparam" |grep "CACHE" >/dev/null; then
|
|
ogEcho session log "[30] $MSG_HELP_ogCreateCache"
|
|
ogEcho session log " initCache $tch"
|
|
ogExecAndLog COMMAND initCache $tch
|
|
fi
|
|
|
|
# Definir particionado.
|
|
ogEcho session log "[50] $MSG_HELP_ogCreatePartitions"
|
|
ogEcho session log " ogCreatePartitions $dis ${TBP[@]}"
|
|
ogExecAndLog COMMAND ogCreatePartitions $dis ${TBP[@]}
|
|
if [ $? -ne 0 ]; then
|
|
kill $COPROC_PID
|
|
exit $(ogRaiseError session log $OG_ERR_GENERIC "ogCreatePartitions $dis ${TBP[@]}")
|
|
fi
|
|
ogExecAndLog COMMAND ogUpdatePartitionTable $dis
|
|
|
|
# Formatear particiones
|
|
ogEcho session log "[70] $MSG_HELP_ogFormat"
|
|
|
|
for ((par=1; par<=$maxp; par++)); do
|
|
case "${TBF[par]}" in
|
|
CACHE) # Si el tamaño es distinto ya se ha formateado.
|
|
if [ "$CACHESIZE" == $tch ]; then
|
|
ogEcho session log " ogFormatCache"
|
|
ogExecAndLog COMMAND ogFormatCache
|
|
fi
|
|
;;
|
|
"") ;;
|
|
*) ogEcho session log " ogFormatFs $dis $par ${TBF[par]}"
|
|
ogExecAndLog COMMAND ogFormatFs $dis $par ${TBF[par]}
|
|
if [ $? -ne 0 ]; then
|
|
kill $COPROC_PID
|
|
exit $(ogRaiseError session log $OG_ERR_GENERIC "ogFormatFs $dis $par ${TBF[par]}");
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
RETVAL=$?
|
|
# Registro de fin de ejecución
|
|
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
|
|
|
#___________________________________________________________________
|
|
#
|
|
# Retorno
|
|
#___________________________________________________________________
|
|
|
|
kill $COPROC_PID
|
|
exit 0
|
|
|