Как выполнить резервное копирование данных в службу хранения объектов с помощью клиента Restic Backup

Вступление

Restic - это безопасный и эффективный клиент резервного копирования, написанный на языке Go. Он может создавать резервные копии локальных файлов в нескольких различных внутренних хранилищах, таких как локальный каталог, SFTP-сервер или служба хранения объектов, совместимая с S3.

В этом уроке мы установим Restic и инициализируем репозиторий в службе хранения объектов. Затем мы создадим резервные копии некоторых файлов в хранилище. Наконец, мы автоматизируем наши резервные копии, чтобы делать почасовые снимки и автоматически сокращать старые снимки, когда это необходимо.

Предпосылки

Для этого урока вам понадобится компьютер на базе UNIX с некоторыми файлами, которые вы хотите создать резервную копию. Хотя Restic доступен для Mac, Linux и Windows, команды и методы, используемые в этом руководстве, будут работать только на MacOS и Linux.

Для работы Restic требуется достаточное количество памяти, поэтому у вас должно быть 1 ГБ или больше оперативной памяти, чтобы избежать получения ошибок.

Вам также необходимо знать следующие сведения о службе хранения объектов:

  • Ключ доступа

  • Секретный ключ

  • URL сервера

  • Название ковша

Если вы используете службу хранилища объектовDigitalOcean Spaces, вы можете настроить пространство и получить всю вышеуказанную информацию, следуя нашему руководствуHow to Create a DigitalOcean Space and API Key.

Получив информацию о хранилище ваших объектов, перейдите к следующему разделу для установки программного обеспечения Restic.

Установка Restic Backup Client

Restic доступен как предварительно скомпилированный исполняемый файл для многих платформ. Это означает, что мы можем загрузить и запустить один файл, без необходимости в менеджере пакетов или зависимостях.

Чтобы найти нужный файл для загрузки, сначала с помощью браузера перейдите кRestic’s release page on GitHub. Вы найдете список файлов под заголовкомDownloads.

Для 64-битной системы Linux (наиболее распространенная серверная среда) вам нужен файл, оканчивающийся на_linux_amd64.bz2.

Для MacOS найдите файл с_darwin_amd64.bz2.

Щелкните правой кнопкой мыши соответствующий файл для вашей системы, затем выберитеCopy Link Address (формулировка может немного отличаться в вашем браузере). Это скопирует URL загрузки в ваш буфер обмена.

Затем в сеансе терминала на компьютере, для которого выполняется резервное копирование (если это удаленная машина, вам может потребоваться сначала войти в систему через SSH), убедитесь, что вы находитесь в своем домашнем каталоге, а затем загрузите файл с помощьюcurl:

cd ~
curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

Распакуйте файл, который мы скачали:

bunzip2 restic*

Затем скопируйте файл в/usr/local/bin и обновите его разрешения, чтобы сделать его исполняемым. Нам нужно будет использоватьsudo для этих двух действий, поскольку обычный пользователь не имеет разрешения на запись в/usr/local/bin:

sudo cp restic* /usr/local/bin/restic
sudo chmod a+x /usr/local/bin/restic

Убедитесь, что установка прошла успешно, вызвав командуrestic без аргументов:

restic

Некоторый текст справки должен напечатать на вашем экране. Если да, то двоичный файлrestic установлен правильно. Затем мы создадим файл конфигурации для Restic, затем инициализируем наш репозиторий хранилища объектов.

Создание файла конфигурации

Restic необходимо знать наш ключ доступа, секретный ключ, сведения о подключении хранилища объектов и пароль репозитория, чтобы инициализировать репозиторий, к которому мы можем затем выполнить резервное копирование. Мы собираемся сделать эту информацию доступной для Restic, используяenvironment variables.

Переменные среды - это биты информации, которые вы можете определить в своей оболочке, которые передаются программам, которые вы запускаете. Например, каждая программа, которую вы запускаете в командной строке, может видеть вашу переменную среды$PWD, которая содержит путь к текущему каталогу.

Обычная практика - помещать чувствительные токены и пароли в переменные среды, потому что указание их в командной строке небезопасно. Поскольку в дальнейшем мы собираемся автоматизировать резервное копирование, мы сохраним эту информацию в файле, где наш скрипт сможет получить к ней доступ.

Сначала откройте файл в вашем домашнем каталоге:

nano ~/.restic-env

