多数の小さなファイルのバックアップ

遅かれ早かれ、作業ファイルのバックアップのセットアップは、自尊心のある現代のITスペシャリストによって困惑します。 プログラマーによる一連のタイプミス/エラーの後、私もこの時間を見つけました。

Webアプリケーションの仕様は、作業ディレクトリが約90万個の小さなファイル(写真、プレビューなど)を含むハードドライブで50GB以上を占めるようになっています。 そのため、tarとアナログを使用して問題を解決する額は機能しませんでした。 はい。保存されたデータには多少のばらつきがあります。完全バックアップの場合、実装には基本的に同じデータをわずかな変更で保存するために高いコストが必要でした。 さらに、鉄のクラッシュの結果として重要な情報が失われるリスクを減らすために、リモートバックアップサーバー上でコピーを複製することをお勧めします。 検索結果を綿密に分析し、明らかに私にとって不適切な方法を拒否した後、熱心な自己記述シェル自転車に関するコメントで最も頻繁に課されたいくつかのオプションに立ち寄りました。





rdiff-backup


rdiff-backupは、外観がより適切で便利なように見えました。 Pythonで書かれており、データを増分的に保存するため、いつでも(画像の保存時間を考慮して、予見可能な過去の)ファイルまたはディレクトリのステータスを取得できます。 コンソールからの柔軟な制御により、アクションの完全な自由が得られ、状況を完全に制御できます。 バックアップの自動作成には、スケジューラにいくつかのコマンドを追加する必要があります(2つ目は、古い変更のために値を持たない古いイメージをクリーンアップすることです)。

しかし、テストの結果、このユーティリティは非常に貪欲であり、私のタスクに対処することに非常に消極的です。 実際には、毎日少量のデータ(300MB)が変更されますが、その変更は約3万のファイルに影響します。 明らかに、プログラムの時間の大部分は、変更されたファイルの識別に費やされています。 観察の1時間後、iowaitはスクリプトの次の起動時に20%に増加し、別のソフトウェアを試して、それらを互いに比較することにしました。



rsnapshot


Perlで書かれたrsnapshotは、rsyncに基づいています。 プログラムの作業ディレクトリ(バックアップを追加する場所に名前を付けましょう)に、インデックスで複数のフォルダーが作成されます。これは、プログラムが構成で指定された値まで起動するたびに増加します。 その後、古いコピーが削除されます。 作成されたフォルダのいずれかにアクセスすると、内部でバックアップデータの完全なコピーを見つけることができます。 これは、フォルダーの合計サイズによって示されます(たとえば、標準のMidnight Commanderツールを使用して表示した場合)-すべてのフォルダーの合計に等しくなります。 これは実際にはそうではありません。 プログラムは、作業ディレクトリ内の同じデータ間にハードリンクを作成します。 したがって、最新の実際のコピーは「最も重い」コピーであり、他のすべてのサイズは変更されたデータの違いです。



テスト中


どちらのオプションもストレージにほぼ同じサイズを使用するため、バックアップタスクの完了速度を確認するときが来ました。



テストでは、ネストの度合いが異なる593のサブディレクトリと230911のファイルを含む11 GBのランダムプロジェクトフォルダーが取得されました。 上記のように、ファイルサイズは4〜800 KBの範囲で変動します。これはグラフィック素材です。 両方のユーティリティは一度に1つずつテストされ、外部要因はほぼ完全になくなりました(他のユーザー、ワークロード、または重いプロセスはありません)。 timeユーティリティを使用して、各テストタスクの実行時間を計算し、比較のために、cpツールを使用してディレクトリ全体をコピーしました。



最初のバックアップ-バックアップ場所へのフルコピー11090MB

本当の ユーザー sys
cp 6分30秒885 0分1.068秒 0m24.554s
rsnapshot 7分53.879秒 1分57秒299 1分22秒441
rdiff-backup 10分50秒314 3分26.073秒 1分0.928秒




再起動(フォルダーに変更なし)

本当の ユーザー sys
rsnapshot 0分10秒129秒 0分4.936秒 0分6.708秒
rdiff-backup 1分3.969秒 1分0.616秒 0分2.048秒




ディレクトリ内で、1つのランダムなフォルダーが複製されます(合計サイズは13267MBに増加します)

本当の ユーザー sys
rsnapshot 0分31秒175 0分22秒001 0m17.365s
rdiff-backup 27分53分517秒 1分58.819秒 0分19秒005




ディレクトリサイズを増やした後の再起動(最後の実行以降の変更なし)

本当の ユーザー sys
rsnapshot 0分11.477秒 0分5.748秒 0分7.368秒
rdiff-backup 1分16秒366 1分13.713秒 0分1.912秒




複製されたフォルダーを削除し、ディレクトリーのサイズを元のサイズに縮小します

本当の ユーザー sys
rsnapshot 0m13.885s 0分6.3秒 0分9.077秒
rdiff-backup 52分55秒794 2分1.560秒 0分21.941秒




変更なしでテストの再起動

本当の ユーザー sys
rsnapshot 0分11秒250 0分5.132秒 0分7.068秒
rdiff-backup 1分2.380秒 1分0.088秒 0分1.792秒




まとめ


比較テストの表からわかるように、rdiff-backupは、多数の小さなファイルの変更を消化するのが難しいため、サーバーのほとんどの時間をファイルシステムでピッキングしないように、rsnapshotを使用する方が費用対効果が高くなります。

おそらく、誰かがテスト結果を見て、この記事で説明されている最適なファイルバックアップのケースを見つけるのに費やした時間を節約するのに役立つでしょう。



All Articles