あなたのRaspberry Piをバックアップする方法

Raspberry Pi Rsync Backup

あなたのRaspberry Piをバックアップするのは、複雑である必要はありません。多くの高度なバックアップソリューションが存在しますが、時には最も単純なアプローチが最も効果的です。本記事では、信頼性の高いローカルバックアップを作成するのに最適な小さくて強力なコマンドラインツールであるrsyncの使い方を紹介します。

Raspberry Piのバックアップにrsyncが最適なツールである理由

Rsync(リモート同期)は、Raspberry Piに標準でインストールされている強力なファイル同期および転送ツールです。

rsyncの核心は、効率的にファイルをある場所から別の場所にコピーしますが、単純なコピー操作よりも遥かにスマートです。変更されたファイルの部分のみを転送するため、時間とシステムリソースを節約できます。これは特に頻繁に変更される大きなファイルをバックアップする際に便利です。

Man Rsync Raspberry

私は主にrsyncを使用して、Raspberry Pi上の重要なユーザーデータをバックアップしています。たとえば、Raspberry Pi上でフォトギャラリーサーバーを運営しており、rsyncはすべての貴重な画像のバックアップコピーを外部ドライブに保持するのに最適です。新しいまたは変更されたファイルが自動的に検出されてコピーされます。

全体のファイルをコピーするバックアップツールとは異なり、rsyncは変更された部分のみを転送しますので、バックアップが大幅に速くなり、SDカードの摩耗を減らすことができます。そのコマンドラインインターフェースは、cronジョブでの自動化にも最適で、組み込みのチェックサム機能によりバックアップの整合性が保証されます。さらに、rsyncの軽量性は、バックアッププロセスが実行されていない限り、Piの速度を遅くするとか、SDカードのストレージスペースを占有することはありません。

これらの理由から、rsyncは私のニーズに最適なソリューションであり、信頼性が高く効率的なバックアップシステムを望む多くのRaspberry Piユーザーにとって理想的な選択であると考えています。

Rsyncを使用してRaspberry Piのファイルとフォルダーをバックアップする

ディレクトリをバックアップする最も簡単な方法は、次のコマンドを使うことです:

rsync -av /source/directory /backup/location

たとえば、私のホームディレクトリを「/media/backup」にマウントされた外部ドライブにバックアップするには、次のコマンドを使用します:

rsync -av --delete /home/david/immich-app /media/backup

私の写真ライブラリデータベースをバックアップするためです。

Rsync Raspberry Folder Backup

それぞれのオプションが何をするかは以下の通りです:

  • -aはアーカイブモードを有効にし、ファイルのパーミッション、所有権、およびタイムスタンプを保持します。
  • -vは詳しい出力を提供し、何がコピーされているかを確認できます。
  • --deleteは、ソースに存在しないファイルをバックアップ位置から削除します。

:rsyncはパスにおける末尾スラッシュに対して特に敏感であることも知っておくべきです。ソースに末尾スラッシュがある場合、「このディレクトリの内容をコピーします」ことを意味します。たとえば、rsync -av --delete /home/pi/folder /media/backupは「folder」の内容を直接「backup」にコピーし、一方、スラッシュを省略すると「folder」ディレクトリ自体を「backup」にコピーします。

Raspberry Piバックアップの確認

バックアップに頼る前に、それが正しく機能したことを確認する必要があります。最も簡単な確認方法は、rsyncのドライランオプションを使用することで、-nまたは--dry-runとして指定できます。このコマンドを実行すると:

rsync -avn --delete /home/pi/folder /media/backup

バックアップが最新であれば、何も転送する必要がないファイルを表示するはずです。

Rsync Raspberry Backup Dry Run

より詳細な確認を行うには、rsyncコマンドに-cまたは--checksumオプションを追加できます。これは標準のタイムスタンプおよびサイズ比較より遅くなりますが、チェックサムを計算することで、ソースとバックアップの間で全てのファイルが完全に一致することを保証します。次のコマンドを実行します:

rsync -avc --delete /home/pi/folder /media/backup

バックアップを確認する最も詳細な方法は、diffコマンドを使用してソースとバックアップの場所の間のすべてのファイルとディレクトリを比較することです。この確認を行うには、次のコマンドを使用します:

diff -r /home/pi/folder /media/backup/folder

-rオプションは、すべてのサブディレクトリを再帰的にチェックするようにdiffに指示します。コマンドが出力を生成しない場合、バックアップはソースと同一であることを意味します。違いがある場合、diffはどのファイルが異なるか、または欠けているのかを正確に示します。

Rsyncを使用して完全なRaspberry Piバックアップを作成する

状況によっては、重要なフォルダーの一部だけをバックアップするのではなく、Raspberry PiのSDカード全体をバックアップする方が便利で安全な場合があります。

