私の意図は、サーバー上の特定のハードドライブの「スナップショット」を毎日作成することです。今日、3日前、5日前、10日前(など)のスナップショットが保持され、周期的に置き換えられていることを自動的に確認するにはどうすればよいですか?重複というツールを見つけましたが、それを使用してこれを実現する方法は見つかりませんでした。 bashシェルスクリプトを使用する必要がありますか?インスピレーションを得ることができる例はありますか?
システムはDebianを実行しています。
重複によりスナップショットが作成されますが、直接読み取ることができる形式ではなく、圧縮されたアーカイブの形式で作成されます。
スナップショットを作成する方法はいくつかあります。 [〜#〜] zfs [〜#〜] や Btrfs などの一部の高度なファイルシステムには、-などの一部のディスクレイヤーと同様に、これらが組み込み機能として含まれています。 [〜#〜] lvm [〜#〜] 。
一般的なファイルシステムでは、基本的な手法は、スナップショットを作成するディレクトリツリーを複製することですが、ファイルをコピーする代わりに、各ファイルに ハードリンク を作成します。ファイルが削除されて新しいバージョンに置き換えられると、スナップショットは古いバージョンを保持します。一部のアプリケーションはその場でファイルを変更することに注意してください。同じファイルであるため、スナップショットのバージョンも変更されます。これは、ハードリンクベースのソリューションに固有の問題です。
ストレートハードリンクの変形は、ファイルをバックアップするときに常にコピーを作成することですが、最後のバックアップ以降にファイルが変更されていない場合は、新しいコピーを作成するのではなく、以前のバックアップへのハードリンクを作成します。以前のアプローチとは異なり、これは古いバックアップのファイルを変更して履歴を書き換えるリスクがないため、バックアップに適しています。
Rsync--link-dest
オプションを使用し、 Rsnapshot は、このようなスナップショットを作成するための最も一般的なツールです。 Rsnapshotは高レベルのツールです。内部でrsyncを使用しますが、適切な引数を使用して呼び出したり、古いバックアップのカリングを管理したりします。
Rsnapshotでは、いくつかの間隔を定義することにより、古いバックアップをカリングする方法を指定します。最も低い間隔は、バックアップが取られる頻度であり、あなたの場合はまさにその日です。より長い間隔は、保持されるバックアップを定義します。 retain INTERVALN
のディレクティブrsnapshot.conf
ごとに、rsnapshot INTERVAL
を実行すると、rsnapshotは次の2つのことを行います。
N
-1スナップショットのみがINTERVAL
に残るように、バックアップディレクトリをカリングします。たとえば、毎日のバックアップを作成し、3、5、および10日前のバックアップを保持し、/etc/rsnapshot.conf
に次のretain
行を含めます。
retain daily 2
retain day3 2
retain day5 3
rsnapshot daily
を毎日のcronジョブとして実行します。そのジョブの数分前に、3日ごとにrsnapshot day3
およびrsnapshot day5
を実行します。あなたはそれをこのように概算することができます:
04 04 5,10,15,20,25,30 * * rsnapshot day5
07 04 3,6,9,12,15,18,21,24,27,30 * * rsnapshot day3
10 04 * * * rsnapshot daily
(たとえば、2日目に消去しているため、正確に3日前のバックアップを作成することはできません。代わりに、3で1日1回のバックアップを保持します。)より古典的な保持スキームは、rsnapshotに示すように、毎週および毎月の保持です。ドキュメンテーション。
私はバックアップを見つけたので、最初のバックアップの後は高速です。増分バックアップと完全バックアップは、異なるスケジュールで保持できます。各ファイルバージョンのコピーが1つだけ保持されるため、スペース効率が非常に高くなります。復元は、個々のファイルを参照してダウンロードしたり、復元アーカイブを作成したりできるWebページから実行されます。書き込みアクセスを無効にしているので、アーカイブから復元するか、個々のファイルをコピーする必要があります。
同様のメカニズムを使用して履歴バックアップを保持する他のさまざまなバックアップシステムがあります。