日付別増分ファイルのバックアップ

日付別増分ファイルのバックアップ

日付別の部分バックアップをサポートするバックアップツールはありますか?つまり、私のラップトップのようないくつかの小さなドライブは、外部2TBドライブのすべてのファイルの完全なコピーを保存できないことを意味します。私は主に私が作業しているファイルである最新のファイルを自分のラップトップに保存したいと思います。しかし、同時に制限されたストレージスペースで他のドライブを同期できるようにしたいです。したがって、各コンパクトドライブには、特定の日付(3か月前など)以降に作成または変更されたファイルを含める必要があります。それぞれディスクサイズが異なる2台のノートパソコンがあるとしましょう。ドライブが小さいノートブックでは、先月のファイルのみを表示したい場合があります。ノートブック内のすべてのファイルと3か月以上経過したその他のアーカイブは、大容量の外部ドライブにバックアップする必要があります。したがって、外部ドライブは2つの小さなドライブをミラーリングして同期を維持する必要があります。試してみましたが、unison日付別のバックアップをサポートしていないようです。一部のシェルスクリプトではうまくいくかもしれませんが、rsync新しいソリューションを実装する前に解決策があることを確認したいと思います。

ベストアンサー1

これには専用プログラムを使用しませんが、cron、bash、tar(増分ダンプ)および/またはrsync。私の考えには2つの最良の解決策があり、状況に応じて両方または両方を使用します。私は最初のものがあなたに適していると思いますが、ここでは両方を説明します。

デルタタールアーカイブ

ソリューションの鍵は、次のスクリプトです。

#!/bin/bash

# You will need to set the variables $EXCLUDE, $DATA and $BACKUPS
# as environment variables, in ~/.bashrc or somewhere.

OPTS="--create --no-check-device --bzip2 --verbose -X $EXCLUDE"
for d in `ls $DATA`; do
    SNAPSHOT=$BACKUPS/$d.snar
    if [ $1 == full ]; then
        echo "Archiving $d (full)..."
        rm -rvf $SNAPSHOT
        ARCHIVE=$DATA/$d.`date --iso-8601`.full.tar.bz2
        tar $OPTS --file=$ARCHIVE --listed-incremental=$SNAPSHOT $DATA/$d
    fi
    if [ $1 == increment ]; then
        echo "Archiving data/$d (increment)..."
        ARCHIVE=$DATA/$d.`date --iso-8601`.tar.bz2
        tar $OPTS --file=$ARCHIVE --listed-incremental=$SNAPSHOT $DATA/$d
    fi
done

これは、サブディレクトリがあり、$DATA各サブディレクトリが別々のアーカイブにバックアップされていると仮定します。設定が異なる場合は、スクリプトをカスタマイズしてください。

crontabでは、次のようにバックアップをスケジュールできます。

# m  h  dom mon dow   command
  44 1  1   */2 *     ~/bin/backup_data full > ~/backups/data/logs/`date --iso-8601`.full.log 2>&1
  44 5  *   *   *     ~/bin/backup_data increment > ~/backups/data/logs/`date --iso-8601`.log 2>&1

ご覧のとおり、この場合、2か月ごとにフルバックアップが作成され、そのフルダンプから始まる増分バックアップが毎日作成されます。ファイルを失ったりタイムスタンプを変更したりすると、tarの増分アーカイブに問題が発生します。したがって、時々完全なダンプを生成することをお勧めします。

マシン間の同期と古いファイルの削除に関しては、そのタスクは実際には直交しているため、バックアップ自体とは別に維持する必要があります。もちろん、対応する--deleteオプションなしで同期にrsyncを使用すると、大型外部ドライブのデータが失われることはありません。したがって、あなたのコマンドは次のようになります。

rsync -av /backups/data /mnt/external

ノートブックに外付けドライブが取り付けられている場合。それ以外の場合は、次のようにネットワーク経由でこれを行う必要があります。

rsync -av /backups/data user@external:/backups/data

ノートブックから90日以上経過したアーカイブを消去するには、次の手順を実行します。

find /path/to/files -type f -mtime +90 -delete

今回もこの内容をcrontabに入れてください。

rsyncを使用した増分バックアップ

増分バックアップにはrsyncのみを使用できます。私は特にタイムスタンプ付きのスナップショットとコマンドだけのハードリンクを使用するのが好きです。以下は、私が一般的に使用するものと同様の例です。

rsync --verbose --progress --stats --human-readable --archive --link-dest=/backups/data/`date --iso-8601 -d "one day ago"` /data/ /backups/data/`date --iso-8601`/

--link-destデフォルトでは、変更されていないファイルの前日のスナップショット(スナップショットから提供)へのハードリンクを作成します。異常に実行している場合は、次のように最新のスナップショットを指すシンボリックリンクを使用し、バックアップ後にシンボリックリンクを更新できます。

rsync --verbose --progress --stats --human-readable --archive --link-dest=/backups/data/last /data/ /backups/data/`date --iso-8601`/ && rm -rvf /backups/data/last && ln -vs /backups/data/`date --iso-8601`/ /backups/data/last

最も重要なのは、外付けドライブとの同期を構成し、古いスナップショットを削除する必要があることです。一般に、これは上記の最初の解決策と同じアプローチです。ただし、マシン間でスナップショットを再同期するときは、-Hハードリンクを保存するオプションを使用する必要があります。

一般化する

使用したソリューションと比較して、tar2番目のソリューションは管理が簡単で、すべてのファイルを常に使用できると思います。一方、アーカイブを使用すると圧縮の利点があり、少数のinodeを使用し、サーバー以外のシステムには他の利点があります。

繰り返しますが、可能であれば、これらすべてをcrontabで実行して覚えておく必要はありません。ノートブックを常に開いたままにしていない場合は、1日に数回頻繁に使用する時間を選択して、少なくともいくつかのクローン作業を開始してください。より良い方法は、次のようなものを使用することです。ナクロン

1日に数回増分したい場合は、バックアップスクリプトを手動で実行し、ファイル名/ディレクトリの日付を絞り込むこともできます。明らかに、これらのソリューションをユースケースに合わせるために実験する必要があります。

修正する:私が使用したサンプルスクリプトを含むリポジトリ:https://github.com/langner/backup.sh/blob/master/backup.sh

おすすめ記事