Создание автоматического сохранения снимков диска (резервных копий) на Google Cloud Platform

Я хотел бы знать, есть ли способ создать автоматическое сохранение резервной копии для экземпляра (точнее, для диска). У меня нет большого опыта работы с консолью, поэтому я предпочитаю графический интерфейс, но если нет, я буду рад узнать о консольном методе.

Я искал это, но нашел решение только для SQL.

Спасибо!


person Yanipan    schedule 30.07.2016    source источник


Ответы (2)


ОБНОВЛЕНИЕ:

Сценарий сильно изменился с тех пор, как я впервые дал этот ответ — последний код см. в репозитории Github: https://github.com/jacksegal/google-compute-snapshot

ИСХОДНЫЙ ОТВЕТ:

У меня была та же проблема, поэтому я создал простой сценарий оболочки, чтобы делать ежедневный снимок и удалять все снимки за 7 дней: https://github.com/jacksegal/google-compute-snapshot

#!/usr/bin/env bash
export PATH=$PATH:/usr/local/bin/:/usr/bin

#
# CREATE DAILY SNAPSHOT
#

# get the device name for this vm
DEVICE_NAME="$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/device-name" -H "Metadata-Flavor: Google")"

# get the device id for this vm
DEVICE_ID="$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/id" -H "Metadata-Flavor: Google")"

# get the zone that this vm is in
INSTANCE_ZONE="$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google")"

# strip out the zone from the full URI that google returns
INSTANCE_ZONE="${INSTANCE_ZONE##*/}"

# create a datetime stamp for filename
DATE_TIME="$(date "+%s")"

# create the snapshot
echo "$(gcloud compute disks snapshot ${DEVICE_NAME} --snapshot-names gcs-${DEVICE_NAME}-${DEVICE_ID}-${DATE_TIME} --zone ${INSTANCE_ZONE})"


#
# DELETE OLD SNAPSHOTS (OLDER THAN 7 DAYS)
#

# get a list of existing snapshots, that were created by this process (gcs-), for this vm disk (DEVICE_ID)
SNAPSHOT_LIST="$(gcloud compute snapshots list --regexp "(.*gcs-.*)|(.*-${DEVICE_ID}-.*)" --uri)"

# loop through the snapshots
echo "${SNAPSHOT_LIST}" | while read line ; do

   # get the snapshot name from full URL that google returns
   SNAPSHOT_NAME="${line##*/}"

   # get the date that the snapshot was created
   SNAPSHOT_DATETIME="$(gcloud compute snapshots describe ${SNAPSHOT_NAME} | grep "creationTimestamp" | cut -d " " -f 2 | tr -d \')"

   # format the date
   SNAPSHOT_DATETIME="$(date -d ${SNAPSHOT_DATETIME} +%Y%m%d)"

   # get the expiry date for snapshot deletion (currently 7 days)
   SNAPSHOT_EXPIRY="$(date -d "-7 days" +"%Y%m%d")"

   # check if the snapshot is older than expiry date
if [ $SNAPSHOT_EXPIRY -ge $SNAPSHOT_DATETIME ];
        then
     # delete the snapshot
         echo "$(gcloud compute snapshots delete ${SNAPSHOT_NAME} --quiet)"
   fi
done
person Jack Segal    schedule 06.09.2016
comment
Как мы можем настроить задания cron на вычислительном движке? - person Abdul Rehman; 14.09.2017
comment
@AbdulRehman — это то же самое, что настроить задание cron для любого другого облачного провайдера — см. эти инструкции: askubuntu.com/a/2369. Я написал инструкции о том, как настроить cron для этого конкретного скрипта, в файле readme github: github.com /jacksegal/google-compute-snapshot. - person Jack Segal; 15.09.2017
comment
Привет, @JackSegal - мне нужно удалить снимки старше 10 дней, поэтому я изменил этот фрагмент кода: echo -e "\nUsage: $0 [-d 7]" 1>&2 правильно, что я изменил, чтобы изменить интервал дней, или мне нужно внести изменения где-то еще? - person Abdul Rehman; 15.09.2017
comment
@AbdulRehman - вы используете последний скрипт с github? Если это так, вы можете указать количество дней, в течение которых вы хотите хранить снимки, в качестве параметра. например: ./snapshot.sh -d 10 - person Jack Segal; 16.09.2017
comment
Скрипт сейчас работает, но задание cron не запускается в указанное время, я запланировал время выполнения скрипта на 14:18, но он не запустил скрипт в назначенное время как 18 14 * * * root ..., не могли бы вы мне помочь, пожалуйста! - person Abdul Rehman; 18.09.2017
comment
@AbdulRehman - как дела с кроном? через crontab или cron.d? - person Jack Segal; 19.09.2017

Два комментария об этом очень полезном скрипте (если вы используете приведенный выше)

Линия

--regexp "(.gcs-.)|(.-${DEVICE_ID}-.)"

Вероятно, есть ошибка; здесь перечислено все, что начинается с GCS, я думаю, это следует читать

--regexp "(.gcs-.)-(.-${DEVICE_ID}-.)"

По крайней мере, это тот, который я использую для вывода ожидаемого результата

Кроме того, это --regexp теперь устарело, если вам небезразлично предупреждение, вы можете использовать

SNAPSHOT_LIST="$(список моментальных снимков вычислений gcloud --filter="name~'(.gcs-.)-(.-${DEVICE_ID}-.)'" --ури)"

У автора на его git есть более новая версия, это только комментарии к приведенному выше скрипту. Регулярное выражение довольно опасно, так как вышеприведенный скрипт в основном удаляет снимки с других виртуальных машин, используя тот же скрипт.

person CeD    schedule 15.09.2017