以前はRestic-SystemD-Automatic-Backupという名前が付けられていました
これらのトップの貢献者を含む:
Resticは、バックアップを正しい方法で作成するためのコマンドラインツールです。機能の説明については、公式ウェブサイトを確認してください。ストレージバックエンドとして、Resticがうまく機能するため、Backblaze B2をお勧めします。これは(執筆時点で)愛好家のハッカーにとって非常に手頃な価格です! (逸話:毎月フルシステムのバックアップの支払いを毎月支払います。
残念ながら、Resticは自動化されたバックアップを実行する方法が事前に構成されていません。ただし、OSおよび一部のラッパーに組み込みツールを使用して、これを自分でセットアップすることができます。 SystemDを使用したLinuxの場合、SystemDタイマーを使用すると便利です。 MACOSシステムの場合、組み込みのLaunchagentsを使用できます。 Windowsには、ScheduleDtasksを使用できます。 Cronのようなものを持っているOSも機能します!
ここでは、サンプルスクリプトとニーズに合わせて変更できる構成を使用して、セットアップ方法に関するステップバイステップのチュートリアルに従います。
注意してください、RESTICのサポートされているストレージバックエンドを使用できます。セットアップは似ているはずですが、選択したバックエンドに一致するために他の構成変数を使用する必要があります。
更新:このプロジェクトは機能完全です(以下の推論を参照)。バグ修正のみが受け入れられます。機能を追加したい場合は、お気軽にフォークしてください。このプロジェクトの最初の範囲でした!
これの範囲は、すべての問題と可能なすべてのセットアップを解決する本格的なスーパーソリューションではないことです。目的は、要件に合った完璧なバックアップソリューションの縫製を開始するためのハッキング可能なコードベースになることです!
それにもかかわらず、プロジェクトは箱から出して、最小限に抑えられますが、ユーザーによる構成と拡張機能のためにドアを開いています。
B2とは異なるストレージバックエンドを使用するには、バックアッププロファイルのいくつかの設定変数とrestic_backup.sh内のいくつかのRESTIC引数を調整するだけでいいはずです。
burseここでのLinuxのセットアップは、 /にインストールを想定しています。
多くのLinuxディストリビューションは、最近ではSystemDを使用しています。これは、ランニングサービスとスケジュールされたジョブに適したサポートを特徴としています。 SystemDの分布がない場合は、代わりにCronのセットアップをチェックしてください。
TL; DRセットアップ
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]を編集します。# 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.timercomes MacOSセットアップは、推奨されるデフォルトの場所への自家製のインストールを想定しています。これは$HOMEBREW_PREFIX ( brew --prefix )で、Intel Macで/usr/local 、およびAppleシリコンの/opt/homebrewです。
LaunchDは、MacOSの最新のビルトインサービススケジューラです。ルート(デーモン)または通常のユーザー(エージェント)としてのランニングサービスをサポートしています。ここでは、通常のバックアップを開始するために通常のユーザーとして実行されるLaunchagentを設定します。
TL; DRセットアップ
$ 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-schedulerdisableコマンドを使用して、エージェントを一時的に一時停止するか、 bootoutアンインストールします。
$ launchctl disable gui/$UID/com.github.erikw.restic-backup
$ launchctl bootout gui/$UID/com.github.erikw.restic-backup
.plistファイルを更新した場合、 bootrstrapに続いてbootoutを発行し、 launchctlのサブコマンドenable必要があります。これにより、ファイルが適切にリロードされることが保証されます。
Windowsには、ScheduledTaskと呼ばれる組み込みタスクスケジューラが付属しています。 FrontEndアプリは「タスクスケジューラ」( taskschd.msc )であり、PowerShellコマンドを使用して新しいスケジュールされたタスクをインストールできます。
ここでは、ResticとこのバックアップスクリプトをWindowsで動作させることができるかもしれない方法の1つを説明します。ここでは、 scoopとgit-bashを使用することにしました。
TL; DRセットアップ
pwsh 、Shebangスクリプトで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セットアップ
$ 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"なぜ? OS固有のTL; DRセットアップは、何よりもMakeFileまたはPackage Managerを使用してこれらのファイルをインストールします。 Placeholder String {{ INSTALL_PREFIX }}は、移植性の理由でソースファイルにあるため、Makefileはすべての異なるオペレーティングシステムをサポートできます。 makeユーザーはPREFIX=/usr/local make install-systemdインストールするときに、別の$PREFIXを設定できます。
この詳細なマニュアルのセットアップでは、すべてのファイルを手動で/etcおよび/binにコピーします。したがって、最初のステップとして、ソースファイルのプレースホルダー文字列{{ INSTALL_PREFIX }}を削除する必要があります。
要するに:
まず、Resticに関するこの公式のBackblazeチュートリアルを参照して、新しいB2バケットの作成方法についての指示(「B2を有効にしてBackblazeアカウントを作成する」)に従ってください。一般に、B2暗号化なしでプライベートバケツ(RESTICは暗号化クライアント側が当社のために行われます)が必要です。
Resticがバケツに接続できるようにするには、B2設定でKeyIDとApplicationKeyのペアを作成します。使用する各バケットに個別のIDとキーを作成することをお勧めします。
これらのファイルを/etc/restic/に入れます:
_global.env.sh KeyID&ApplicationKeyなどのグローバル設定でこのファイルを入力します。default.env.sh :これはデフォルトのプロファイルです。これをバケット名、バックアップパス、保持ポリシーで記入してください。このファイルは_global.env.shソースであるため、自己完結型であり、手動のRESPICコマンドを発行するときにシェルに供給できます。例えば: $ 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パスワード(シングルライン)が含まれている必要があります。これは、新しいリポジトリを初期化するときにすぐに使用される新しいパスワードです。このResticバックアップリポジトリに固有のものでなければならず、復元に必要です。 B2ログインパスワードを再利用しないでください。これは異なるはずです。たとえば、以下で128文字のパスワード(すべて1行にある必要があります)を生成できます。 $ 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サポートはファイルを除外します。彼らは、バックアップ、ストレージスペースを占有するだけのファイル、バックアップ時間、ネットワーク、およびお金を除外するファイルパターンパスをリストします。 restic_backup.sh 、いくつかの異なる除外ファイルを許可します。
/etc/restic/backup_exclude.txtグローバル除外リスト。セットアップが簡単な場合は、これのみを使用できます。これは_global.env.shに設定されています。別のプロファイルに別のファイルが必要な場合は、このプロファイルでenvvar RESTIC_BACKUP_EXCLUDE_FILEをオーバーライドできます。.backup_exclude.txtバックアップパスごと。 /MNT/メディアで取り付けられているUSBディスクがあり、このパスが$RESTIC_BACKUP_PATHSに含まれている場合、ファイル/mnt/media/.backup_exclude.txtを配置できれば、自動的にピックアップされます。これの良いところは、バックアップパスが除外されるものの観点から自己完結型であるということです! ルートとして実行することにより、バックアップ自体が機能するかどうかを確認します
# source /etc/restic/default.env.sh
# /bin/restic_backup.sh default.env.shはすでにルートシェルに供給されているため、スナップショストをリストすることができます
# restic snapshotsまたは、レストリスナップショットをディレクトリセット/mnt/resticにマウントすることができます
# restic mount /mnt/restic
# ls /mnt/restic すべてのOSセットアップは、使用するタスクスケジューラが異なります。デモンストレーションとして、Linuxの下でSystemDでこれを行う方法をここで見てみましょう。
これらのファイルを/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で実行できます。
Restic-Backup.shにコンパニオンスクリプト、サービス、およびタイマー( *check* )があります。 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の追加の実行で発生するデスクトップ通知を(および)ログにします。この実行は、通知と共有されます(追加の実行なし)。

