Как сделать резервную копию и восстановить данные с помощью Restic в Linux

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

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

Резервное копирование и восстановление данных с помощью Restic — это просто и очень быстро! Он передает только измененные файлы (инкрементное резервное копирование) так же, как Rsync.

Используя Restic, мы можем легко создавать резервные копии файлов и каталогов на локальном диске, в удаленной системе или в облачном хранилище. Restic поддерживает популярные облачные хранилища, такие как AWS, Azure, BackBlaze, Google Cloud, OpenStack и некоторые другие.

Restic написан на языке программирования Go, а его исходный код находится в свободном доступе на GitHub. Это кроссплатформенное приложение для резервного копирования. Приложение поддерживает различные платформы, такие как GNU/Linux, macOS, FreeBSD, openBSD и Microsoft Windows.

Установка Restic в  Linux.

Restic доступен в большинстве популярных дистрибутивах Linux. И установить его можно стандартными командами.

Установка Restic в Alpine Linux

$ sudo apk add restic

Установка Restic в Arch Linux, EndeavourOS, Manjaro Linux.

Restic доступен в стандартных репозиториях Arch Linux. Убедитесь, что репозиторий [Community] включен, и установите Restic в Arch Linux и в его аналогах, таких как EndeavourOS, Manjaro Linux, используя Pacman, как показано ниже.

$ sudo pacman -S restic

Установка Restic из AUR.

Restic также доступен в пользовательском репозитории Arch. Таким образом, вы можете установить его с помощью любых помощников AUR, таких как Paru или Yay, в системах на основе Arch.

$ paru -S restic-git
$ yay -S restic-git

Установка Restic в Debian, Ubuntu, Linux Mint, Pop_OS!

$ sudo apt-get install restic

Установка Restic в Fedora

$ sudo dnf install restic

Установка Restic в RHEL, CentOS, AlmaLinux и Rocky Linux.

$ sudo dnf copr enable copart/restic
$ sudo dnf install restic

Установка Restic в Solus

$ sudo eopkg install restic

Установка Restic в Nix OS

$ nix-env --install restic

Установка Restic в openSUSE

$ sudo zypper install restic

Установка Restic, использую Linuxbrew

$ brew install restic

Установка Restic из исходника.

Для других операционных систем вы можете скомпилировать и установить Restic, как показано ниже. Во-первых, необходимо иметь установленный компилятор языка Go. После того, как вы его установите, необходимо склонировать репозиторий Github для Restic, следующей командой:

$ git clone https://github.com/restic/restic

Эта команда клонирует все содержимое репозитория restic в текущем рабочем каталоге.

Далее переходим в каталог restic

$ cd restic

И устанавливаем Restic, как показано ниже:

$ go run build.go

Проверяем установленную версию Restic:

$ restic version
restic 0.13.1 compiled with go1.17.7 on linux/amd64

Обновление Restic

Из официальных репозиториев, зачастую, устанавливается устаревшая версия. Чтобы обновить версию до актуально, необходимо запустить следующую команду:

$ sudo restic self-update

Теперь проверяем версию.

$ restic version
restic 0.14.0 compiled with go1.19 on linux/amd64

Резервное копирование и восстановление данных с помощью Restic в Linux.

Restic поддерживает следующие сущности для хранения:

  1. Локальный каталог;
  2. SFTP сервер (через SSH);
  3. HTTP REST сервер;
  4. AWS S3;
  5. OpenStack Swift;
  6. BackBlaze B2;
  7. Облачное хранилище Google;
  8. Yandex Диск;
  9. И много других сервисов, поддерживаемых rclone.

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

Создаем новый локальный репозиторий.

Во-первых, необходимо создать репозиторий для хранения резервной копии. Например, я собираюсь создать репозиторий с именем mybackup в моем домашнем каталоге.

$ restic init --repo ~/mybackup

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

enter password for new repository:
enter password again:
created restic repository d01fb6fe43 at /home/user/mybackup

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

Как видно из приведенного выше вывода, в папке /home/user/mybackup создается локальный репозиторий с идентификатором d01fb6fe43.

Теперь можно сделать резервную копию ваших данных во вновь созданный репозиторий.

Резервное копирование данных в локальный каталог с помощью Restic.

Я собираюсь сделать резервную копию всего каталога /mydata (включая сам каталог) в репозиторий /mybackup с помощью команды:

