Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.
Однажды я озадачился вопросом резервного копирования нескольких сайтов, бэкапы которых некуда было складывать. И тут в голову пришла прекрасная идея использовать в качестве хранилища резервных копий GoogleDrive.
По запросу "centos 7 google drive" в поисковиках выводится большое количество статей по его подключению. В этих статьях в основном фигурируют два проекта - google-drive-ocamlfuse (ссылка на github https://github.com/astrada/google-drive-ocamlfuse) и gdrive (ссылка на github https://github.com/prasmussen/gdrive). Установка gdrive на CentOS 7 для работы с гугл-диском мне показалась намного проще. Об его настройке я и напишу в этой заметке. Также оставлю здесь пример bash-скрипта для создания резервной копии с блэк джеком и ш... шифрованием, копированием на Google Drive, и отправкой оповещения на e-mail.
# wget -O drive https://drive.google.com/uc?id=0B3X9GlR6EmbnMHBMVWtKaEZXdDg
# mv drive /usr/sbin/drive
# chmod +x /usr/sbin/drive
Всё, gdrive установлен. Ну очень просто)
Теперь запустим drive для запуска процесса авторизации.
# drive
Появится следующее сообщение:
Go to the following link in your browser:
https://accounts.google.com/o/oauth2/authclient_id=367116221053-7n0vf5akeru7on6o2fjdfsadoe99eg.apps.googleusercontent.com&redirect_uri=ur%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com2Fauth%2Fdrive&state=state
Enter verification code:
Необходимо скопировать и открыть эту ссылку в браузере. После авторизации появится следующая страница:
Жмем кнопку "Разрешить", после чего откроется страница с нашим кодом для проверки:
Копипастим этот код в консоль и подтверждаем:
Enter verification code: 5/8r1pjcEwaRzIpF88QdA0CTwV0lacGXAE6x8czOFK6k9
Все gdrive настроен.
Проверим его работу. Создадим простой текстовый файл и скопируем его на гугл-диск:
# echo test > test.txt
# drive upload --file test.txt
где
После выполнения команды drive upload
в консоль выводится информация о загруженном файле.
Id: 0B4KhH190NxVwZ0VQRzlFbXhkVHM
Title: test.txt
Size: 5.0 B
Created: 2016-08-26 12:58:04
Modified: 2016-08-26 12:58:04
Owner: Test Account
Md5sum: d8e8fca2dc0f896fd7cb4cb0031ba249
Shared: False
Parents: 0AIKhH190NxVwUk9PVA
MIME Type: text/plain; charset=utf-8
Uploaded 'test.txt' at 5.0 B/s, total 5.0 B
Для просмотра содержимого диска используется команда drive list
:
# drive list
Id Title Size Created
0B4KhH190NxVwZ0VQRzlFbXhkVHM test.txt 5.0 B 2016-08-26 12:58:04
Откроем в браузере наш гугл-диск, чтобы еще раз убедиться, что файл все-таки скопировался.
Для удаления файла необходимо использовать следующую команду:
# drive delete --id 0B4KhH190NxVwZ0VQRzlFbXhkVHM
Removed file 'test.txt'
где
Теперь перейдем к нашему скрипту. Ниже приведен листинг скрипта, который выполняет:
Листинг:
#!/bin/bash
DATE=`date +%Y-%m-%d`
DIR=/backup
LIST=/tmp/db.list
MYSQLPWD=r00tpa55w0r9
ARCHNAME=backup_sites
HOSTNAME=Web-server-57
EMAIL=cojuhar.vadim@gmail.com
## Удаляем архивы старше 7 дней из локальной директории для бэкапов
find $DIR -mtime +7 -delete
## Создаем дамп-файлы всех баз нашего сервера
echo 'show databases;' | mysql -u root -p$MYSQLPWD | grep -v -e Database -e information_schema -e performance_schema -e mysql > $LIST
for DBNAME in `cat $LIST`
do
mysqldump -u root -p$MYSQLPWD $DBNAME > $DIR/$DBNAME-$DATE.sql
done
## Создаем tar-архив необходимых директорий. В него же включаем дамп-файлы наших баз
tar -czf $DIR/$ARCHNAME-$DATE.tar.gz \
/var/sites \
/root \
/etc \
/home \
$DIR/*-$DATE.sql
## Зашифруем созданный архив
openssl enc -aes-256-cbc -salt -a -in "$DIR/$ARCHNAME-$DATE.tar.gz" -out "$DIR/$ARCHNAME-$DATE.tar.gz.enc" -pass 'pass:veRyStr0ngpa55w0r9'
## Загрузим зашифрованный архив на Google Drive
drive upload --file $DIR/$ARCHNAME-$DATE.tar.gz.enc
## Удаляем зашифрованный архив из локальной директории для бэкапов
rm -f $DIR/$ARCHNAME-$DATE.tar.gz.enc
## Проверим наличие резервной копии на Google Drive и отправим отчет о результате на e-mail
RESULT="$(drive list | awk '{print $2}' | grep -ic $ARCHNAME-$DATE.tar.gz.enc)"
if [ "$RESULT" != 1 ]; then
echo "Oops! Something went wrong! There is no backup :( " | mutt -s "$HOSTNAME: Backup ERROR at $DATE!" $EMAIL
else
echo "Creating and copying the backup file of $HOSTNAME at $DATE completed successfully." | mutt -s "$HOSTNAME: Successfull backup at $DATE" $EMAIL
fi
Как я писал выше, перед отправкой на Google Drive архив резервной копии шифруется с помощью openssl. Для расшифровки архива необходимо выполнить:
$ openssl enc -aes-256-cbc -d -a -in "archive-name.tar.gz.enc" -out "archive-name.tar.gz" -pass 'pass:veRyStr0ngpa55w0r9'
где
А о том, как настроить mutt для отправки писем можете прочитать в этой статье - CentOS 7: Настройка mutt для отправки отчетов.
Теперь осталось создать назначенное задание в cron и ждать бэкапов на свой Google Drive.
Комментарии (RSS)
Отличная статья, как я понял - перевод. Но не полный. Не сказано что делать с листингом этим. Как я понял из оригинала, нужно сделать баш скрипт dokuwiki-backup.sh и поместить его в эту директорию /usr/sbin/ и уже на это файл настраивать cron Для меня так же важно было помещать архивы не в корень, а в конкретную папку. В комментариях к англоязычной статье написали вариант - это в скрипт идет
где 0B2MhubpEBeV6fHrPU0t1Z1Y5Vnc идентификатор папки из ссылки
Да, для того чтобы скинуть файл в определенную папку на Google Drive необходимо воспользоваться ключом -p:
Сам скрипт резервного копирования можно поместить в любую директорию. Главное сделать его исполняемым и правильно указать путь до этого скрипта в cron'е.
P.S. Оригинальную статью действительно нашел на каком-то англоязычном ресурсе. Идею взял оттуда и немного поправил для своих нужд. Откуда взял уже и не вспомню))
Каким образом можно скачать папку из google drive?
По всей видимости скачивать папки он не умеет. Проверял на версии gdrive v1.8.0. Если найдете как, напишите здесь, пожалуйста.
$ gdrive help sync download или $ gdrive help sync upload