Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.6 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. check_err()
  8. {
  9. STATUS=$?
  10. if [ ${STATUS} -ne 0 ]; then
  11. echo "Unexpected error: ${STATUS}"
  12. exit ${STATUS}
  13. fi
  14. }
  15. check_snap()
  16. {
  17. ZONE=$1
  18. zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2&>/dev/null 1>&2
  19. }
  20. create_snap()
  21. {
  22. ZONE=$1
  23. echo "Creating snapshot of ${ZONE}..."
  24. zfs snapshot zones/${ZONE}@`date +%Y%m%d`
  25. check_err
  26. echo "done."
  27. }
  28. while getopts ":s:z:b:i:" opt;
  29. do
  30. case "$opt" in
  31. s)
  32. SOURCEGZ=$OPTARG
  33. ;;
  34. z)
  35. UUID=$OPTARG
  36. ;;
  37. b)
  38. BACKUPZ=$OPTARG
  39. ;;
  40. i)
  41. IDBACKUPZ=$OPTARG
  42. ;;
  43. \?)
  44. echo "Error: Invalid Option: -${OPTARG}" >&2
  45. usage
  46. ;;
  47. :)
  48. echo "Error: -${OPTARG} requires an argument."
  49. usage
  50. ;;
  51. *)
  52. usage
  53. ;;
  54. esac
  55. done
  56. shift $((OPTIND -1 ))
  57. if [ -z ${SOURCEGZ} ] || [ -z "${UUID}" ] || [ -z ${BACKUPZ} ] || [ -z ${IDBACKUPZ} ]; then
  58. usage
  59. fi
  60. echo "Checking for snapshot of ${UUID}"
  61. check_snap ${UUID}
  62. if [ $? -ne 0 ]; then
  63. create_snap ${UUID}
  64. else
  65. echo "Snapshot of ${UUID} already available..."
  66. echo "done."
  67. fi
  68. echo "Sending snapshot to ${BACKUPZ}..."
  69. zfs send zones/${UUID}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive zones/${IDBACKUPZ}/data/${SOURCEGZ}/${UUID}
  70. check_err
  71. echo "done."
  72. echo "Sending config to ${BACKUPZ}..."
  73. zonecfg -z ${UUID} export | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ "cat >/data/${SOURCEGZ}/${UUID}.cfg"
  74. check_err
  75. echo "done."