Пришла идея делать backup сервера VPS на CentOS 7 в Google drive, не пропадать же зря 15 гигам халявного места. Немного поискал и нашел пару статей на эту тему, тема оказалась не нова, и сначала поставил утилиту от самой корпорации добра, вот статья на эту тему Backing up a Directory to Google Drive on CentOS 7.

Но мне это не подходит, так как есть скрипт, который выполняется по расписанию, и в нем я решил проверять файлы по дате создания и не плодить миллион архивов, а для этого нужно смонтировать Google Drive в папку.

Утилита от Google умеет только закачивать и скачивать файлы, проверить по дате и удалить все старше 3х дней не получилось.

Спасение нашлось в google-drive-ocamlfuse, статей на эту тему не мало, но есть одно, но, утилита требует GUI интерфейс, а в частности любой браузер. В браузер передается с генерированная ссылка.

Google как известно авторизует пользователей по OAuth. В моем VPS естественно не о каком GUI речь не идет, только консоль.

На помощь пришла статья с github Headless Usage & Authorization. Предлагаю вам мой вольный перевод.

1. Устанавливаем по инструкции google-drive-ocamlfuse

2. Входим в свой google accaunt. Переходим на страницу https://code.google.com/apis/console/ и создаем Новый проект в верхнем левом углу (Project > Create project).

3. В левой панельке ищем Библиотеки-Drive API (Library > Drive API) и включаем её (Enable).

4. Дальше переходим на Учетные данные (Credentials). Создаем нового пользователя Create credentials > OAuth client ID. Выбираем Other в предложенных вариантах. Получаем ID и секретный ключ.

5. Возвращаемся в консоль и пишем:

google-drive-ocamlfuse -headless -label me -id ##yourClientID##.apps.googleusercontent.com -secret ###yoursecret#####

6. Получаем сообщение в котором есть ссылка:

Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=##yourClientID##.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force

Копируем ссылку в браузер и получаем код верификации.

7. Копируем полученный код верификации и вставляем его обратно:

Please enter the verification code: hfal8as8dyv7f79asdf7g7gd7s9d7fy7dfy7dgfydb

8. Вот и все.

После этого будет создана папка с приложением (~/.gdfuse/me/), его мы и будем использовать для монтирование нашего диска. Монтируем в папку:

mkdir /my_mnt_dir
./google-drive-ocamlfuse -label me /my_mnt_dir

Размонтируем папку:

fusermount -u mountpoint

В оригинальной инструкции описаны действия которые нужно сделать при возникновении ошибок, но у меня все получилось с первого раза.
Поделиться с друзьями
-->

