#!/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 15 ## 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`) ## Create ZFS dataset echo "Creating destination dataset for $vm" zfs create $backup_dataset/$vm-$backup_date ## Send snapshot to backup destination echo "Backup VM: $vm" zfs send $vm_dataset/$vm@$backup_date | zfs recv -F $backup_dataset/$vm-$backup_date echo "" ## Delete snapshot zfs destroy $vm_dataset/$vm@$backup_date end # report done echo "" echo "############### ALL DONE THANKS ###############" echo ""