日付別の部分バックアップをサポートするバックアップツールはありますか?つまり、私のラップトップのようないくつかの小さなドライブは、外部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
ハードリンクを保存するオプションを使用する必要があります。
一般化する
使用したソリューションと比較して、tar
2番目のソリューションは管理が簡単で、すべてのファイルを常に使用できると思います。一方、アーカイブを使用すると圧縮の利点があり、少数のinodeを使用し、サーバー以外のシステムには他の利点があります。
繰り返しますが、可能であれば、これらすべてをcrontabで実行して覚えておく必要はありません。ノートブックを常に開いたままにしていない場合は、1日に数回頻繁に使用する時間を選択して、少なくともいくつかのクローン作業を開始してください。より良い方法は、次のようなものを使用することです。ナクロン。
1日に数回増分したい場合は、バックアップスクリプトを手動で実行し、ファイル名/ディレクトリの日付を絞り込むこともできます。明らかに、これらのソリューションをユースケースに合わせるために実験する必要があります。
修正する:私が使用したサンプルスクリプトを含むリポジトリ:https://github.com/langner/backup.sh/blob/master/backup.sh