Linux でブロックデバイスのスナップショットを作成するための blksnap メカニズムの提案

バックアップおよび災害復旧用のソフトウェアを製造する Veeam 社は、ブロック デバイスのスナップショットを作成し、ブロック デバイスの変更を追跡するメカニズムを実装した blksnap モジュールを Linux カーネルに組み込むことを提案しました。 スナップショットを操作するために、blksnap コマンド ライン ユーティリティと blksnap.so ライブラリが用意されており、ユーザー空間からの ioctl 呼び出しを通じてカーネル モジュールと対話できるようになります。

モジュールを作成する目的は、作業を停止することなくドライブと仮想ディスクのバックアップを整理することです。このモジュールを使用すると、ブロック デバイス全体の現在の状態をスナップショットでキャプチャし、進行中の変更に依存しないバックアップ用の分離されたスライスを提供できます。 。 blksnap の重要な機能は、複数のブロック デバイスのスナップショットを同時に作成できる機能です。これにより、ブロック デバイス レベルでデータの整合性が保証されるだけでなく、バ​​ックアップ内のさまざまなブロック デバイスの状態の一貫性も実現できます。

ブロック デバイス サブシステム (bdev) への変更を追跡するために、I/O リクエストをインターセプトできるフィルターをアタッチする機能が追加されました。 blksnap は、書き込みリクエストをインターセプトし、古い値を読み取り、それをスナップショットの状態を決定する別の変更リストに保存するフィルターを実装します。 このアプローチでは、ブロック デバイスを操作するロジックは変更されず、スナップショットに関係なく、元のブロック デバイスへの記録がそのまま実行されるため、データ破損の可能性が排除され、予測できない重大なエラーが発生した場合でも問題が回避されます。 blksnap および変更に割り当てられたスペースのオーバーフロー。

このモジュールを使用すると、最後のスナップショットとその前のスナップショットの間でどのブロックが変更されたかを判断することもできるため、増分バックアップの実装に役立ちます。 変更を保存するには、スナップショットの状態に応じて、任意の範囲のセクターを任意のブロック デバイスに割り当てることができます。これにより、ブロック デバイス上の FS 内の個別のファイルに変更を保存できます。 変更を保存する領域のサイズは、スナップショットの作成後であっても、いつでも増やすことができます。

Blksnap は、Veeam Agent for Linux 製品の一部である veeamsnap モジュールのコードに基づいていますが、Linux カーネルの主要部分での配信の詳細に合わせて再設計されています。 blksnap と veeamsnap の概念的な違いは、I/O をインターセプトする別個の bdevfilter コンポーネントの代わりに、ブロック デバイスに接続されたフィルター システムを使用することです。

出所: オープンネット.ru

コメントを追加します