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 поддерживает следующие сущности для хранения:
- Локальный каталог;
- SFTP сервер (через SSH);
- HTTP REST сервер;
- AWS S3;
- OpenStack Swift;
- BackBlaze B2;
- Облачное хранилище Google;
- Yandex Диск;
- И много других сервисов, поддерживаемых 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. В моих следующих статьях увидим, как выполнять резервное копирование данных в удаленную систему и облачное хранилище.
А если Вам понравилась статья, то подписывайтесь на мой канал дзен (кнопка ниже), либо в telegramm и ВКонтакте. Так же не забудьте про мой сайт RoadIT, в котором я потихоньку собираю материал, знание которого приведет вас в мир IT.