Guest User

ZFS backup script

a guest
Sep 7th, 2010
476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.42 KB | None | 0 0
  1. #!/bin/sh
  2. #to prep a new backup drive, insert into the drivecage, check logs for device, usually ada0 on my box, then
  3. #zpool create backup ada0    if the drive is actually ada0
  4.  
  5.  
  6. z=$1
  7. b=$2
  8.  
  9.         if [ -z $b ]; then
  10.                 echo "Usage: $0 zpool_source_name backup_destination_name"
  11.                 exit 1
  12.         fi
  13.  
  14. nd="${b}-$(date +"%F")"
  15.  
  16. test -z "$(zpool list -H | egrep -w "^${b}" | awk '{print $1}')" && zpool import $b 2>/dev/null
  17. test -z "$(zpool list -H | egrep -w "^${b}" | awk '{print $1}')" && echo "Zpool \"${b}\" not found!" && exit 1
  18.  
  19.  
  20. echo STARTED ON `date`
  21. test -z "$(zfs list -H -t snapshot ${z}@${nd} 2>/dev/null | awk '{print $1}')" && zfs snapshot -r ${z}@${nd} || echo "Snapshot already exists."
  22. od="$(zfs list -H -t snapshot -o name | egrep ^${z}@${b}- | tail -2 | head -1 | cut -d "@" -f 2)"
  23.  
  24.  
  25. #Thanks Rob!
  26. for i in `zfs list -H -r -o name $z | awk {'print $1'}`; do
  27.   if [ `zfs list -r -H -t snapshot ${b} 2>/dev/null | awk '{print $1}' | grep -c "${i}\@"` -gt 0 ];then
  28.     zfs send -v -i ${i}@${od} ${i}@${nd} | zfs recv -F ${b}/${i} 2>/dev/null
  29.   else
  30.     zfs send -v ${i}@${nd} | zfs recv -F ${b}/${i} 2>/dev/null
  31.   fi
  32. done
  33.  
  34. zfs list -H -t snapshot -o name | egrep ^${z}@${b}- | sort -r | tail -n +8 | xargs -n 1 zfs destroy -r
  35. zfs list -H -t snapshot -o name | egrep ^${b}/${z}@${b}- | sort -r | tail -n +8 | xargs -n 1 zfs destroy -r
  36.  
  37. zpool export $b
  38. echo FINISHED ON `date`
Advertisement
Add Comment
Please, Sign In to add comment