20171114

Clonar sistema de archivos ZFS

#!/usr/bin/bash
#set -x
#######################################################################
# movezone.sh - clonar zona 
#######################################################################
DATE=`date +%d%m%y%H%M%S`
DAY=`date +%d`
HOUR=`date +%H`
MIN=`date +%M`
LOG=/var/log/scripts/movezone.log


function uso
{
echo "movezone -z {zona} -t {servidor destino}"
echo "- o -"
echo "movezone -t {servidor destino} -z {zona}"
}

function copiaconfig
{
zonecfg -z ${ZONE} export > /export/zones/backup/${ZONE}.cfg
scp /export/zones/backup/${ZONE}.cfg root@${TARGET}:/export/zones/backup 2>&1 >> ${LOG}
scp /etc/zones/${ZONE}.xml root@${TARGET}:/export/zones/backup  2>&1 >> ${LOG}
}

function borrasnaps
{
zfs destroy -r zones/${ZONE}@backup 2>&1 >> ${LOG}
ssh root@${TARGET}  "zfs destroy -r zones/${ZONE}@backup"  2>&1 >> ${LOG}
}

function stopzona
{
zoneadm -z ${ZONE} halt  2>&1 >> ${LOG}
}

function  snapahora
{
zfs snapshot -r zones/${ZONE}@backup  2>&1 >> ${LOG}
}

function copiazona
{
zfs send -vRp zones/${ZONE}@backup|ssh root@${TARGET} "zfs recv -vF zones/${ZONE}" 2>&1 >> ${LOG}
}

function  iniciarremoto
{
ssh root@${TARGET}  "zoneadm -z ${ZONE} boot"  2>&1 >> ${LOG}
ssh root@${TARGET} "/root/globalzonename.sh" 2>&1 >> ${LOG}
}

##############################
# get command line
##############################

if [ "$1" == "" ]
then
uso
exit
fi

for i in "$@"
do
case $i in
-z)
ZONE="$2"
shift
shift
;;
-t)
TARGET="$2"
shift
shift
;;
esac
done

grep ${TARGET} /etc/hosts 2>&1 > /dev/null
if [ $? -ne 0 ]
then
echo "Destino [${TARGET}] no encontrado"
exit
fi

zoneadm list -vc|grep ${ZONE}  2>&1 > /dev/null
if [ $? -ne 0 ]
then
echo "Zona [${ZONE}] no encontrada"
exit
fi

zoneadm list -v|grep running|grep ${ZONE}  2>&1 > /dev/null
if [ $? -ne 0 ]
then
echo "Zona [${ZONE}] no ejecutandose"
#exit
fi

echo "${DATE}:*** Iniciando movimiento de ${ZONE}" >> ${LOG}
copiaconfig
borrasnaps
stopzona
snapahora
copiazona
iniciarremoto
DATE=`date +%m%d%y%H%M%S` duration=$SECONDS durationminutes="$(($duration / 60))" durationseconds="$(($duration % 60))" durationmsg="${durationminutes} minutos y ${durationseconds} segundos." echo "${durationmsg}" >> ${LOG} echo "${DATE}:*** Terminado el movimiento de ${ZONE}" >> ${LOG} echo "*** Terminado el movimiento de${ZONE} - ${durationmsg} ***" #exit

No hay comentarios:

Publicar un comentario