バックアップの上にいることをお勧めします。ただし、非ユーザープロセス(rootなど)からGUI通知を正しく行うことはトリッキーであることで有名です。
したがって、このプロジェクトは、このように機能するデスクトップ通知の軽量ソリューションを提供します。基本的にrestic_backup.shは、最後のバックアップの概要行をユーザー所有ファイル(OSのデスクトップ環境を実行しているユーザー)に火と焦げたファッションで追加します。次に、ユーザーには、使用中のデスクトップ環境への新しいメッセージとして各行を転送するプロセスがあります。
デスクトップ通知を設定するには:
$ mkfifo /home/user/.cache/notification-queue/etc/restic/default.sh : RESTIC_BACKUP_NOTIFICATION_FILE=/home/user/.cache/notification-queue自動バックアップが失敗したときに注意したいので、修正できます。私のラップトップはメールサーバーを実行していないため、ラップトップをセットアップするソリューションを使用して、Gmailを介してPostfixで電子メールを送信できるようにしました。あそこの指示に従ってください。
このファイルを/binに入れます:
systemd-email :sendmail(1)を使用して電子メールを送信します。このスクリプトには、Gmailサーバーをスパムしないためのタイムアウトも備えており、アカウントをブロックすることもできます。このファイルを/etc/systemd/system/ :
[email protected] :SystemDサービスが失敗したときに電子メールで通知できるサービス。このファイルのターゲットメールアドレスを編集し、インストールに従って{{ INSTALL_PREFIX }}を交換または削除します。編集/usr/lib/systemd/system/[email protected]および/usr/lib/systemd/system/[email protected]を呼び出して、このサービスの失敗を呼び出します。
OnFailure=status-email-user@%n.service
bin/cron_mail :cronジョブを実行するためのラッパーを使用します。これは、メール(1)コマンドを使用して電子メールとしてジョブの出力を送信します。これは、 mailプログラムがシステムに正しく設定されていることを前提としています。電子メールを送信します。
これを使用するには、次のようなcronファイルにRespicスクリプトコマンドを包みます。
- @midnight root . /etc/restic/default.sh && restic_backup.sh
+ @midnight root . /etc/restic/default.sh && cron_mail restic_backup.shラップトップの場合、携帯電話からの共有接続のようなメーターの接続に載っているときに、重いバックアップを実行しないことは理にかなっています。これを解決するために、接続が未定の場合にのみ、成功状態にあるSystemDサービスをセットアップできます。その後、バックアップサービスにこのサービスに依存するように伝えることができます!無制限のサービスが無制限の接続を検出すると、失敗した状態になります。その後、バックアップサービスは、この他のサービスが成功状態にあることを要求するため、実行されません。
[email protected] and [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を簡単に実行するresticラッパースクリプトがあります(環境を読むにはSUDOで実行する必要があります)。ただ実行:
sudo resticw WHATEVERデフォルトのプロファイルを使用するために(例: sudo resticw snapshots )。resticw -p anotherprofile snapshots 。--diff-latestオプションのようなresticの上にエキストラがあります。有用なコマンド:
| 指示 | 説明 |
|---|---|
resticw snapshots | バックアップスナップショットをリストします |
resticw diff <snapshotId-1> <snapshotId-2> | バックアップスナップショット間の変更を表示します |
resticw stats / resticw stats snapshotId ... | リポジトリ全体または指定されたスナップショットの統計を表示します |
resticw mount /mnt/restic | リモートリポジトリをマウントします |
resticw --diff-latest | 最新のスナップショットの変更を表示:最新の2つのスナップショットを見つけた後、 restic diffを実行します |
sudo make install-*によってインストールされたすべてのファイル(スクリプトと構成)を削除するためのメイクターゲットがあります。ただ実行:
$ sudo make uninstall何が起こっているのかをデバッグする最良の方法は、Bashのトレース関数を使用して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