Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

125 lines
2.2 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 "Sending snapshot to ${BACKUPZ}..."
  66. zfs send zones/${DATASET}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}
  67. check_err
  68. echo "done."
  69. }
  70. # main
  71. echo "---
  72. BACKUP_ZONE: ${IDBACKUPZ}
  73. BACKUP_ZONE_IP: ${BACKUPZ}
  74. UUID to backup: ${UUID}
  75. ---"
  76. check_snap ${UUID}
  77. if [ $? -ne 0 ]; then
  78. create_snap ${UUID}
  79. else
  80. echo "Snapshot of ${UUID} already available"
  81. echo "done."
  82. fi
  83. send_snap ${UUID}
  84. # we check this UUID for additional datasets
  85. echo "Looking for addtional datasets in ${UUID}..."
  86. DATASET=`vmadm get ${UUID} | json datasets.0 | sed 's/zones\///' | tr -d '\n'`
  87. echo "done."
  88. if [ -z "${DATASET}" ]; then
  89. check_snap ${DATASET}
  90. fi
  91. if [ $? -ne 0 ]; then
  92. create_snap ${DATASET}
  93. else
  94. echo "Snapshot of ${DATASET} already available"
  95. echo "Skipping create snapshot..."
  96. fi
  97. send_snap ${DATASET}
  98. # we send the config
  99. echo "Sending config to ${BACKUPZ}..."
  100. zonecfg -z ${UUID} export | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ "cat >/data/${SOURCEGZ}/${UUID}.cfg"
  101. check_err
  102. echo "done."