Переглянути джерело

añado delete-cores y llevo a cabo cambios mayores en el zonebackuptofile

develop^2
Pablo Sarria 10 місяці тому
джерело
коміт
26569b949f
2 змінених файлів з 129 додано та 64 видалено
  1. +2
    -0
      delete-cores.sh
  2. +127
    -64
      zonebackuptofile.sh

+ 2
- 0
delete-cores.sh Переглянути файл

@@ -0,0 +1,2 @@
#!/usr/bin/bash
zfs list -H | grep "cores$" | grep -v "global" | awk '$2 ~ /G/ { print "find",$5,"-type f -delete"}' | /usr/bin/sh

+ 127
- 64
zonebackuptofile.sh Переглянути файл

@@ -2,100 +2,163 @@

usage()
{
echo "Usage: $0 -z UUID -d days -r remote_folder -l local_folder -s server -t type" >&2
echo "ex: $0 -z bbba5ecb-5bda-47a5-e103-a6bfa368bf68 -d 1 -r remote_folder -l /zone/tools/nfsshare -s 192.168.5.243 -t nfs" >&2
echo "Usage: $0 [ -z UUID ] [ -h hostname ] [ -p port ] [ -k KEY ] [ -n name ] [ -d dir ]" >&2
exit 1
}

while getopts "z:d:r:l:s:t:" opt;
while getopts "z:h:p:k:n:d:" opt;
do
case "$opt" in
z)
UUID=$OPTARG
;;
UUID=$OPTARG
;;
h)
HOSTNAME=$OPTARG
;;
n)
NAME=$OPTARG
;;
p)
PORT=$OPTARG
;;
k)
KEY=$OPTARG
;;
d)
DAYS=$OPTARG
;;
r)
RFOLDER=$OPTARG
;;
l)
LFOLDER=$OPTARG
;;
s)
SERVER=$OPTARG
;;
t)
TYPE=$OPTARG
;;
DIR=$OPTARG
;;

\?)
echo "Error: Invalid Option: -${OPTARG}" >&2
usage
;;
:)
echo "Error: -${OPTARG} requires an argument."
usage
;;
*)
usage
;;
usage
;;
esac
done

shift $((OPTIND-1))

if [ -z "${UUID}" || -z "${DAYS}" || -z "${RFOLDER}" || -z "${LFOLDER}" || -z "${SERVER}" && -z "${TYPE}" ]; then
if [ -z "${UUID}" ] || [ -z "${HOSTNAME}" ] || [ -z ${PORT} ] || [ -z ${KEY} ] || [ -z "${NAME}" ] || [ -z "${DIR}" ]; then
usage
fi

BRAND=`/usr/sbin/vmadm get $UUID | json brand | tr -d '\n'`
SSH="ssh -i $KEY -p ${PORT} -o StrictHostKeyChecking=no"
DSTDIR="${DIR}/${NAME}"

mkdir -p $LFOLDER
#################
# functions
#################

if [ $TYPE = "nfs" ]; then
OVH="/export/ftpbackup/${RFOLDER}"
mount $SERVER:$OVH $LFOLDER
create_snap()
{
DATASET=$1
echo "Creating snapshot of ${DATASET}..."
/usr/sbin/zfs snapshot zones/${DATASET}@`date +%Y%m%d`
check_err
echo "...done."
}

if [ $? != 0 ]; then
echo "MOUNT FAILED."
umount $LFOLDER
exit
fi
elif [ $TYPE = "smb" ]; then
mount -F smbfs //o6h.smartos5:c0c0l1s0@${SERVER}/${RFOLDER} $LFOLDER
send_snap()
{
DATASET=$1
echo "Sending snapshot of ${DATASET}..."

if [ $? != 0 ]; then
echo "MOUNT FAILED."
exit
# taking care for additional datasets
SLASH=`echo ${DATASET} | grep -c '/'`

if [ ${SLASH} -ne 0 ]; then
RENAME=`echo ${DATASET} | sed 's/\//-/'`
/usr/sbin/zfs send zones/${DATASET}@`date +%Y%m%d` | ${SSH} ${HOSTNAME} "dd of=${DSTDIR}/${UUID}/${RENAME}.zfs bs=4M"
else
/usr/sbin/zfs send zones/${DATASET}@`date +%Y%m%d` | ${SSH} ${HOSTNAME} "dd of=${DSTDIR}/${DATASET}/${DATASET}.zfs bs=4M"
fi
fi

mkdir -p $LFOLDER/$UUID
check_err
echo "...done."
}

if [ $? != 0 ]; then
echo "FAIL TO CREATE FOLDER $UUID."
umount $LFOLDER
exit
fi
check_snap()
{
ZONE=$1
echo "Checking for snapshot of ${ZONE}..."
zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2>/dev/null 1>&2
}

# mantain backups of the last N days
#find $LFOLDER/$UUID -type f -mtime +$DAYS -delete
check_err()
{
STATUS=$?
if [ ${STATUS} -ne 0 ]; then
echo "Unexpected error: ${STATUS}"
exit ${STATUS}
fi
}

snapshot()
send_config()
{
/usr/sbin/zfs snapshot zones/$1@`date +%Y%m%d`
/usr/sbin/zfs send zones/$1@`date +%Y%m%d` > $LFOLDER/$UUID/$1@`date +%Y%m%d`
echo "Sending config to ${HOSTNAME}..."
zonecfg -z ${UUID} export | ${SSH} ${HOSTNAME} "dd of=${DSTDIR}/${UUID}/${UUID}.cfg"
check_err
echo "...done."
}

snapshot $UUID
create_dir()
{
echo "Creating directory at ${HOSTNAME}..."
${SSH} ${HOSTNAME} mkdir -p ${DSTDIR}/${UUID}
check_err
echo "...done."
}

if [ $BRAND = "kvm" ]
then
snapshot ${UUID}-disk0
elif [ $BRAND = "bhyve" ]
then
snapshot ${UUID}/disk0
fi
check_multidataset()
{
echo "Looking for addtional children datasets in ${UUID}..."
DATASET=`vmadm get ${UUID} | json datasets.0 | sed 's/zones\///' | tr -d '\n'`
echo "...done."

if [ ! -z "${DATASET}" ]; then
echo "Finded children dataset: ${DATASET}"
check_snap ${DATASET}

if [ $? -ne 0 ]; then
create_snap ${DATASET}
else
echo "Snapshot of ${DATASET} already available"
echo "Skipping create snapshot..."
fi
send_snap ${DATASET}
else
echo "No children datasets finded."
fi
}

/usr/sbin/zonecfg -z $UUID export > $LFOLDER/$UUID/$UUID.`date +%Y%m%d`.cfg
#################
# main
#################

if [ $TYPE = "nfs" ]; then
umount $LFOLDER
echo "---
BACKUP_SERVER: ${HOSTNAME}
UUID to backup: ${UUID}
---"

create_dir ${UUID}

check_snap ${UUID}

if [ $? -ne 0 ]; then
create_snap ${UUID}
else
echo "Snapshot of ${UUID} already available"
echo "...done."
fi

## TODO
# smb: query for username
# smb: query for password
send_snap ${UUID}

check_multidataset

send_config

Завантаження…
Відмінити
Зберегти