複数の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
シンボリックリンクは逆参照されます。