Комментарии (8)


  1. saggid
    06.10.2016 13:29
    +1

    Мы у себя Backblaze используем для хранения бекапов. Стоит недорого, и позволяет загружать файлы в облако с помощью их утилиты командной строки.


    Можно даже изловчиться и написать код, который будет удалять устаревшие бекапы из облака. У нас используется вот такой код на PHP для этого:


    // Функция, которая удаляет устаревшие архивы в облаке
    function deleteUploadedFiles($config, $source, $nextFileName = '', $nextFileId = '') {
    
      $uploadedFiles = json_decode(shell_exec("b2 list_file_versions {$config->b2Bucket} {$nextFileName} {$nextFileId}"));
    
      foreach($uploadedFiles->files as $file) {
        if (
          mb_strpos($file->fileName, '.bzEmpty') === false
          and
          mb_strpos($file->fileName, $source->folder) === 0
        ) {
          $date1 = date_create_from_format('U',mb_substr($file->uploadTimestamp,0,10));
          $date2 = new DateTime();
    
          // Смотрим разницу между текущей датой и датой загрузки файла
          $interval = $date2->diff($date1)->format('%a'); // http://php.net/manual/ru/dateinterval.format.php
          if ($interval > $config->b2DeleteRange) {
            echo " - Файл {$file->fileName} был создан больше {$config->b2DeleteRange} дней назад. Удаляем его из облака. \n"; 
            shell_exec("b2 delete_file_version {$file->fileName} {$file->fileId}");
          } else {
            echo " - Файл {$file->fileName} не нуждается в удалении из облака. \n"; 
          }
        }
      }
    
      if ($uploadedFiles->nextFileName and $uploadedFiles->nextFileId) {
        deleteUploadedFiles($config, $source, $uploadedFiles->nextFileName, $uploadedFiles->nextFileId);
      }
    }



    Ещё есть Ruby Backup Gem, который много чего умеет и поддерживает различные виды хранилищ. Единственное, почему мы его на заюзали — потому что он с B2 пока не дружит.


  1. SicYar
    06.10.2016 20:23

    Везет тем, у кого на VPS 15 ГБ полезной инфы всего


  1. lightvik
    06.10.2016 20:23

    А почему не рассмотрели вариант yandex disk и webdav? Хотя по моему мнению у них и клиент для linux поумнее будет.


    1. vmspike
      07.10.2016 16:53

      По моему опыту Яндекс.Диск c webdav гораздо медленнее, чем Google.Drive через ocamlfuse. И места у них по-умолчанию на 5Гб меньше (если сейчас ничего не изменилось).


      Кстати, любители халявы могут попробовать объединить несколько аккаунтов в массив с помощью mhddfs/unionfs/aufs, на Хабре уже есть соответствующие статьи.


  1. LeshaRB
    06.10.2016 20:23

    Была такая задачка под виндой, синхронизировать работу между домом и работой.
    Нашел программку GoodSync. Там была синхронизация по времени изменений итд


  1. evgenybuckharev
    06.10.2016 20:23
    +1

    Использую Яндекс.Диск для резервных копий, ставлю на выполнение крон задачу несколько раз в сутки со следующим кодом:

    #!/bin/bash
    
    TIME=`date +%Y-%m-%d-%H-%M-%S`
    SERVER_NAME="SERVER_NAME"
    
    MYSQL_FILE=/tmp/$SERVER_NAME-mysql.$TIME.sql.gz
    FS_FILE=/tmp/$SERVER_NAME-fs.$TIME.tar.gz
    
    # Archiving databases
    mysqldump -u MYSQL_USER --password=MYSQL_USER_PASS MYSQL_DB | gzip > $MYSQL_FILE
    if [ -f $MYSQL_FILE ]; then
        echo $TIME" db dump created"
    
    # Uploading to the cloud
    curl --user YA_USER@yandex.ru:YA_PASS -T "{$MYSQL_FILE}" https://webdav.yandex.ru/backup/database/
    #Delete archve
    rm $MYSQL_FILE
    
    fi
    
    # Archiving filesystem
    tar czfP $FS_FILE /var/www/SITE_PATH
    if [ -f $FS_FILE ]; then
    echo $TIME" fs achive created"
    
    # Uploading to the cloud
    curl --user YA_USER@yandex.ru:YA_PASS -T "{$FS_FILE}" https://webdav.yandex.ru/backup/files/
    #Delete archve
    rm $FS_FILE
    
    fi
    
    


  1. Zeroxzed
    06.10.2016 20:23

    Можно для тех же целей Яндекс.Диск использовать. Он без проблем монтируется по webdav как локальная папка. Для небольших бесплатных объемов работает вполне сносно, бэкапы копируются и подчищаются. Если покупать много места, то webdav не подходит, тормозит и зависает.


  1. LeamasRein
    07.10.2016 10:14

    Хорошее решение для архивации малого калибра, но помимо корпорации добра, рекомендую попробовать яндекс диск для подобных целей. Порог вхождения ниже, а гибкость настройки больше. Из объективных минусов — бесплатного сыра здесь только 10 ГБ,

    Дружит с Ubuntu, Debian, Fedora, Red Hat, Centos. Существуют версии i386, x86, x64, x86_64. Консольную утилиту можно ставить из deb-файла, через apt-get (надо указать репозиторий) или RPM.

    Настраивать можно через визард (yandex-disk setup) консольной утилиты или просто редактированием конфигурации. Может работать как в режиме постоянной синхронизации через демон, так и просто выполнить синхронизацию по команде (yandex-disk sync). Можно указывать что синхронизовать, либо что не трогать, разрешить/запретить перезапись и т.п.

    Базовая настройка резервного копирования с момента коннекта по ssh займет минуты 2-3.

    Еще умеет работать с webdav, что в сочетании с парой утилит позволяет создать кластер из дисков, объединенный в одно дисковое пространство. Но нюансов там не мало, так что это совсем другая история.