orz記録

おうちとかいしゃのシステム技術のことを中心に書いていこうと思っています。

2011-02-06 21:48:37.0【P2V】ddによるP2Vのやり方(Linux限定)

だーいぶ前に、VMwareConverter使わなくても、VMwareのP2Vなんてできるよーんと書いた記憶があって、いつか紹介しますよーなんて書いていたのですが、忘れていました。

以下、手順。
準備物
・CentOSのCD2枚(KNOPPIXでもOKでしょう)。ここではCentOS3.9Serverを2枚用意しました。
・P2Vするマシン同士のネットワーク接続(なるべくなら直結に近いほうがよいです)
・移行元と移行先で通信するためのIP2つ

説明がややこしくなりそうなので、
P2Vされるマシンを移行元、P2Vで乗っけるマシンを移行先と呼ぶことにします。
移行元のIPは192.168.1.100、移行先のIPは192.168.1.200とします。
移行元、移行先ともに、ディスクは/dev/sdaとします。
HPのサーバとかだったら、/dev/cciss/c0d0とかに読み替えて下さい。

■移行先のマシンの操作
1. 移行先の仮想マシン作成
移行先の仮想マシンを作成します。
HDDは移行元の容量の同等以上のサイズを準備。

2. 移行先のマシンをCDからブート
CentOSを入れ、CDからブートします。
ブート画面で、linux rescue
と入力し、レスキューモードで起動します。
ファイルシステムをマウントする時は
Continueを選択します。
IPを192.168.1.200でつけます。

3.ncコマンドにてデータ受信準備完了。
プロンプトが出たら、以下のコマンドで、データ受信の準備が完了します。
# nc -l -p 9999 dd of=/dev/sda bs=128M

ncはlinuxでのnetcatコマンド。-lオプションでリッスン、-pオプションでポート番号を指定。
ddコマンドのbs=128Mは経験から何となくそのほうが良さそうだから。意味ないかもしれないけれど、デフォルトよりは転送は早いはず。

■移行元のマシンの操作
1. CentOSを入れ、CDからブートします。
ブート画面で、linux rescue
と入力し、レスキューモードで起動します。
ファイルシステムをマウントする時は、
readonlyを選択します(移行元マシンのファイルシステム保護のため)
IPを192.168.1.100とします。

2. データの転送
以下のコマンドで、データを丸ごとコピーします。
コピーの前に、Pingとかで疎通できることを確認しておきましょう。
# time dd if=/dev/sda bs=1M nc 192.168.1.200 9999 &
ハードディスクがガリガリ言い出したら、転送が始まっている証拠です。
すぐに終わっちゃったら、コマンドが間違ったりしてます。見直しましょう。

3. ファイル転送まで待つ
ファイル転送まで待ちます。転送時間は、ディスクの速度や、ネットワーク速度に依存します。
ddコマンドでデータ転送をしていると、終わるまでプロンプトが帰ってこないので、どのくらい進んでいるのか心配になってきます。
進捗状態を知りたい時は、以下のようにすると良いです。
ddを実行しているプロセスを探します。
# ps aux grep dd
プロセスを見つけたら、ddを一時的にスリープさせて進捗を見ます。
# kill -USR プロセスID;sleep 1
転送されたブロック数が表示されます。
今回の場合は、1Mで転送しているので、ブロック数×1Mで何MB転送済み可が分かります。
※たしか、ddコマンドって、進捗が見れるようなパワーアップした物があったような。まぁ、いいですけど。

ちなみに、timeコマンドをかましているのは転送が終わったときに、時間を測る手間が省けるからです。

4.ファイル転送の完了。
ファイルの転送が完了すると、timeコマンドの結果が表示されますので、記録しておくとよいでしょう。
あと、転送先のマシンの方も、プロンプトが返ってきます。
これで、転送元マシンの作業は終了です。CDを取り出して、リブートしましょう。

■移行先マシンの操作
5. もっかいレスキューモードで再起動
データ転送が終わったら、もう一回レスキューモードで再起動しましょう。
この段階では転送先マシンは起動しないので。
転送がされていることを確認したかったら、dfコマンドでも一回打って確認してもいいかもね。
さらに心配だったら、現在の状態をVMwareでスナップショット取っておいてもよいかもね。

レスキューモードで起動したら、ディスクをマウントするか聞かれるので、
continue
で/mnt/sysimageにマウントしましょう。最初の起動時はパーティションテーブルも定義していなかったから、
ワーニングの表示が出ますが、今回はマウントするように表示が出るはず。

6. ルートディレクトリ変更
別に必須じゃないですが、わかりやすく作業するために、ルートディレクトリをマウントポイントに変更しておきましょう。
# chroot /mnt/sysimage

7. ファイル編集、initrd再作成
/etc/modules.conf(kernel2.4の場合)、/etc/modprobe.conf(kernel2.6の場合)のファイルを編集します。
編集する場所は、alias scsi_hostadapterの行です。
# vi /etc/modules.conf
転送したLinuxOSがRedHat7,8,9系で古い場合は、以下のscsi_hostadapter行を以下のように編集。
alias scsi_hostadapter BusLogic
比較的新しいLinuxOSがRHEL4,5系の場合は、以下の用に編集。
alias scsi_hostadapter mptscsih
scsi_hostadapter行がない場合は、追記します。

あと、移行元のマシンがHPのサーバだったりした場合は、以下のファイルを修正しておきます。
/boot/grub/device.map
/etc/fstab
/etc/sysconfig/grub
cciss→sda

次に、initrdを再作成します。
# cd /boot
# mv initrd-2.4.xx-x.img /tmp/
# mkinitrd initrd-2.4.xx-x.img 2.4.xx-x
カーネルバージョンのところは、移行先のカーネルバージョンに合わせます。

8. CDを抜いて、通常の再起動とkudzuによるハードウェアの整理
CDを抜いて再起動します。
次はカーネルパニックにならずに、起動します。
kudzuをONにしておくと、ハードウェアの変更を検出してくれるので、表示される画面にしたがってハードウェアを変更していきます。

9. VMware-Toolsのインストール
忘れずにVMware-Toolsをインストールします。
OSがRedHat9とか、RHEL3だとインストールに失敗することがあります。
その時は、以下のファイルを編集して、再度やってみます。
vi /etc/sysconfig/i18n
ja_JP.eucJP→C
ja_JP.eucJP:ja_JP:ja→C

以上で移行作業は終わりです。
さて、ここまでで移行は完了するのですが、ddコマンドを使用すると全量コピーになってしまいます。つまり、使っていない部分も全部コピーするので、VMwareのシンプロビジョニングが効かないことになります。

が、実はシンプロビジョニングを活用するやり方もあります。
やり方は結構単純で、sfdiskでパーティションテーブルダンプして、dump/restoreコマンドを使用します。
今までのコマンドを再利用してやればよいだけです。ファイル分だけコピーされるので、よいかもしれませんねー。

では、またー。

Trackback

▼この記事のトラックバック用URL

Comments

お名前(必須)
メールアドレス
URL
コメント(必須)
※コメント以外の内容を次回も使用