rsyncを使用してRaspberry Piの完全バックアップを作成するには、バックアップ先が必要です。もう一つのSDカードまたはシステム全体を保持するために十分なスペースのある外部ドライブが必要です。バックアップドライブは、すべてのファイルパーミッションと属性を正しく保持するためにext4のようなLinux互換ファイルシステムでフォーマットされている必要があります。

Raspberry Piシステム全体をバックアップする最も難しい部分は、特殊なシステムディレクトリとファイルを正しく扱うことです。私の経験では、バックアップが必要ないか、復元時に問題を引き起こす可能性があるシステムディレクトリを除外するのが最も簡単な解決策です。「backup-exclude.txt」というファイルを作成し、次のシステムディレクトリをバックアップから除外するように追加します:

  • /proc/* # 実行中のプロセス情報
  • /sys/* # カーネルおよびシステム情報
  • /dev/* # デバイスファイル
  • /tmp/* # 一時ファイル
  • /run/* # 実行データ
  • /mnt/* # マウントポイント
  • /media/* # 取り外し可能メディア
  • /home/pi/.cache/* # ユーザーキャッシュファイル
  • /lost+found # ファイルシステム回復ディレクトリ

これらの除外が設定されたら、可能な限り多くの実行中のアプリケーションを閉じ、次のバックアップコマンドを実行します:

sudo rsync -avxhP --delete --exclude-from=/home/pi/backup-exclude.txt //media/backup/rootfs/

-xオプションは、rsyncがファイルシステムの境界を越えないようにし、システムディレクトリに問題を引き起こす可能性を防ぎます。-hオプションは、rsyncがファイルサイズと転送速度を人間が読みやすい形式で表示するようにします。

rsyncバックアップの自動化

手動で作成された完全バックアップは役立ちますが、私はLinuxの組み込みcronスケジューラを使用してそれらを自動化することを好みます。これを設定するには、ホームディレクトリに「backup-pi.sh」というファイルを作成し、次の内容を追加します:

#!/bin/bash  
BACKUP_DRIVE="/media/backup"  
LOG_FILE="/home/pi/backup-log.txt"  
  
# バックアップドライブがマウントされているか確認  
if ! mountpoint -q $BACKUP_DRIVE; then  
echo "Backup drive not mounted at $BACKUP_DRIVE" >> $LOG_FILE  
exit 1  
fi  
  
# ロギング用のタイムスタンプを作成  
date >> $LOG_FILE  
  
# エラーチェック付きでバックアップを実行  
sudo rsync -avxhP --delete \  
--exclude-from=/home/pi/backup-exclude.txt \  
/$BACKUP_DRIVE/rootfs/ \  
>> $LOG_FILE 2>&1  
  
# バックアップ完了を記録  
echo "Backup finished at $(date)" >> $LOG_FILE  
echo "-------------------" >> $LOG_FILE

スクリプトを実行可能にするには、chmod +x backup-pi.shを使用し、cronを使ってスケジュールします。crontab -eと入力し、以下の行を追加して毎日真夜中にバックアップを実行します:

0 0 * * * /home/pi/backup-pi.sh

Cron Raspberry Backup

Rsync Raspberry Piバックアップの復元

個々のファイルやディレクトリを復元する際は、プロセスは簡単です。単にrsyncコマンドでソースと宛先を入れ替えるだけです。たとえば、バックアップから写真ライブラリを復元するには:

rsync -av /media/backup/home/david/immich-app/ /home/david/immich-app/

完全なシステム復元を行うには、新しいSDカードにRaspberry Pi OSを新規インストールする必要があります。まず、新しいSDカードにRaspberry Pi OSの新しいコピーをインストールします。それが完了したら、新しいSDカードでPiを起動し、初期設定プロセスを完了します。次に、バックアップドライブをPiに接続します。すべてが適切に接続され、マウントされたら、rsyncコマンドを使用してバックアップを復元できます:

sudo rsync -avxhP /media/backup/rootfs/

復元が完了したら、すべての復元ファイルが正しくロードされているか確認するためにPiを再起動することをお勧めします。また、重要なサービスや設定が期待通りに機能していることを確認する必要があります。

復元後に特定のアプリケーションが動作しない場合は、通常は/var/log/内にあるログファイルを確認して、権限関連のエラーを探してください。必要に応じて、次のコマンドを実行してホームディレクトリファイルの所有権を修正する必要があります:

sudo chown -R $USER:$USER /home/$USER

rsyncを使用した復元は、バックアップの作成と同じくらい簡単です。他のコマンドのソースと宛先パスを反転させるだけです。

私はrsyncのコマンドラインのシンプルさを好みますが、ターミナルに不安がある場合は、素晴らしいGUIの代替手段もいくつかあります。たとえば、Syncthingを使用すれば、異なるシステム間で複数のフォルダーを同期できます。また、Timeshiftはクリーンなインターフェースを持つシステムスナップショット機能を提供します。どのツールを選んでも重要なのは、貴重なデータとシステム構成を保護するためにRaspberry Piの定期的なバックアップを維持することです。

すべての画像はデイビッド・モレロによって撮影されました。