増分バックアップを使用して、Raspberry Piを自動的にバックアップします


14

このテーマに関するいくつかの異なる質問と回答があります。しかし、検索するとき、「標準的」と見なされる可能性のある回答、または1か所でさまざまなオプションを収集する回答を見つけることができませんでした。

Raspberry Piのコンテンツをバックアップして、必要に応じて簡単かつ確実に完全な復元を可能にしたいと思います。

これらの機能は理想的です。

  • 外部の場所(USBスティック、DAS、NAS、ネットワークコンピューターなど)に保持されるバックアップ
  • 増分またはスケジューリングによる自動化
  • バックアップのバージョン番号

SDカードのクローンは人気のあるソリューションのようですが、Goldilocksによるこの投稿によると、クローンにはランタイムなどでのみロードされるファイルが含まれているため、これはお勧めできません。

だから、良い解決策はrsync、上記の基準を処理できるユーティリティのようなもの、またはおそらくより堅牢なものを使用すると想定しています。

私の特定の状況: LAN上にRaspberry Piがあり、Mac OS Xコンピューター、Synology DiskStation NAS、またはRaspberryに接続されたUSBメモリスティックにバックアップできます。私は後者を使用したくないでしょう。

回答:


10

Rsnapshotは次の基準を満たします:1

  • ローカルまたはリモートで使用できます。

  • 自動化/スケジュールすることができます。

  • 番号付きの増分バックアップを使用します。

私が作業しているサーバーで使用されているという事実以外に個人的な経験はあまりありませんが、時々それは一日を節約しましたが、ここには素晴らしい紹介があると思われます、Arch linux wikiドキュメントがあり、ページがあります(これのほとんどは他のディストリビューションにも同様に当てはまると思います)。ホームページは、オンラインでは見つけられないが、それを検索すると多数のチュートリアルやディスカッションなどが見つかるHOWTOを参照します。これらのリンクに加えて(実際のハウツーはオフラインのままにして、間違ったバージョンと間違ったバージョンを使用して混乱しないようにすることができます)。


  1. どうやら現在(2018年)ですが、BorgBackupを支持してメンテナンスされていない可能性があります

ありがとう!今週の週末にテストを行い、解決したら回答を確認します。
Winterflags

1
Rsnapshotは維持されなくなりました。原作者は、スイッチの使用にBorgBackupを
lightswitch05

@ lightswitch05知っておきたい!
goldilocks

2

いくつかのバックアップ手法を試しました。定期的に2を使用しています。

MacでSDカードのクローンを作成し、画像を圧縮します。これをセキュリティのバックアップとして使用するか、カードを複製します。これは理想的ではないことに同意します。私のスクリプトは以下です。

より頻繁に、私rsyncはPiに接続されたHDにコピーするために使用します。詳細については、https://raspberrypi.stackexchange.com/a/28087/8697を参照してください。

実際、Wheezy、Jessie、MATEのイメージを(異なるディレクトリに)バックアップするために、わずかに異なるバージョンがあります。

Macにrsyncを試みましたが、これは部分的にしか機能しませんでした。基本的な問題はrsync、異なるプラットフォーム上の違いは言うまでもなく、MacとPiのユーザーが一致しないことです。最新のOS Xのセキュリティの変更により、おそらくさらに多くの問題が発生するでしょう。

1つのPiを使用して、ネットワーク経由で別のPiのバックアップを作成することに成功しました。

NASでこれがどのように機能するかはわかりませんが、ハードリンクとアクセス許可に問題がある可能性があります。

#!/bin/bash
# script to backup Pi SD card
# 2017-06-05
# DSK='disk4'   # manual set disk
OUTDIR=~/temp/Pi
# Find disk with Linux partition (works for Raspbian)
# Modified for PINN/NOOBS
export DSK=`diskutil list | grep "Linux" | sed 's/.*\(disk[0-9]\).*/\1/' | uniq`
if [ $DSK ]; then
    echo $DSK
    echo $OUTDIR
else
    echo "Disk not found"
    exit
fi

diskutil unmountDisk /dev/$DSK
echo please wait - This takes some time
echo Ctl+T to show progress!
time sudo dd if=/dev/r$DSK bs=4m | gzip -9 > $OUTDIR/Piback.img.gz

#rename to current date
echo compressing completed - now renaming
mv -n $OUTDIR/Piback.img.gz $OUTDIR/Piback`date +%Y%m%d`.img.gz

DASソリューションは、Piに接続されたUSBスティックに簡単に適応できるはずです。ネットワーク化されたバックアップのセットアップに悩むのではなく、USBへのrsyncを実行することを考えています。
Winterflags

2

これらの2つの事実を考慮すると、他のオプションが表示されます。

  1. 同じデバイスを複数のディレクトリに同時にマウントできます。
  2. tmpfsディレクトリをマスクする任意の場所にマウントを作成できます。

そのため、バックアップしたくないパスがたくさんあります。プライマリパーティションを2番目のディレクトリにマウントすることで、それらのほとんどを回避できます。その他はまだあなたのようなバックアップにはしたくないデータを持つことになります/tmp/dev/var/log

私のプロセスはこのようになりました...

  1. Raspberry PiへのSSH
  2. 私がバックアップしたかったまさにマウント

    sudo mount                     /dev/mmcblk0p2    /tmp/root/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/var/log/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/tmp/
    sudo mount                     /dev/mmcblk0p1    /tmp/root/boot/
    
  3. マシンを終了します
  4. ssh + tar経由でデータをコピーします

    ssh pi@raspberry.local 'cd /tmp/root; sudo tar cf - * | gzip;' | pv > rpi.tgz
    # NOTE: The `pv` command gives you a progress meter but can be left out.
    
  5. 一時的なマウントを削除する

    for m in /var/log/ /dev/ /boot/ /; do sudo umount /tmp/root${m}; done
    

結果に満足したら、次のようにすべてを単一のファイルに入れることができます ~/backup.sh

#!/bin/bash -eu

dir=$(mktemp -d)

cleanup(){
    cd /tmp/ # You can't umount or rm a directory while you are in it.
    for m in /dev/ /tmp/ /var/log/ /boot/ /; do
        sudo umount ${dir}${m}
    done
    rm -rf ${dir}
}

do_mounts(){
    sudo mount                     /dev/mmcblk0p2    ${dir}/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/tmp/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/var/log/
    sudo mount                     /dev/mmcblk0p1    ${dir}/boot/
}

send_data(){
    cd ${dir}; sudo tar cf - * | gzip | tee >(md5sum > /tmp/backup.md5);
}

give_feedback(){
    awk '{print "MD5:", $1}' < /tmp/backup.md5 >&2
}

trap cleanup EXIT INT TERM
do_mounts
send_data
give_feedback

そして、呼び出しはこのようになります...

$ ssh pi@raspberry.local ./backup.sh | pv | tee rpi.tgz | md5sum | awk '{print "MD5:", $1}'
MD5: d3d9181374f3ec8e4e721c786eca9f71
 348MB 0:04:50 [ 1.2MB/s] [                 <=>                                ]
MD5: d3d9181374f3ec8e4e721c786eca9f71

ヒント:実験中は、に変更tar cf - *tar cf - etcて、各テスト実行の時間を節約してください。


2

Raspis @ homeでも同じ問題が発生しました。だから、私はraspiBackupを書きました。これにより、ユーザーの発明なしに、通常のベースでdd、tar、rsyncのバックアップを作成できます。試してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.