В данной статье будет рассмотрен вариант резервного копирования HOMEd на Яндекс Диск c помощью утилит restic и rclone на устройстве "Домашний центр МТС" МТS-HC-001 (GTW360) с OpenWrt 23.05.5 (OpenLumi)
Restic — это современная утилита для резервного копирования с открытым исходным кодом, написанная на языке Go. Она обеспечивает:
- Шифрование данных (AES-256) для защиты резервных копий.
- Дедупликацию — сохраняет только уникальные части файлов, экономя место.
- Инкрементальные бэкапы — обновляет резервные копии, добавляя только изменения.
- Поддержку множества хранилищ : локальные папки, облака (AWS S3, Backblaze B2), сетевые ресурсы и другие.
- Кроссплатформенность (Windows, Linux, macOS).
- Восстановление отдельных файлов или полных бэкапов.
- Используется через командную строку, подходит для автоматизации. Лицензия — MIT.
Rclone — это мощная кроссплатформенная утилита с открытым исходным кодом для управления файлами в облаке и синхронизации данных. Основные возможности:
- Поддержка множества сервисов : Yandex Disk, Google Drive, Dropbox, Amazon S3, OneDrive, SFTP, WebDAV, Backblaze B2 и др.
- Шифрование данных (на стороне клиента) перед отправкой в облако.
- Синхронизация между локальными и удаленными хранилищами (в обе стороны).
- Инкрементальное копирование — передача только изменений.
- Монтирование облаков как локальных дисков (через FUSE).
- Работа через командную строку с поддержкой скриптов и автоматизации.
- Лицензия — GPLv3 . Идеально для резервного копирования, переноса данных между сервисами и управления облаками.
Непосредственно для изготовления, хранения и ротации резервных копий мы будем использовать restic, а в качестве транспорта для доставки на Яндекс Диск будем использовать rclone.
Данный способ подаётся как один из возможных примеров использования.
Вы можете определить для себя более оптимальный способ, например:
- Использовать только restic для резервного копирования на локальный диск
- Использовать только rclone только для переноса файлов резервных копий, сделанных другим методом, на Яндекс Диск.
Настройка Rclone
Установка:
opkg install rclone
Страница с особенностями настройки подключения Яндекс Диска в rclone https://rclone.org/yandex/
Способ описанный далее будет самым коротким из возможных, но отличающийся от официальной документации.
Для него нам понадобится установленный rclone не только на устройстве с HOMEd но и на своей настольной ЭВМ, нужно это для получения токена от Яндекса.
Скачать rclone на свою ЭВМ можно отсюда https://rclone.org/downloads/
В качестве настольной ЭВМ можно использовать Android устройство с установленным termux.
Следующее действие необходимо выполнить в командной строке своей настольной ЭВМ:
Введя следующую команду, откроется браузер нём необходимо авторизоваться под свои аккаунтом Яндекс. В конечном итоге командная строка отдаст токен, который нужно будет использовать в дальнейшем. Обратите внимание что токен имеет срок годности!
rclone authorize "yandex"
Пример вывода команды:
2025/02/28 10:01:15 NOTICE: Config file "/home/vadim/.config/rclone/rclone.conf" not found - using defaults
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=R-bCF8swrgfdgretEfwohTELjw
Log in and authorize rclone for access
Waiting for code...
Got code
Paste the following into your remote machine --->
{"access_token":"y0_ahchohdew8ieBoh5aidohyae6pii5sha5aiZi3vuoJebainaethaigu2-w","token_type":"bearer","refresh_token":"1:coo6uch1YeGachee:feejahxei9th_feew9aisee_gaeTo5eidei9sh_i4daegai8shie4bucuz1epeiw4eiyoh9r_e7EiRath3ne3oowaeg5oolail6Eethai","expiry":"2026-02-28T10:02:08.180196977+03:00"}
<---End paste
Из всего вывода нам понадобится только сам токен, в примере это:
{"access_token":"y0_ahchohdew8ieBoh5aidohyae6pii5sha5aiZi3vuoJebainaethaigu2-w","token_type":"bearer","refresh_token":"1:coo6uch1YeGachee:feejahxei9th_feew9aisee_gaeTo5eidei9sh_i4daegai8shie4bucuz1epeiw4eiyoh9r_e7EiRath3ne3oowaeg5oolail6Eethai","expiry":"2026-02-28T10:02:08.180196977+03:00"}
Работу с настольной ЭВМ закончили.
На устройстве МТС необходимо создать файл /root/.config/rclone/rclone.conf со следующим содержимым:
[yandex-backup]
type = yandex
token = {"access_token":"y0_ahchohdew8ieBoh5aidohyae6pii5sha5aiZi3vuoJebainaethaigu2-w","token_type":"bearer","refresh_token":"1:coo6uch1YeGachee:feejahxei9th_feew9aisee_gaeTo5eidei9sh_i4daegai8shie4bucuz1epeiw4eiyoh9r_e7EiRath3ne3oowaeg5oolail6Eethai","expiry":"2026-02-28T10:02:08.180196977+03:00"}
Где:
yandex-backup - наименование подключения, можно выбрать своё.
type - тип подключения Яндекс Диск
token - токен который мы получили ранее
Проверяем работу настроенного подключения:
rclone lsd yandex-backup:
Если всё подключение прошло успешно, в ответ будет выведено содержимое корневого каталога Яндекс Диска.
Пример вывода:
root@ow4g:~# rclone lsd yandex-backup:
0 2020-01-11 19:02:25 -1 Books
0 2016-08-07 14:02:32 -1 Photos
0 2022-07-18 05:21:23 -1 backup
0 2022-10-04 08:57:31 -1 Документы
0 2024-09-22 19:22:02 -1 Загрузки
0 2018-02-14 09:11:45 -1 Любимые
0 2022-03-04 13:37:46 -1 Приложения
0 2016-08-07 14:02:33 -1 Скриншоты
Создадим на Яндекс Диске отдельный каталог backup а в нём папку restic где будем хранить репозиторий с резервными копиями.
rclone mkdir yandex-backup:/backup/restic
Настройка Rclone на этом завершена.
Настройка Restic
Установка:
opkg install restic
Единоразово проинициализируем репозиторий резервных копий на Яндекс Диске:
При выполнении команды дважды будет запрошен пароль с помощью которого будет осуществляться шифрование резервных копий.
restic -r rclone:yandex-backup:/backup/restic init
Пример вывода:
root@ow4g:~# restic -r rclone:yandex-backup:/backup/restic init
enter password for new repository:
enter password again:
created restic repository ee4a154d at rclone:yandex-backup:/backup/restic
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Для удобства работы пропишем в переменные окружения путь к репозиторию и пароль. Это позволит в текущей сессии не вводить эти параметры каждый раз при использовании restic.
export RESTIC_REPOSITORY="rclone:yandex-backup:/backup/restic"
export RESTIC_PASSWORD="paS$w0rd"
Попробуем выполнить резервное копирование каталогов HOMEd и Mosquitto.
Первое выполнение может потребовать значительного времени, так как осуществляется полное резервное копирование всех указанных данных. При последующих запусках будут передаваться только изменения в каталогах и файлах.
restic backup --no-scan /etc/mosquitto /etc/homed /opt/homed-* /usr/bin/homed-* /usr/share/homed-*
Пример вывода:
root@ow4g:~# restic backup --no-scan /etc/mosquitto /etc/homed /opt/homed-* /usr/bin/homed-* /usr/share/homed-*
repository ee4a154d opened (version 2, compression level auto)
created new cache in /root/.cache/restic
no parent snapshot found, will read all files
Files: 122 new, 0 changed, 0 unmodified
Dirs: 28 new, 0 changed, 0 unmodified
Added to the repository: 2.979 MiB (1.282 MiB stored)
processed 122 files, 2.932 MiB in 2:15
snapshot 12d3f59f saved
Запустим ещё раз и посмотрим вывод.
Время выполнения изменилось и не только оно.
root@ow4g:~# restic backup --no-scan /etc/mosquitto /etc/homed /opt/homed-* /usr/bin/homed-* /usr/share/homed-*
repository ee4a154d opened (version 2, compression level auto)
using parent snapshot 12d3f59f
Files: 0 new, 0 changed, 122 unmodified
Dirs: 0 new, 0 changed, 28 unmodified
Added to the repository: 0 B (0 B stored)
processed 122 files, 2.932 MiB in 0:12
snapshot 9ba17b1b saved
```
Посмотреть список созданных резервных копий (snapshots):
Время выводится в UTC.
root@ow4g:~# restic snapshots
repository ee4a154d opened (version 2, compression level auto)
ID Time Host Tags Paths
-------------------------------------------------------------------------------------------
12d3f59f 2025-02-28 08:01:18 ow4g /etc/homed
/etc/mosquitto
/opt/homed-automation
/opt/homed-custom
/opt/homed-recorder
/opt/homed-web
/opt/homed-zigbee
/usr/bin/homed-automation
/usr/bin/homed-custom
/usr/bin/homed-recorder
/usr/bin/homed-web
/usr/bin/homed-zigbee
/usr/bin/homed-zigbee.2024-12-28.bak
/usr/share/homed-common
/usr/share/homed-web
/usr/share/homed-zigbee
9ba17b1b 2025-02-28 08:04:57 ow4g /etc/homed
/etc/mosquitto
/opt/homed-automation
/opt/homed-custom
/opt/homed-recorder
/opt/homed-web
/opt/homed-zigbee
/usr/bin/homed-automation
/usr/bin/homed-custom
/usr/bin/homed-recorder
/usr/bin/homed-web
/usr/bin/homed-zigbee
/usr/bin/homed-zigbee.2024-12-28.bak
/usr/share/homed-common
/usr/share/homed-web
/usr/share/homed-zigbee
-------------------------------------------------------------------------------------------
2 snapshots
Восстановление резервной копии:
Для восстановления резервной копии необходимо указать два параметра:
- id резервной копии (snapshot)
- место на локальном диске куда необходимо выполнить восстановление
restic restore 12d3f59f --target /mnt
repository ee4a154d opened (version 2, compression level auto)
restoring <Snapshot 12d3f59f of [/etc/mosquitto /etc/homed /opt/homed-automation /opt/homed-custom /opt/homed-recorder /opt/homed-web /opt/homed-zigbee /usr/bin/homed-automation /usr/bin/homed-custom /usr/bin/homed-recorder /usr/bin/homed-web /usr/bin/homed-zigbee /usr/bin/homed-zigbee.2024-12-28.bak /usr/share/homed-common /usr/share/homed-web /usr/share/homed-zigbee] at 2025-02-28 08:01:18.667039827 +0000 UTC by root@ow4g> to /mnt
root@ow4g:~# ls -lah /mnt
drwxr-xr-x 1 root root 3.4K Feb 28 11:12 .
drwxr-xr-x 1 root root 3.4K Dec 13 19:03 ..
drwxr-xr-x 4 root root 3.4K Feb 22 11:00 etc
drwxr-xr-x 7 root root 3.4K Feb 22 11:50 opt
drwxr-xr-x 4 root root 3.4K Feb 26 11:46 usr
Посмотреть статистику репозитория:
restic stats
repository ee4a154d opened (version 2, compression level auto)
scanning...
Stats in restore-size mode:
Snapshots processed: 2
Total File Count: 300
Total Size: 5.863 MiB
Осуществляем ротацию резервных копий:
Первая команда настраивает политику хранения резервных копий, в примере 7 дней. Вторая команда осуществляет вычистку репозитория от неактуальных резервных копий.
restic forget --keep-within 7d
restic prune
Пример вывода:
root@ow4g:~# restic forget --keep-within 7d
repository ee4a154d opened (version 2, compression level auto)
Applying Policy: keep all snapshots within 7d of the newest
keep 2 snapshots:
ID Time Host Tags Reasons Paths
------------------------------------------------------------------------------------------------------
12d3f59f 2025-02-28 08:01:18 ow4g within 7d /etc/homed
/etc/mosquitto
/opt/homed-automation
/opt/homed-custom
/opt/homed-recorder
/opt/homed-web
/opt/homed-zigbee
/usr/bin/homed-automation
/usr/bin/homed-custom
/usr/bin/homed-recorder
/usr/bin/homed-web
/usr/bin/homed-zigbee
/usr/bin/homed-zigbee.2024-12-28.bak
/usr/share/homed-common
/usr/share/homed-web
/usr/share/homed-zigbee
9ba17b1b 2025-02-28 08:04:57 ow4g within 7d /etc/homed
/etc/mosquitto
/opt/homed-automation
/opt/homed-custom
/opt/homed-recorder
/opt/homed-web
/opt/homed-zigbee
/usr/bin/homed-automation
/usr/bin/homed-custom
/usr/bin/homed-recorder
/usr/bin/homed-web
/usr/bin/homed-zigbee
/usr/bin/homed-zigbee.2024-12-28.bak
/usr/share/homed-common
/usr/share/homed-web
/usr/share/homed-zigbee
------------------------------------------------------------------------------------------------------
2 snapshots
root@ow4g:~# restic prune
repository ee4a154d opened (version 2, compression level auto)
loading indexes...
loading all snapshots...
finding data that is still in use for 2 snapshots
[0:00] 100.00% 2 / 2 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:01] 100.00% 2 / 2 packs processed
to repack: 0 blobs / 0 B
this removes: 0 blobs / 0 B
to delete: 0 blobs / 0 B
total prune: 0 blobs / 0 B
remaining: 148 blobs / 1.276 MiB
unused size after prune: 0 B (0.00% of remaining size)
done
Собираем всё в единый скрипт:
Где и как его запускать оставлю на ваш выбор.
#!/bin/sh
export RESTIC_REPOSITORY="rclone:yandex-backup:/backup/restic"
export RESTIC_PASSWORD="paS$w0rd"
restic backup /etc/mosquitto /etc/homed /opt/homed-* /usr/bin/homed-* /usr/share/homed-*
restic forget --keep-within 7d
restic prune