###### tags: Linux, bash, backup, gdrive :::danger Gdrive перестал работать. Возможно были изменения в api гугла. Если кому-то давал это задние то найдите аналог grive и сделайте резервное копирование в облоко (не обязательно google диск). ::: # Настройка резервного копирования на google диск. В этой заметки: установка утилиты gdrive для подключения гугл диска, написание bash скрипта для резервного копирования каталогов на гугл диск, а также добавления скрипта в crontab. ## Установка grive. Перейдем по [ссылке](https://github.com/prasmussen/gdrive/releases) и скачаем архив с необходимой нам версией. ![](https://i.imgur.com/4XVZrTr.png) Разархивируем архив. ``` tar xvzf gdrive_verison ``` Перенесем grive в директорию bin. Чтобы утилита была видна в переменной среды. ![](https://i.imgur.com/smw6en8.png) Используем команду grive list ![](https://i.imgur.com/6TsGYWP.png) По полученной ссылке нужно перейти в бразуере и подтвердить доступ приложению. Скопировать код авторизации и вставить его в поле Enter verification code. Теперь команда grive list будет показывать список файлов на диске с их ID. ![](https://i.imgur.com/if1PwM0.png) ## Пишем скрипт резервного копирования. Открываем редактор nano. ``` nano /usr/local/bin/backup_script.sh ``` Скрипт будет принимать два параментра **$1** - путь резервируемой директории или файла и **$2** - название бекапа Для начала отформатируем вывод команды echo обернув эту команду в функцию print. ```bash #!/bin/bash # Вывод сообщения со стилями function print { echo echo -e "\e[38;5;82m $1" echo -e "\e[0m" } ``` Далее создаем переменную с именем архива. Имя архива будет состоять из названия копируемой директории, самого имени, а также даты проведения бекапа. Добавляем вывод имени бекапа с помощью **ehco**. Создаем переменную содержащию путь до директории. Создаем переменную содержащию ID директории в которую будет делать бекап. ID директории можно узнать в выводе команды **grive list**. ```bash archive_name=$1$2-$(date +%Y-%m-%d.%H%M%S) echo $archive_name src_path=$1 dir_id= # ID директории на гуглдиске ``` Архивируем указанную директорию с помощью архиватора 7z в каталог tmp чтобы не засорять систему. C помощью -xr! игнорируем нежелательные для нас файлы по маске. И выводим информацию о размере архива. ```bash print "Compress..." 7z a -p'password' /tmp/${archive_name}.7z ${src_path} -xr!"*.log" -xr!"node_modules" ls -lh /tmp/${archive_name}.7z ``` Загружаем архив на гугл диск. ```bash print "Upload..." gdrive upload --delete --parent ${dir_id} /tmp${archive_name}.7z ``` Добавляем условие если ошибки нету то сообщение info пишим в лог. ```bash if [ $? -eq 0 ]; then print "OK..." echo "INFO: $(date +%Y-%m-%d.%H%M%S) GDRIVE UPLOAD BACKUP - DIR_BACKUP:${1}" >> /var/log/backups.log ``` Если есть ошибка то ```bash else print FAIL echo "ERROR: $(date +%Y-%m-%d.%H%M%S) GDRIVE NO UPLOAD BACKUP - DIR_BACKUP:${1}" >> /var/log/backups.log fi ``` Также мы можем настроить **postfix в режиме сателит** и добавить в скрипт возможность сообщать нам на почту об успешности бекапа. Полный код скрипта. ```bash #!/bin/bash function print { echo echo -e "\e[38;5;82m $1" echo -e "\e[0m" } archive_name=$1$2-$(date +%Y-%m-%d.%H%M%S) echo $archive_name src_path=$1 dir_id= # ID директории на гуглдиске print "Compress..." 7z a -p'password' /tmp/${archive_name}.7z ${src_path} -xr!"*.log" -xr!"node_modules" ls -lh /tmp/${archive_name}.7z print "Upload..." gdrive upload --delete --parent ${dir_id} /tmp${archive_name}.7z if [ $? -eq 0 ]; then print "OK..." echo "INFO: $(date +%Y-%m-%d.%H%M%S) GDRIVE UPLOAD BACKUP - DIR_BACKUP:${1}" >> /var/log/backups.log else print FAIL echo "ERROR: $(date +%Y-%m-%d.%H%M%S) GDRIVE NO UPLOAD BACKUP - DIR_BACKUP:${1}" >> /var/log/backups.log fi ``` Не забудьте сделать скрипт исполняемым. ``` chmod 0744 /usr/local/bin/backup_script.sh ``` ## Добавляем скрипт в Crontab. Открываем crontab. ``` nano /etc/crontab ``` И добавляем следующую строку. ``` 30 4 * * sun root /usr/local/bin/backup_script.sh /etc/wireguard/ wg_backup > /var/log/last_backups_output.log ``` В данном случае мы указываем чтобы скрипт делал бекап директории /etc/wireguard название бекапа wg_backup в 4:30 каждое воскресенье. Так как конфигурация vpn обновляеться редко то мне это подходит. Результат работы скрипта: ![](https://i.imgur.com/hmv5XFt.png)