$ restic -r ~/mybackup backup ~/mydata

Введите пароль вашего репозитория:

enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
created new cache in /home/user/.cache/restic
no parent snapshot found, will read all files

Files:           4 new,     0 changed,     0 unmodified
Dirs:            6 new,     0 changed,     0 unmodified
Added to the repository: 3.464 KiB (2.192 KiB stored)

processed 4 files, 0 B in 0:00
snapshot 772953e9 saved

Как видите, restic создал резервную копию каталога mydata. Кроме того, был создан снэпшот текущей резервной копии с уникальным именем 772953e9 .

Давайте разберем приведенную выше команду и посмотрим, что делает каждый параметр.

  • restic — запуск утилиты restic
  • -r — указывает репозиторий
  • ~/mybackup — имя репозитория
  • backup — подкоманда Restic для резервного копирования файлов/папок
  • /mydata — Каталог для резервного копирования.

Добавим больше файлов/папок в каталог резервного копирования. Например, я добавил новый файл с именем test.txt в каталог /mydata. Теперь снова запустите команду restic:

$ restic -r ~/mybackup backup ~/mydata
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
using parent snapshot 772953e9

Files:           1 new,     0 changed,     4 unmodified
Dirs:            0 new,     5 changed,     1 unmodified
Added to the repository: 3.258 KiB (2.086 KiB stored)

processed 5 files, 16 B in 0:00
snapshot fc6e505d saved

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

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

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

$ restic -r ~/mybackup backup ~/mydata/test.txt
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
no parent snapshot found, will read all files

Files:           1 new,     0 changed,     0 unmodified
Dirs:            5 new,     0 changed,     0 unmodified
Added to the repository: 2.309 KiB (1.842 KiB stored)

processed 1 files, 16 B in 0:00
snapshot 5281bb84 saved

Как видите, в репозитории создается новый снимок с именем 5281bb84.

Получение списка снимков.

Чтобы получить список доступных снэпшотов в локальном репозитории, запустите:

$ restic -r ~/mybackup snapshots
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
ID        Time                 Host                 Tags        Paths
---------------------------------------------------------------------------------------------------------------
772953e9  2022-09-06 09:54:05  computer                         /home/user/mydata
fc6e505d  2022-09-06 14:58:41  computer                         /home/user/mydata
5281bb84  2022-09-06 15:06:40  computer                         /home/user/mydata/test.txt
---------------------------------------------------------------------------------------------------------------
3 snapshots

Как видите у меня 3 снимка, а именно 772953e9, fc6e505d и 5281bb84.

Проверить разницу между двумя снимками.

Чтобы проверить разницу между двумя снимками, мы можем использовать опцию diff, как показано ниже:

$ restic -r ~/mybackup diff 772953e9 fc6e505d

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

enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
comparing snapshot 772953e9 to fc6e505d:

+    /home/user/mydata/test.txt

Files:           1 new,     0 removed,     0 changed
Dirs:            0 new,     0 removed
Others:          0 new,     0 removed
Data Blobs:      1 new,     0 removed
Tree Blobs:      6 new,     6 removed
  Added:   3.258 KiB
  Removed: 2.878 KiB

Как видите, я добавил в резервную копию новый txt-файл.

Исключить файлы и папки.

Также можно исключить некоторые файлы или каталоги. Например, следующая команда исключит все файлы типа .doc:

$ restic -r ~/mybackup backup --exclude=*.doc ~/mydata

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

Например, создайте файл с именем exclude:

$ vi exclude.txt

Добавьте файлы или папки, которые вы хотите исключить:

*.txt
roadit.zip
mydata/pictures

Теперь запустите процесс резервного копирования с помощью команды:

$ restic -r ~/mybackup backup --exclude-file=exclude.txt ~/mydata

Для получения более подробной информации о команде резервного копирования restic запустите:

$ restic help backup

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

Восстановление данных с помощью Restic.

Восстановить данные легко.

Сначала выведите список доступных снапшотов из репозитория с помощью команды:

$ restic -r ~/mybackup snapshots
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
ID        Time                 Host                 Tags        Paths
---------------------------------------------------------------------------------------------------------------
772953e9  2022-09-06 09:54:05  computer                         /home/user/mydata
fc6e505d  2022-09-06 14:58:41  computer                         /home/user/mydata
5281bb84  2022-09-06 15:06:40  computer                         /home/user/mydata/test.txt
e33213d2  2022-09-06 18:52:58  computer                         /home/user/mydata
11abc846  2022-09-06 19:04:16  computer                         /home/user/mydata
---------------------------------------------------------------------------------------------------------------
5 snapshots

