ブロックデバイスを同期させるためにrsyncに似たものはありますか?

ブロックデバイスを同期させるためにrsyncに似たものはありますか?

複数の32Gbペンドライブを複製し、ddを使用してLinuxシステムをインストールしました。後でパーティションを縮小し(「マスター」で)、いくつかの変更を適用しました。 ddを使用した遅い完全な再複製を避けるために、変更されたブロックのみを送信するツールはありますか?

考えてみましたrsyncが、ファイルだけで動作するようです。

答え1

一部のrsyncバージョンにはこの機能があります(ディストリビューションによって異なります)。 Distroには通常、rsync用の2つのパッチがあります。 1つはブロックデバイスから読み取るためのもの(フラグを提供--copy-devices)、もう1つはブロックデバイスに書き込むためのものです(フラグを提供する--write-devices)。ただし、この方法でも rsync を使用するには、いくつかの追加フラグと注意事項が必要です。

コマンドを見て分析しましょう。

rsync -I --copy-devices --write-devices --no-whole-file --inplace \
  "$(readlink -f "/dev/vg_src/lv_src")" "$(readlink -f "/dev/vg_dst/lv_dst")"

これは-I、rsyncがブロックデバイスの内容ではなく、ブロックデバイスファイル(デバイスを表すファイルシステムエントリ)のタイムスタンプとサイズを確認して同期をスキップできるためです。このフラグは、rsync がブロックデバイスの内容を評価するよう強制します。

--copy-devicesファイルではなくソースブロックデバイスの内容と同期するようにrsyncに指示します/dev

--write-devicesファイルを置き換えるのではなく、ターゲットブロックデバイスの内容を同期するようにrsyncに指示します/dev

--no-whole-file変更されたブロックのみを送信するようにrsyncに指示します。必要に応じてブロックサイズを制御できます--block-size

--inplace一時ファイルを作成して名前を変更する代わりに、ターゲットブロックデバイスを更新するようにrsyncに指示します。

これら$(readlink ...)の呼び出しは、rsyncが通常パス​​を調べ、そのパスがシンボリックリンクであることを確認し、それをブロックデバイスとして認識しないために行われます。したがって、readlinkシンボリックリンクは逆参照されます。

答え2

現在、次rsyncのレプリケーションデバイスがサポートされています。

rsync --copy-devices --write-devices <FROM> <TO>

実際のデバイスノードが見つかった場合にのみデバイスに書き込みます。したがって、/dev/mapper/<VG>-<LV>シンボリックリンクはソースデバイスの内容を含むファイルにのみ置き換え(試行)されるため、ターゲットとして使用しないでください。

[オプションの1つが--*link*これらのシンボリックリンクに従うように指示できますが、私はただ/dev/dm-<NN>。 ]

答え3

説明によると:BSCPSSH接続を介して単一のファイルまたはブロックデバイスをコピーし、変更された部分のみを転送します。

答え4

同様の選択肢はディスク同期ブロック重複排除(およびオプションのバックアップ圧縮)を実行するgoコードインがssh転送として使用されます。安定したソースイメージ(マックルツリーとハッシュのため)が必要です。これは通常スナップショットを使用して保証されます。

基本的な使い方はとても簡単です

diskrsync --verbose --no-compress /dev/vg0/lv_snap ruser@otherhost:/dev/sdd7

diskrsync別途設置せずにすぐに使用が可能で、双方の家に置いておくだけで使用が可能です。

./diskrsync …

圧縮は、ターゲットに圧縮されたバックアップを維持するか、スープローカルデバイスに抽出します。

関連情報