Ранее названный Restic-Systemd-Automatic-Backup
в том числе эти лучшие участники:
RESTIC-это инструмент командной строки для резервного копирования, правильный путь. Проверьте официальный веб -сайт, чтобы узнать об объяснении функции. В качестве бэкэнда хранения я рекомендую Backblaze B2, так как RESTIC хорошо работает с ним, и это (на момент написания) очень доступно для хакера хобби! (Анекдотично: я плачу за свои резервные копии в полноцветах каждый месяц, как правило, <1 доллар США).
К сожалению, RESTIC не приходит предварительно сфокусирован с способом запуска автоматизированных резервных копий, скажем, каждый день. Тем не менее, можно настроить это самостоятельно, используя встроенные инструменты в вашей ОС и некоторые обертки. Для Linux с SystemD удобно использовать SystemD Timers. Для систем MacOS мы можем использовать встроенные запуска. Для Windows мы можем использовать PredulledTasks. Любая ОС, имеющая что-то, похожее на Cron, также будет работать!
Здесь следует учебное пособие по пошаговому этапу о том, как его настроить, с помощью моего образца сценария и конфигураций, которые вы можете изменить в соответствии с вашими потребностями.
Обратите внимание, что вы можете использовать поддерживаемые рестораны RESTIC. Настройка должна быть похожей, но вам придется использовать другие переменные конфигурации, чтобы соответствовать вашему бэкэнд на выборе.
Обновление: этот проект завершен функцией (см. Рассуждение ниже). Будут приняты только исправления ошибок. Не стесняйтесь вилку, если вы хотите добавить больше функций; Быть базой развязки была первоначальной сферой этого проекта!
Прицел для этого не должно быть полноценным супер-решением, которое решает все проблемы и все возможные настройки. Цель состоит в том, чтобы стать базой кода, чтобы начать шить идеальное решение для резервного копирования, которое соответствует вашим требованиям!
Тем не менее, проект должен работать из коробки, быть минимальным, но все же открывать двери для конфигурации и расширений пользователями.
Чтобы использовать другой бэкэнд хранения, чем B2, вам нужно только настроить несколько переменных настроек в профиле резервного копирования, а также несколько RESTIC Arcomumts Inside restic_backup.sh .
☝ Обратите внимание, что настройка Linux здесь предполагает установку в / .
Многие дистрибутивы Linux в настоящее время используют SystemD, которая обеспечивает хорошую поддержку для управления услугами и запланированными заданиями. Если ваше распределение не в SystemD, вместо этого ознакомьтесь с настройкой Cron.
TL; DR SETUP
make : $ sudo make install-systemd$ yay -S restic-automatic-backup-scheduler/etc/restic .restic(1) . Все команды после этого предполагают, что профиль получен в текущей оболочке. # source /etc/restic/default.env.sh
# restic initOnCalendar in /usr/lib/systemd/system/[email protected] systemd/system/[email protected].# systemctl enable --now [email protected]# journalctl -f --lines=50 -u restic-backup@default# restic snapshots# systemctl enable --now [email protected]default.env.sh и используйте определенное имя профиля вместо по default , чтобы запустить резервные копии или включить таймеры. Обратите внимание, что значение после @ работает как параметр. # systemctl enable restic-backup@other_profile.timer ☝ Обратите внимание, что настройка MacOS здесь будет принять установку Homebrew в рекомендуемое место по умолчанию. Это $HOMEBREW_PREFIX ( brew --prefix ), который является /usr/local на Intel Mac и /opt/homebrew на яблоне.
LaunchD-это современный встроенный планировщик услуг в MacOS. Он имеет поддержку для запуска сервисов как root (daemon) или как обычного пользователя (агента). Здесь мы настроили запуск для запуска в качестве обычного пользователя для начала регулярного резервного копирования.
TL; DR SETUP
$ brew install erikw/tap/restic-automatic-backup-schedulermake : $ make PREFIX=$(brew --prefix) install-launchagent$(brew --prefix)/etc/restic .restic(1) . Все команды после этого предполагают, что профиль получен в текущей оболочке. $ source $(brew --prefix)/etc/restic/default.env.sh
$ restic initOnCalendar в~/Library/LaunchAgents/homebrew.mxcl.restic-automatic-backup-scheduler.plist .make установку: ~/Library/LaunchAgents/com.github.erikw.restic-backup.plist .$ brew services start restic-automatic-backup-schedulermake установку: $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-backup.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-backup
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-backup$ make activate-launchagent-backup .$ tail -f ~ /Library/Logs/restic/backup *$ restic snapshots$ brew services start restic-automatic-backup-scheduler-checkmake установку: $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-check.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-check
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-check$ make activate-launchagent-check .Затем контролируйте обслуживание с помощью Homebrew:
$ brew services start restic-automatic-backup-scheduler
$ brew services restart restic-automatic-backup-scheduler
$ brew services stop restic-automatic-backup-scheduler Если services start , это может быть связано с установленной предыдущей версией. В этом случае удалите существующую версию и попробуйте еще раз:
$ launchctl bootout gui/ $UID /com.github.erikw.restic-backup
$ brew services start restic-automatic-backup-scheduler Используйте команду disable , чтобы временно приостановить агент или bootout , чтобы удалить ее.
$ launchctl disable gui/$UID/com.github.erikw.restic-backup
$ launchctl bootout gui/$UID/com.github.erikw.restic-backup
bootrstrap bootout launchctl enable .plist Это гарантирует, что файл правильно перезагружен.
Windows поставляется со встроенным планировщиком задач под названием PreduledTask. Приложение Frontend - «Планировщик задач» ( taskschd.msc ), и мы можем использовать команды PowerShell для установки новой запланированной задачи.
Я описываю здесь один из май, как вы можете получить RESTIC и этот сценарий резервного копирования, работающий на Windows. Здесь я решил работать с scoop и git-bash .
TL; DR SETUP
pwsh должен быть установлен, чтобы иметь возможность запустить PowerShell в сценариях Шебанг. powershell> scoop install restic make git pwsh powershell> git-bash
git-bash$ mkdir ~/src && cd ~/src/
git-bash$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $(basename "$_" .git) git-bash$ make install-schedtask/etc/restic . git-bash$ vim /etc/restic/*default.env.sh вы могли бы иметь export RESTIC_BACKUP_PATHS= ' /c/Users/<username>/My Documents 'restic(1) . Все команды после этого предполагают, что профиль получен в текущей оболочке. git-bash$ source /etc/restic/default.env.sh
git-bash$ restic init git-bash$ restic_backup.sh git-bash$ restic snapshotstaskschd.msc )restic_backup и нажмите «Запуск».make install-schedtask : просто закройте и запустите снова, чтобы обновить.restic_backup.sh , и в следующий раз, когда настраивается график! С помощью taskschd.msc вы можете легко запустить, остановить, удалять и настроить запланированные задачи по своему вкусу:
☝ Обратите внимание, что существует много разных реализаций Cron, и все они работают немного по -другому.
Любая система с системой Cron, похожая на Cron, также может легко настроить ресторанные резервные копии. Однако, если вы поддерживаете какую -либо из предыдущих настройки, они рекомендуются над Cron, поскольку они обеспечивают больше функций и надежности для ваших резервных копий.
TL; DR SETUP
$ sudo make install-cron/etc/cron.d/ . Если это не так, просто скопируйте соответствующее содержимое установленного /etc/cron.d/restic в вашем /etc/crontab . # grep " ^@.*restic_ " /etc/cron.d/restic >> /etc/crontab/etc/restic .restic(1) . Все команды после этого предполагают, что профиль получен в текущей оболочке. # source /etc/restic/default.env.sh
# restic init # restic_backup.sh# restic snapshots/etc/cron.d/restic (или /etc/crontab ).
Это более подробное объяснение, чем разделы TL; DR выше, которые дадут вам больше понимания в настройке. Этот раздел более общий, но использует Linux + Systemd в качестве примера настройки.
$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $( basename " $_ " .git )Сделайте быстрый поиск и замену в исходных файлах:
$ find bin etc usr Library ScheduledTask -type f -exec sed -i.bak -e ' s|{{ INSTALL_PREFIX }}||g ' {} ; -exec rm {}.bak ;И теперь вы должны увидеть, что все файлы были изменены как например, например,
- export RESTIC_PASSWORD_FILE="{{ INSTALL_PREFIX }}/etc/restic/pw.txt"
+ export RESTIC_PASSWORD_FILE="/etc/restic/pw.txt" Почему? Специфические настройки ОС; Строка заполнителя {{ INSTALL_PREFIX }} находится в исходных файлах по причинам переносимости, так что Makefile может поддерживать все различные операционные системы. make пользователей установить другой $PREFIX при установке, например PREFIX=/usr/local make install-systemd .
В этой подробной ручной настройке мы скопируем все файлы вручную в /etc и /bin . Таким образом, нам нужно удалить строку заполнителя {{ INSTALL_PREFIX }} в исходных файлах в качестве первого шага.
Суммируя:
Во -первых, посмотрите на это официальное учебник по Backblaze по RESTIC и следуйте инструкциям («Создайте учетную запись BackBlaze с B2 включенным») о том, как создать новое ведро B2. В целом, вам нужно личное ведро без шифрования B2 (RESTIC делает для нас сторону клиента шифрования) и без функции блокировки объекта.
Чтобы RESTIC мог иметь возможность подключаться к своему ведру, вы хотите, чтобы в настройках B2 создали пару KeyID и ApplicationKey. Рекомендуется создать отдельную пару идентификаторов и ключа для каждого ведра, которое вы будете использовать, с ограниченным доступом к чтению и записи только к этому ведру.
Поместите эти файлы в /etc/restic/ :
_global.env.sh : заполните этот файл своими глобальными настройками, включая B2 KeyID и ApplicationKey.default.env.sh : это профиль по умолчанию. Заполните это с помощью имени ведра, путей резервного копирования и политики удержания. Эти источники файлов _global.env.sh , таким образом, являются автономными и могут быть получены в оболочке, когда вы хотите выпустить некоторые ручные Restic Commands. Например: $ source /etc/restic/default.env.sh
$ restic snapshots # You don't have to supply all parameters like --repo, as they are now in your environment!pw.txt : Этот файл должен содержать Restic Password (одиночная строка), используемый для шифрования репозитория. Это новый пароль, который скоро будет использован при инициализации нового репозитория. Он должен быть уникальным для этого респозитория резервного копирования и необходимо для восстановления из него. Не используйте пароль для входа в систему B2, это должно быть иначе. Например, вы можете сгенерировать пароль символов 128 (все должны быть на одной строке) с: $ openssl rand -base64 128 | tr -d ' n ' > /etc/restic/pw.txtbackup_exclude.txt : список шаблонов файлов, чтобы игнорировать. Это будет много обрезать размер резервного копирования и скорость резервного копирования, когда сделано правильно! Теперь мы должны инициализировать репозиторий на удаленном конце:
$ sudo -i
# source /etc/restic/default.env.sh
# restic init Поместите этот файл в /bin :
restic_backup.sh : Сценарий, который определяет, как запустить резервную копию. Намерение состоит в том, что вам не нужно редактировать этот сценарий самостоятельно, но иметь возможность контролировать все из профилей *.env.sh . RESTIC Support Exclude Files. Они перечисляют пути с шаблонами файла, чтобы исключить из вас резервное копирование, файлы, которые просто занимают пространство для хранения, время резервного копирования, сеть и деньги. restic_backup.sh позволяет получить несколько разных файлов исключения.
/etc/restic/backup_exclude.txt - Глобальный список исключений. Вы можете использовать только этот, если ваша настройка проста. Это установлено в _global.env.sh . Если вам нужен другой файл для другого профиля, вы можете переопределить envvar RESTIC_BACKUP_EXCLUDE_FILE в этом профиле..backup_exclude.txt Per Backup Path. Если у вас есть, например, USB -диск, установленный AT/MNT/Media, и этот путь включен в $RESTIC_BACKUP_PATHS , вы можете разместить файл /mnt/media/.backup_exclude.txt , и он будет автоматически поднять. Хорошая вещь в этом заключается в том, что резервные пути автономны с точки зрения того, что они исключают! Теперь посмотрите, работает ли сама резервная копия, работая как root
# source /etc/restic/default.env.sh
# /bin/restic_backup.sh Поскольку default.env.sh .
# restic snapshots Кроме /mnt/restic
# restic mount /mnt/restic
# ls /mnt/restic Все настройки ОС отличаются тем, каким планировщиком задач они используют. В качестве демонстрации давайте посмотрим, как мы можем сделать это с Systemd под Linux здесь.
Поместите эти файлы в /etc/systemd/system (обратите внимание, что Makefile устанавливает в качестве пакета /usr/lib/systemd/system )
[email protected] : служба, которая вызывает сценарий резервного копирования с указанным профилем. Профиль указан значением после @ при его запуске (см. Ниже).[email protected] : таймер, который запускает бывшую резервную копию каждый день (то же самое о профиле здесь).OnCalendar в файле.Теперь просто включите таймер с:
# systemctl enable --now [email protected]Вы можете увидеть, когда ваша следующая резервная копия запланирован с
# systemctl list-timers | grep resticи увидеть статус бегущего резервного копирования с:
# systemctl status restic-backupили начать резервную копию вручную:
$ systemctl start restic-backup@defaultВы можете следить за результатом вывода Stdout вживую, так как работает резервная копия:
$ journalctl -f -u [email protected] (Skip -f чтобы увидеть все резервные копии, которые запускаются)
Время от времени было бы хорошо провести медицинскую проверку удаленного репозитория, чтобы убедиться, что он не коррумпирован. Это можно сделать с помощью $ restic check .
Существуют спутниковые сценарии, сервис и таймер ( *check* ) до RESTIC-BACKUP.SH, который проверяет резервную резервную копию на наличие ошибок; Посмотрите в репо в usr/lib/systemd/system/ и bin/ и скопируйте то, что вам нужно, в их соответствующих местах.
# systemctl enable --now [email protected] 
Чтобы иметь разные резервные задания, имеющие, например, разные ведра, путь резервного копирования графика, просто сделайте копию default.env.sh и используйте определенное имя профиля вместо default в предыдущих шагах.
Чтобы создать другое резервное копирование и использование, вы можете сделать:
# cp /etc/restic/default.env.sh /etc/restic/other.env.sh
# vim /etc/restic/other.env.sh # Set backup path, bucket etc.
# source /etc/restic/other.env.sh
# restic_backup.sh При включении он будет записывать в файл журнала CSV статистику после каждой резервной копии. Может быть включен путем некомментирования переменной env ( RESTIC_BACKUP_STATS_DIR ) в глобальном файле среды или определения ее в конкретном профиле.
Статистические журналы (а также) уведомления на рабочем столе получают в дополнительном заезде restic snapshots и restic diff . Это исполнение передается уведомлениям (без дополнительного запуска).

Это хорошая идея, чтобы быть на вершине ваших резервных копий, чтобы убедиться, что они не увеличиваются в размерах и не получают высоких затрат. Тем не менее, общеизвестно сложно правильно делать уведомления по графическим интерфейсу из процесса без пользователя (например, корень).
Таким образом, этот проект предоставляет легкое решение для уведомлений на рабочем столе, которое работает так: в основном restic_backup.sh добавит сводную линию последней резервной копии в файл, принадлежащий пользователю, (пользователь, управляющий средой настольных компьютеров вашей ОС). Затем у пользователя есть процесс, который считывает это и пересылает каждую строку в качестве нового сообщения в использованную среду рабочего стола.
Чтобы установить уведомления на рабочем столе:
$ mkfifo /home/user/.cache/notification-queue/etc/restic/default.sh , Set: RESTIC_BACKUP_NOTIFICATION_FILE=/home/user/.cache/notification-queueМы хотим знать, когда автоматическое резервное копирование не удается, поэтому мы можем это исправить. Поскольку мой ноутбук не запускает почтовый сервер, я отправился на решение настроить свой ноутбук, чтобы иметь возможность отправлять электронные письма с PostFix через мой Gmail. Следуйте инструкциям там.
Поместите этот файл в /bin :
systemd-email : отправляет электронное письмо с помощью SendMail (1). Этот сценарий также имеет тайм-аут для не спама серверов Gmail и блокировки моей учетной записи. Поместите этот файл в /etc/systemd/system/ :
[email protected] : Служба, которая может уведомить вас по электронной почте, когда служба SystemD не стерж. Измените целевой адрес электронной почты в этом файле и замените или удалите {{ INSTALL_PREFIX }} в соответствии с вашей установкой. Теперь Edit /usr/lib/systemd/system/[email protected] и /usr/lib/systemd/system/[email protected] , чтобы вызвать эту услугу.
OnFailure=status-email-user@%n.service
Используйте bin/cron_mail : обертка для запуска заданий Cron, которая отправляет вывод задания в качестве электронного письма с использованием команды Mail (1). Это предполагает, что mail программа правильно настроена в системе для отправки электронных писем.
Чтобы использовать это, оберните команду Restic Script с ней в свой файл Cron, как:
- @midnight root . /etc/restic/default.sh && restic_backup.sh
+ @midnight root . /etc/restic/default.sh && cron_mail restic_backup.shДля ноутбука может иметь смысл не делать тяжелые резервные копии, когда вы находитесь на домещенном подключении, как общее соединение с вашего мобильного телефона. Чтобы решить это, мы можем настроить системную услугу, которая находится в состоянии успеха, только тогда, когда соединение незамечено. Тогда мы можем сказать нашу резервную службу, чтобы просто зависеть от этой услуги! Когда незамеченная служба обнаружит незамеченное соединение, она перейдет к неудачному состоянию. Затем наша служба резервного копирования не будет работать, поскольку это требует, чтобы эта другая услуга была в состоянии успеха.
[email protected] и [email protected] чтобы потребовать, чтобы новая услуга была в состоянии успеха: Requires=nm-unmetered-connection.service
After=nm-unmetered-connection.service
/etc/systemd/system/ :nm-unmetered-connection.service : услуга, которая находится в состоянии успеха, только в том случае, если соединение не наносит неизметки./bin :nm-unmetered-connection.sh : обнаруживает дозируемые соединения и возвращает код ошибки, если обнаружено. Эти сценарии требуют, чтобы GNOME NetworkManager был установлен (измените этот сценарий, если в вашей системе есть другой сетевой диспетчер).# systemctl daemon-reload ☝ Совет : все шаги, но первые можно сделать за один раз, если вы используете Makefile. Установите $PREFIX по мере необходимости или оставьте пустым для установки в / .
sudo bash -c ' export PREFIX=
make build/usr/lib/systemd/system/nm-unmetered-connection.service
install -m 0644 build/usr/lib/systemd/system/nm-unmetered-connection.service $PREFIX/etc/systemd/system
install -m 0555 bin/nm-unmetered-connection.sh /bin
systemctl daemon-reload
' Для удобства есть сценарий restic ORPPER, который делает профили загрузки и работает RESTIC простым (он должен работать с SUDO для чтения среды). Просто беги:
sudo resticw WHATEVER (например, sudo resticw snapshots ) для использования профиля по умолчанию.resticw -p anotherprofile snapshots .restic Like --diff-latest .Полезные команды:
| Командование | Описание |
|---|---|
resticw snapshots | Список резервных снимков |
resticw diff <snapshotId-1> <snapshotId-2> | Показать изменения между резервными снимками |
resticw stats / resticw stats snapshotId ... | Показать статистику для всего репо или указанных снимков |
resticw mount /mnt/restic | Установите свой удаленный репозиторий |
resticw --diff-latest | Показать последние изменения снимка: запускает restic diff после поиска последних 2 снимков |
Существует целевая цель для удаления всех файлов (сценариев и конфигураций) , которые были установлены sudo make install-* . Просто беги:
$ sudo make uninstall Лучший способ отладки того, что происходит, - это запустить сценарий restic_backup.sh с помощью трассировки Баша. Вы можете активировать его, запустив сценарий с помощью bash -x :
$ source /etc/restic/default.env.sh
$ bash -x /bin/restic_backup.sh
Чтобы отлаживать меньшие части сценария резервного копирования, вставьте эти строки в верхней и нижней части соответствующих частей кода, например:
set -x
exec 2> /tmp/restic-automatic-backup-scheduler.log
< code to debug >
set +xа затем осматривайте выходы, такие как
$ less /tmp/restic-automatic-backup-scheduler.log
$ tail -f /tmp/restic-automatic-backup-scheduler.log # or follow output like this.Makefile , просто установите на $PREFIX $ PREFIX=/tmp/restic-test make install-systemdresticw : Если вы когда-нибудь обновите DOC об использовании, вам нужно будет обновить автоматический диапазон: $ pip install doctopt.sh
$ doctopt.sh usr/local/bin/resticwЧтобы сделать новый релиз:
$ vi CHANGELOG.md && git commit -am " Update CHANGELOG.md "
$ git tag vX.Y.Z
$ git push && git push --tags