LANを介してrawディスクイメージを移行する


8

これが私の状況です:

  • 同じデータセンター内にある2つの専用サーバーと、それらの間のギガビットイーサネット。
  • 両方の専用サーバーが、Debian Squeezeをベースにしたレスキュー環境で起動し、追加のツールとユーティリティが追加されました。ソフトウェアのダウンロード、パッケージのインストール、および/または必要に応じたコンパイルのための十分なtmpスペース(両方のボックスで32GBのRAM)。
  • 両方の専用サーバーには、 3TBの使用可能なスペースがあります。
  • 「ソース」サーバーには、Adaptec 4ポートコントローラを備えたハードウェアRAID-10に1.5TBのディスクが4台あります。
  • 「宛先」サーバーには、Adaptec 2ポートコントローラーを備えたハードウェアRAID-1に2 x 3TBのディスクがあります-他と同じ世代ですが、ポート数が異なります。
  • 上の使用可能なブロックの数は/dev/sda10 MB未満しか異なりませんが、宛先サーバーのアレイは、何らかの理由で数メガ小さくなっています。
  • 両方のRAIDアレイは、すべての構成ディスクのディスク表面全体を使用して1つの単一のRAIDボリュームを作成するように構成されています。
  • オペレーティングシステムはMBRモードで起動します。UEFIブートは使用されません。

私がやりたいこと:

  • ブロックレイヤーで、OSイメージ全体(GPTパーティションテーブルのGRUB2ブートローダー、/ bootパーティション、および/パーティションのみで構成される)を「ソース」サーバーから「宛先」サーバーにコピーします。
  • 可能であれば、コピーは「ライブ」で行われる必要があります。これは、コピーとしてディスクイメージをハードディスクに解凍しない限り、宛先側にディスクイメージの適切なファイルを保存するための十分なスペースがないことを意味します行われています。サーバー間のギガビットイーサネット接続は十分信頼できるので、これで十分です。もちろんfsck、転送の前後でファイルシステムが正常であることを確認するために、両端(ソースと宛先)で実行します。
  • 可能であれば、ネットワークを介してブロックを転送しないでください。ブロックは、各パーティションの構成ファイルシステムでは使用されません(すべてのパーティションはext4としてフォーマットされます)。これは、「ソース」ディスクの50%以上が/パーティションの空き領域であるためです。
  • /パーティションのサイズを調整して、コピー時に、コピー先ディスクのわずかに小さいサイズに収まるようにサイズ変更します。
  • コピーが成功したら、各ボリュームをマウントし、静的IPへの参照を修正して、新しいサーバーのIPを反映させます。(これ以上の助けなしでこれをうまく行うことができます)