В текстовом редактореnano откроется пустой файл. Когда мы закончим, файл будет состоять из четырех командexport. Эти операторыexport определяют переменные среды и делают их доступными для любых программ, которые вы запускаете в будущем:

restic-env
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_REPOSITORY="s3:server-url/bucket-name"
export RESTIC_PASSWORD="a-strong-password"

Доступ и секретные ключи будут предоставлены вашей службой хранения объектов. Возможно, вы захотите сгенерировать уникальный набор ключей только для Restic, чтобы можно было легко отозвать доступ в случае потери ключей или их взлома.

Примерное значениеRESTIC_REPOSITORY будет:s3:nyc3.digitaloceanspaces.com/example-bucket. Если вам нужно подключиться к серверу через нестандартный порт или только через незащищенный HTTP, включите эту информацию в URL-адрес, напримерs3:http://example-server:3000/example-bucket.

RESTIC_PASSWORD определяет пароль, который Restic будет использовать для шифрования ваших резервных копий. Это шифрование происходит локально, поэтому вы можете выполнить резервное копирование на ненадежный внешний сервер, не беспокоясь о том, что содержимое ваших файлов может быть раскрыто.

Здесь вы должны выбрать надежный пароль и скопировать его в безопасное место для резервного копирования. Один из способов создать надежный случайный пароль - использовать командуopenssl:

openssl rand -base64 24
Outputj8CGOSdz8ibUYK137wtdiD0SJiNroGUp

Это выдает 24-символьную случайную строку, которую вы можете скопировать и вставить в файл конфигурации.

После того, как все переменные заполнены правильно, сохраните и закройте файл.

Инициализация репозитория

Чтобы загрузить конфигурацию в среду оболочки, мыsource только что созданный файл:

source ~/.restic-env

Вы можете убедиться, что это работает, распечатав одну из переменных:

echo $RESTIC_REPOSITORY

URL вашего хранилища должен распечатать. Теперь мы можем инициализировать наш репозиторий командой Restic:

restic init
Outputcreated restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Теперь хранилище готово для получения резервных данных. Мы отправим эти данные дальше.

Резервное копирование каталога

Теперь, когда наше хранилище удаленных объектов инициализировано, мы можем отправить в него данные резервного копирования. В дополнение к шифрованию, Restic выполняет диффузию и дедупликацию при резервном копировании. Это означает, что наша первая резервная копия будет полной резервной копией всех файлов, а последующие резервные копии должны будут только передавать новые файлы и изменения. Кроме того, дублированные данные будут обнаружены и не будут записаны в серверную часть, что экономит место.

Прежде чем выполнять резервное копирование, если вы тестируете что-то на пустой системе и вам нужно создать несколько файлов примеров для резервного копирования, создайте простой текстовый файл в вашем домашнем каталоге:

echo "sharks have no organs for producing sound" >> ~/facts.txt

Это создаст файлfacts.txt. Теперь сделайте резервную копию вместе с остальной частью вашего домашнего каталога:

restic backup ~
Outputscan [/home/sammy]
scanned 4 directories, 14 files in 0:00
[0:04] 100.00%  2.558 MiB/s  10.230 MiB / 10.230 MiB  18 / 18 items  0 errors  ETA 0:00
duration: 0:04, 2.16MiB/s
snapshot 427696a3 saved

Restic будет работать немного, покажет вам текущие обновления статуса по пути, а затем выведет ID нового снимка (выделено выше).

[.note] #Note: Если вы хотите создать резервную копию другого каталога, замените~ на путь к каталогу. Вам может потребоваться использоватьsudo передrestic backup, если целевой каталог не принадлежит вашему пользователю. Если вам нуженsudo для резервного копирования, не забудьте использовать его снова при восстановлении моментального снимка, иначе вы можете получить некоторые ошибки о невозможности правильно установить разрешения.
#

Далее мы узнаем, как узнать больше информации о снимках, хранящихся в нашем хранилище.

Список снимков

Чтобы вывести список резервных копий, хранящихся в репозитории, используйте подкомандуsnapshots:

restic snapshots
OutputID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
427696a3  2017-10-23 16:37:17  restic-test              /home/sammy

Вы можете увидеть идентификатор снимка, который мы получили во время первого резервного копирования, отметку времени, когда был сделан снимок, имя хоста, теги и каталог, для которого была создана резервная копия.

Наш столбецTags пуст, потому что мы не использовали его в этом примере. Вы можете добавить теги к снимку, включив флаг--tag, за которым следует имя тега. Вы можете указать несколько тегов, повторив параметр--tag.

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

