diff --git a/FreeBSD/vm-backup.csh b/FreeBSD/vm-backup.csh new file mode 100644 index 0000000..e957dff --- /dev/null +++ b/FreeBSD/vm-backup.csh @@ -0,0 +1,54 @@ +#!/bin/csh + +## config section +set vm_dataset = "zroot/vms" +set backup_dataset = "tank/backup/bhyve" +set backup_date = `date "+%Y-%m-%d"` + +# Snapshot all VMs +echo "" +echo "################# SNAPSHOT VM #################" +foreach vm (`ls /usr/vms | \ + grep -v .config | \ + grep -v .iso | \ + grep -v .templates`) + + ## stopping vm + vm stop $vm + + ## give vm time to shut down properly + sleep 5 + + ## snapshot vm + echo "Snapshot VM: $vm" + zfs snapshot $vm_dataset/$vm@$backup_date + echo "" + + ## start VM + vm start $vm + echo "" + +end + +# Backup all VM snapshots +echo "" +echo "################## BACKUP VM ##################" +foreach vm (`ls /usr/vms | \ + grep -v .config | \ + grep -v .iso | \ + grep -v .templates`) + + ## Send snapshot to backup destination + echo "Backup VM: $vm" + zfs send $vm_dataset/$vm@$backup_date | pv | zfs recv -F $backup_dataset/$vm + echo "" + + ## Delete snapshot + zfs destroy $vm_dataset/$vm@$backup_date + +end + +# report done +echo "" +echo "############### ALL DONE THANKS ###############" +echo ""