私の質問:

  • 私は、必要がある最初の大きさの間(バイト単位)の違いを計算/dev/sda各サーバー上に、次に使用e2resize非破壊的にサイズ削減/のパーティションをソース側に、それはデスティネーション側のスペースに収まるように?
  • 私は実行する必要がありdd、生のブロックデバイスに/dev/sda宛先(上にソースからssh)、又は Iで先に等価パーティションレイアウトを作成する必要があり、実行dd毎に分割?パーティションを一度に処理すると、ブートローダーの問題が残りますが、パーティションをdd一度に処理しない場合は、宛先が保持できる最大数のバイトを書き込んだら、データの転送を停止する必要があることに注意してください。(うまくいけば/、ソースのパーティションレイアウト内の他のすべてのパーティションの論理的に「右側」にある最後のブロックのパーティションの最後を「閉じます」。

その他いくつか。詳細:

  • ソースボックスのホストOSは、複数のOpenVZゲストを実行しているUbuntu Server 12.04です。
  • 両方のボックスが起動してレスキュー状態になるため、実行中のオペレーティングシステムによる基本データへの変更を予期せずに、直接ディスクアクセスが可能になります。

使用済みブロックをデバイスからコピーする必要がありますか、それともOSファイルシステムのみをコピーする必要がありますか?
アンドリュー

回答:


6

これは厄介ですが、実行可能です。

私はここで推測/であり/dev/sda3、それが/bootオンになっています/dev/sda1

  1. 古いサーバーのファイルシステムを最小サイズに縮小します。

    oldserver # resize2fs -M /dev/sda3
    
  2. 同じサーバーのディスクを、同じサイズの/bootswapspaceと新しい/パーティション(およびその他必要なもの)でパーティション分割します。

    newserver # parted /dev/sda
    
  3. //bootファイルシステムをコピーします。

    oldserver # dd if=/dev/sda1 | ssh root@newserver "dd of=/dev/sda1"
    oldserver # dd if=/dev/sda3 | ssh root@newserver "dd of=/dev/sda3"
    

    新しいサーバーのパーティションは古いサーバーのパーティションよりも少し小さいため、No space left on deviceこの最後に偽のメッセージが表示されます。ただし、ステップ1でファイルシステムを縮小したので、これは問題ではありません。

  4. 新しいサーバーのファイルシステムのサイズをパーティションのサイズに変更します。

    newserver # resize2fs /dev/sda3
    
  5. 新しいディスクにGRUBをインストールします。

    newserver # mount /dev/sda3 /mnt
    newserver # mount /dev/sda1 /mnt/boot
    newserver # mount -o bind /dev /mnt/dev
    newserver # mount -o proc proc /mnt/proc
    newserver # chroot /mnt /bin/bash
    
    newserver(chroot) # grub-install /dev/sda
    newserver(chroot) # exit
    
  6. 残りのフィックスアップ(IPアドレスなど)を完了します。

パーティションの空き領域をコピーしないようにする方法はおそらく見つかるかもしれませんが、すべてをコピーするだけでは調査に時間がかかるでしょう...


驚くばかり!これらの手順は他のすべての基準を満たしているため、パーティションの空き領域をコピーしても問題ありません。けれども、単にファイルシステムのサイズ変更はないと、パーティション自体上のoldserverすべての空き領域をコピーする必要がなくなりましたか?/bootとても小さいので気にしませんが/、少なくともそれはできましたね。パーティションの最後のセクターをresize2fs、FSセクターの最後に設定するセクターと同じに設定するだけです。さて、セクター、ブロック...おそらくブロックします。しかし、これをありがとう!これは素晴らしい!
allquixotic

はい、パーティションのサイズも削減した場合は、大量のコピーを回避できます。それはあなたに数時間を節約するかもしれません...私の数学が少しずれていた場合に備えて、私は多少の余裕を残します。
マイケルハンプトン

これにより、/dev/sda3約1.3 TB にサイズ変更され、約2.9 TBを保持すると予想される宛先のパーティションにコピーされるため、「デバイスに空き容量がありません」という誤った/怖いものも排除されます。
allquixotic

しばらくかかります。100 Mbit / sの割り当てを持つギガビットポートを持っていることに気づきました。くだらない。
allquixotic

5

私がいただきたいmkfs、その後、新しいサーバー上で新鮮なファイルシステムをrsync古いサーバーからそれらを。これは再起動可能で一貫性があり、各ファイルは個別に簡単に検証できます。ファイルシステムの未使用のセクション(フォレンジックコピーではない)を破棄する場合、この方法を使用しない理由はありません。GRUBを再実行する必要がありますが、それは難しいことではありません。

ファイルシステムに対応している未加工のコピーについて説明すると少し時間がかかるので、なぜrsyncソリューションが機能しないのかについてコメントしない限り、入力する手間は省きます。


partimageはファイルシステムを認識する生のコピーを行うことができると思いますが、それはサポートしていませんext4。したがって、オプションrsyncとして、すべての随意アクセス制御(la chmod)を保持し、シンボリックリンクとデバイスファイルをきれいにコピーできる限り、オプションとして見栄えが良くなります...
allquixotic

私はジェフの答えを2番目にします。パーティションのレイアウトはsfdisk -d / dev / sda |で転送できます。ssh宛先 "sfdisk / dev / sdb"。ファイルシステムを作成し、「rsync -a -e "ssh -c arcfour" / mnt / root @ destination:/ mnt /」を使用して転送します。Aftewardsは、Michael Hampton回答のステップ5に従って、宛先を起動可能にします。
Tim Haegele 2013

1

本当にブロックデバイスレベルでデータを転送したい場合は、最小限のダウンタイムを伴うサーバーの移行に使用していた非常に便利な方法が1つ考えられます。

重要なのは、データパーティションがミラーの唯一のアクティブな半分であるソースサーバー上に機能低下したミラーを作成し、AOEを介して2番目のサーバーから宛先パーティションをエクスポートできることです(両方のサーバーが同じブロードキャストドメインにあると思います)。ソースサーバーで、ネットワークブロックデバイスを機能低下したミラーに接続して、再構築を開始します。再構築が完了するまで待ち、ミラーを停止し、AOEでエクスポートされたデバイスを削除すれば問題ありません。

もう少し詳しく説明します(私は簡潔に保つようにします)。

コンポーネント:

  • mdadmそのとビルドモード(メタデータなしアドホックミラー)。
  • vblade ブロックデバイスをAOEネットワークデバイスとしてエクスポートします。
  • aoe-tools AOEネットワークブロックデバイスをインポートします。

移行先サーバーにパーティションテーブルを作成し、移行先パーティションに合うように移行元パーティションを圧縮する必要があります。新しいMBRにGRUBを簡単にインストールできます。新しく作成されたパーティションテーブル上でパーティションのみを同期すると、エラーが発生しにくくなります。

受信側では、vbladeツールを使用してパーティションをエクスポートする必要があります。ソースサーバーでは、インストール後にエクスポートされたデバイスを確認できますaoe-tools(実行aoe-discover/dev/ether/てデバイスを確認します)。

次に、ソースドライブでソースサーバー上にraid1デバイスをビルドする必要があります。

mdadm --build /dev/md0 -n2 -l1 --force /dev/sda

この後、新しく構築されたミラーを調べることができます:

mdadm --detail /dev/md0
cat /proc/mdstat

この時点で、エクスポートされた宛先パーティションをこのミラーに安全に接続できます。

mdadm /dev/md0 --add /dev/ether/eX.Y

次に、同期の進行状況を監視します。

watch -n5 cat /proc/mdstat

同期が完了したら、ミラーを停止しmdadm --stop /dev/md0ます。ソースサーバーで、vbladeターゲットサーバーでプロセスを終了し、2番目のサーバーにGRUBをインストールし、IPアドレスを変更します。

実際、このトリックを使用すると、同期されたボックスを再起動するだけのダウンタイムで、サーバーをほぼライブのボックス間で移動できます。


パフォーマンス上の理由から、リンクのMTUを増やす(または、可能であればジャンボフレームを有効にして別のVLANをセットアップする)ことをお勧めします。

AOEの代わりにnbd-server/ nbd-client(またはおおまかにしたい場合はiSCSI)のようなものを使用することもできますが、AOE(vblade+ aoe-tools)は非常にシンプルなインターフェースと優れたパフォーマンス(TCP / IPオーバーヘッドなし)を備えています。


特にファイルシステムに数百万(文字通り)比較的小さなファイルがある場合は、ブロックデバイスレベルでの同期が、rsyncでファイルをファイルに移動するよりも実際に高速になる場合があることも付け加えておきます。
artyom 2013

mdadm?ハードウェアRAIDを使用しています。そして、私はAOEが何であるかを知りませんし、iSCSIを使用したこともありません。サーバーが同じブロードキャストドメインではなく、同じデータセンターにあると思います。サーバー間には少なくとも1つまたは2つのスイッチがあります。
allquixotic

これは素晴らしいアイデアだと思います!しかし、それはディスクの異なるサイズをどのように処理しますか?
Tim Haegele、2013

それでも、@ allquixoticを使用して、AOEをnbd(ネットワークブロックデバイス、nbd-serverおよびnbd-clientパッケージで提供)に置き換える次のスキームを試すことができます。mdadmは2つのブロックデバイスを同期するためだけに使用され、メタデータはbuildモードで書き込まれないため、任意のブロックデバイスの上で使用できます(最初にマウント解除する必要があります)。重要なのは、ハードウェアRAIDが存在する場合でも、通常は機能低下したmdadm raid1で新しいシステムをセットアップすることです。これにより、パーティションをアンマウントすることなく、説明した手法を適用できるため、移行のダウンタイムを1回の再起動に短縮できます。
artyom 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.