Host включен в список, потому что вы можете отправлять снимки с нескольких хостов в один репозиторий. Вам нужно будет скопировать пароль хранилища на каждый компьютер. Вы также можете установить несколько паролей для своего хранилища, чтобы иметь более детальный контроль доступа. Вы можете узнать больше об управлении паролями репозитория вthe official Restic docs.

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

Восстановление снимка

Мы собираемся восстановить весь снимок во временный каталог, чтобы убедиться, что все работает правильно. Используйте идентификатор снимка из списка на предыдущем шаге. Мы отправим восстановленные файлы в новый каталог в/tmp/restore:

restic restore 427696a3 --target /tmp/restore
Outputrestoring  to /tmp/restore

Перейдите в каталог и перечислите его содержимое:

cd /tmp/restore
ls

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

cd sammy
ls
Outputfacts.txt  restic_0.7.3_linux_amd64

Здесь находится наш файлfacts.txt, а также бинарный файл restic, который мы извлекли в начале руководства. Выведитеfacts.txt на экран, чтобы убедиться, что это то, что мы ожидали:

cat facts.txt

Вы должны увидеть факт акулы, который мы поместили в файл ранее. Это сработало!

[.note] #Note: Если вы не хотите восстанавливать все файлы снимка, вы можете использовать параметры--include и--exclude, чтобы уточнить свой выбор. Прочтитеthe Restore section of the Restic documentation, чтобы узнать больше.
#

Теперь, когда мы знаем, что резервное копирование и восстановление работают, давайте автоматизируем создание новых снимков.

Автоматизация резервного копирования

Restic включает командуforget для поддержки работающего архива моментальных снимков. Вы можете использоватьrestic forget --prune, чтобы установить политики того, сколько резервных копий хранить ежедневно, ежечасно, еженедельно и т. Д. Резервные копии, которые не соответствуют политике, будут удалены из хранилища.

Мы будем использовать системную службуcron для выполнения задачи резервного копирования каждый час. Сначала откройте crontab вашего пользователя:

crontab -e

Вам может быть предложено выбрать текстовый редактор. Выберите свой фаворит - илиnano, если у вас нет мнения - затем нажмитеENTER. Crontab по умолчанию для вашего пользователя откроется в вашем текстовом редакторе. Там могут быть некоторые комментарии, объясняющие синтаксис crontab. В конце файла добавьте следующее в новую строку:

кронтаб

. . .
42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7

Давайте пройдемся по этой команде. 42 * * * * определяет, когдаcron должен запустить задачу. В этом случае он будет работать в 42-мminute каждогоhour,day,month иday of week. Для получения дополнительной информации об этом синтаксисе прочтите наш учебникHow To Use Cron To Automate Tasks.

Затем. /home/sammy/.restic-env; эквивалентенsource ~/.restic-env, который мы запускали ранее для загрузки наших ключей и паролей в среду оболочки. Это имеет тот же эффект в нашем crontab: последующие команды в этой строке будут иметь доступ к этой информации.

/usr/local/bin/restic backup -q /home/sammy; - наша команда резервного копирования Restic. Мы используем полный путь к двоичному файлуrestic, потому что службаcron не будет автоматически искать команды в/usr/local/bin. Точно так же мы явно указываем путь к домашней папке с помощью/home/sammy вместо использования ярлыка~. При написании команды дляcron лучше всего быть как можно более явным. Мы используем флаг-q для подавления вывода статуса из Restic, поскольку мы не будем его читать.

Наконец,/usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7 удалит старые снимки, которые больше не нужны, на основе указанных флагов хранения. В этом примере мы храним 24-часовые снимки и 7 ежедневных снимков. Существуют также варианты для еженедельных, ежемесячных, годовых и основанных на тегах политик.

Когда вы обновите команду в соответствии со своими потребностями, сохраните файл и выйдите из текстового редактора. Crontab будет установлен и активирован. Через несколько часов снова запуститеrestic snapshots, чтобы убедиться, что загружаются новые снимки.

Заключение

В этом руководстве мы создали файл конфигурации для Restic с нашими данными аутентификации хранилища объектов, использовали Restic для инициализации репозитория, создали резервные копии некоторых файлов и протестировали резервную копию. Наконец, мы автоматизировали процесс с помощью cron.

Restic имеет больше гибкости и больше возможностей, чем обсуждалось здесь. Чтобы узнать больше о Restic, взгляните на ихofficial documentation илиmain website.

Related