Как видно из приведенного выше вывода, у меня есть пять снэпшотов

Чтобы восстановить данные из определенного снэпшота, например fc6e505d, запустите:.

$ restic -r ~/mybackup restore fc6e505d --target ~/mydata
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
restoring <Snapshot fc6e505d of [/home/user/mydata] at 2022-09-06 14:58:41.885650518 +0300 MSK by user@computer> to /home/user/mydata

Мы только что восстановили данные из моментального снимка fc6e505d в каталог /mydata.

Для восстановления одного файла из снэпшота делаем:

$ restic -r ~/mybackup restore e33213d2 --target ~/mydata file1

Дополнительные сведения см. в разделе справки по команде restore.

$ restic help restore

Подключить репозиторий для просмотра данных резервной копии.

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

Сначала создайте точку монтирования:

$ mkdir mountpoint

Затем смонтируйте репозиторий на точку монтирования moutpoint, как показано ниже.

$ restic -r ~/mybackup mount mountpoint/

Эта команда смонтирует репозиторий Restic в вашей локальной файловой системе. После чего вы сможете просматривать файлы в снэпшотах по адресу /mountpoint/snapshots

Для получения более подробной информации, проверьте раздел помощи:

$ restic help mount

Удаляем снэпшоты.

Сначала посмотрим все доступные снимки в репозитории:

$ restic -r ~/mybackup snapshots
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
ID        Time                 Host                 Tags        Paths
---------------------------------------------------------------------------------------------------------------
772953e9  2022-09-06 09:54:05  computer                         /home/user/mydata
fc6e505d  2022-09-06 14:58:41  computer                         /home/user/mydata
5281bb84  2022-09-06 15:06:40  computer                         /home/user/mydata/test.txt
e33213d2  2022-09-06 18:52:58  computer                         /home/user/mydata
11abc846  2022-09-06 19:04:16  computer                         /home/user/mydata
---------------------------------------------------------------------------------------------------------------
5 snapshots

Чтобы удалить снимок, например 772953e9 , выполните:

$ restic -r ~/mybackup forget 772953e9
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted

Проверяем, удален снимок или нет:

$ restic -r ~/mybackup snapshots
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
ID        Time                 Host                 Tags        Paths
---------------------------------------------------------------------------------------------------------------
fc6e505d  2022-09-06 14:58:41  computer                         /home/local/X5/dmitry.borovik-3/mydata
5281bb84  2022-09-06 15:06:40  computer                         /home/local/X5/dmitry.borovik-3/mydata/test.txt
e33213d2  2022-09-06 18:52:58  computer                         /home/local/X5/dmitry.borovik-3/mydata
11abc846  2022-09-06 19:04:16  computer                         /home/local/X5/dmitry.borovik-3/mydata
---------------------------------------------------------------------------------------------------------------
4 snapshots

Снимок пропал! Однако данные, на которые ссылаются файлы в этом моментальном снимке, по-прежнему хранятся в репозитории.

Чтобы очистить неиспользуемые данные, запустите:

$ restic -r ~/mybackup prune
enter password for repository:
repository d01fb6fe opened (repository version 2) successfully, password is correct
loading indexes...
loading all snapshots...
finding data that is still in use for 4 snapshots
[0:00] 100.00%  4 / 4 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  5 / 5 packs processed

to repack:             7 blobs / 2.228 KiB
this removes:          5 blobs / 1.335 KiB
to delete:             0 blobs / 0 B
total prune:           5 blobs / 1.335 KiB
remaining:            20 blobs / 5.320 KiB
unused size after prune: 0 B (0.00% of remaining size)

repacking packs
[0:00] 100.00%  1 / 1 packs repacked
rebuilding index
[0:00] 100.00%  5 / 5 packs processed
deleting obsolete index files
[0:00] 100.00%  4 / 4 files deleted
removing 1 old packs
[0:00] 100.00%  1 / 1 files deleted
done

После удаления всех снимков и связанных с ними данных вы можете удалить репозиторий.

$ rm -rf ~/mybackup/

Заключение

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

А если Вам  нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.

Was this helpful?

0 / 0

Добавить комментарий 0