Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
2.9 KiB

  1. #!/usr/bin/bash
  2. usage()
  3. {
  4. echo "Usage: $0 [ -s hostname ] [ -z UUID ] [ -b backupzone ] [ -i idbackupzone ]" >&2
  5. exit 1
  6. }
  7. while getopts ":s:z:b:i:" opt;
  8. do
  9. case "$opt" in
  10. s)
  11. SOURCEGZ=$OPTARG
  12. ;;
  13. z)
  14. UUID=$OPTARG
  15. ;;
  16. b)
  17. BACKUPZ=$OPTARG
  18. ;;
  19. i)
  20. IDBACKUPZ=$OPTARG
  21. ;;
  22. \?)
  23. echo "Error: Invalid Option: -${OPTARG}" >&2
  24. usage
  25. ;;
  26. :)
  27. echo "Error: -${OPTARG} requires an argument."
  28. usage
  29. ;;
  30. *)
  31. usage
  32. ;;
  33. esac
  34. done
  35. shift $((OPTIND -1 ))
  36. if [ -z ${SOURCEGZ} ] || [ -z "${UUID}" ] || [ -z ${BACKUPZ} ] || [ -z ${IDBACKUPZ} ]; then
  37. usage
  38. fi
  39. # functions
  40. check_err()
  41. {
  42. STATUS=$?
  43. if [ ${STATUS} -ne 0 ]; then
  44. echo "Unexpected error: ${STATUS}"
  45. exit ${STATUS}
  46. fi
  47. }
  48. check_snap()
  49. {
  50. ZONE=$1
  51. echo "Checking for snapshot of ${ZONE}..."
  52. zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2>/dev/null 1>&2
  53. }
  54. create_snap()
  55. {
  56. DS=$1
  57. echo "Creating snapshot of ${DS}..."
  58. zfs snapshot zones/${DS}@`date +%Y%m%d`
  59. check_err
  60. echo "done."
  61. }
  62. send_snap ()
  63. {
  64. DATASET=$1
  65. echo "Deleting dataset ${DATASET} on ${BACKUPZ}..."
  66. ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy -r zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}
  67. check_err
  68. echo "done."
  69. echo "Sending snapshot to ${BACKUPZ}..."
  70. zfs send zones/${DATASET}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive -F zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}
  71. check_err
  72. echo "done."
  73. echo "Deleting snapshot on ${BACKUPZ}..."
  74. ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}@`date +%Y%m%d`
  75. check_err
  76. echo "done."
  77. echo "deleting local snapshot zones/${DATASET}@`date +%Y%m%d`..."
  78. zfs destroy zones/${DATASET}@`date +%Y%m%d`
  79. check_err
  80. echo "done."
  81. }
  82. # main
  83. echo "---
  84. BACKUP_ZONE: ${IDBACKUPZ}
  85. BACKUP_ZONE_IP: ${BACKUPZ}
  86. UUID to backup: ${UUID}
  87. ---"
  88. check_snap ${UUID}
  89. if [ $? -ne 0 ]; then
  90. create_snap ${UUID}
  91. else
  92. echo "Snapshot of ${UUID} already available"
  93. echo "done."
  94. fi
  95. send_snap ${UUID}
  96. # we check this UUID for additional datasets
  97. echo "Looking for addtional children datasets in ${UUID}..."
  98. DATASET=`vmadm get ${UUID} | json datasets.0 | sed 's/zones\///' | tr -d '\n'`
  99. echo "done."
  100. if [ ! -z "${DATASET}" ]; then
  101. echo "Finded children dataset: ${DATASET}"
  102. check_snap ${DATASET}
  103. if [ $? -ne 0 ]; then
  104. create_snap ${DATASET}
  105. else
  106. echo "Snapshot of ${DATASET} already available"
  107. echo "Skipping create snapshot..."
  108. fi
  109. send_snap ${DATASET}
  110. else
  111. echo "No children datasets finded."
  112. fi
  113. # we send the config
  114. echo "Sending config to ${BACKUPZ}..."
  115. zonecfg -z ${UUID} export | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ "cat >/data/${SOURCEGZ}/${UUID}/${UUID}.cfg"
  116. check_err
  117. echo "done."