scripts/FreeBSD/vm/vm-backup.bash

79 lines
1.5 KiB
Bash
Raw Normal View History

#!/usr/local/bin/bash
## config section
vm=$1
vm_dataset="zroot/vms"
vm_pid=`/usr/bin/pgrep -f "bhyve: $vm"`
backup_location="/tank/backup/vms/"
backup_date=`date "+%Y-%m-%d"`
2021-02-10 18:35:24 +01:00
enc_password="supersecretstuff"
default_state="started"
state="${2:-$default_state}"
# snapshot vm
echo ""
for vm in $vm; do
## prepare
echo "################## PREPARE ####################"
if [ $vm_pid != 0 ]
then
(vm stop $vm > /dev/null) >& /dev/null
### check when vm is shutdown properly
echo "Waiting for $vm to shutdown properly"
while [[ ${?} == 0 ]]
do
ps -p $vm_pid > /dev/null
done
fi
echo ""
echo "################## SNAPSHOT ###################"
echo "Making a snapshot of $vm"
sleep 1
## create snapshot
2021-02-10 18:35:24 +01:00
zfs snapshot -r $vm_dataset/$vm@$backup_date
2021-02-10 18:35:24 +01:00
## start VM if required
if [ $state = "started" ]
then
echo "Starting $vm"
(vm start $vm > /dev/null) >& /dev/null
fi
done
# backup vm snapshot
echo ""
echo "################## BACKUP VM ##################"
for vm in $vm; do
echo "Send snapshot to local backup destination"
sleep 1
## send snapshot to backup destination
2021-02-10 18:35:24 +01:00
zfs send -Rc $vm_dataset/$vm@$backup_date | \
pigz -c -p 4 | \
2021-02-10 18:35:24 +01:00
openssl enc \
-aes-256-ctr \
-a \
-pbkdf2 \
-iter 1000 \
-salt \
-k $enc_password \
> $backup_location/$vm-$backup_date.pigz.enc
## delete snapshot
sleep 1
2021-02-10 18:35:24 +01:00
zfs destroy -r $vm_dataset/$vm@$backup_date
done
# report done
echo ""
echo "############### ALL DONE THANKS ###############"
echo ""