2009/06/13

リアルLinuxサーバをVMware Serverへハンドコンバート

さて、Mac miniの環境構築がだいたいおわったので、ここからが本番ということでリアルLinuxサーバをVMware ESXiベースのLinuxサーバに移行します。

とはいえ、移行元マシンと移行先マシンが同じハードウェアなので、簡単にはいきません。まずは、リアルLinuxサーバをMac mini上に入れたVMware Serverに移し替えて、サーバハードウェアをフリーにした状態でESXi環境を構築してVMware ServerからESXiに再コンバートするという2回コンバートが必要そうです。

最初のもくろみだと、VMware vCenter Converterを使えば起動中のマシン(Powered On Machine)からVMware Workstation/Serverベースの仮想マシンにコンバートできるので、この機能を使えば簡単にいけるじゃないか、と思ってました。ただ、実際にやってみようとすると起動中のマシンからコンバートする場合、WindowsだとVMware Workstation/Serverか、VMware Infrastructure(いわゆるESX)のどちらにでもコンバート可能なのに対し、Linuxをコンバートする場合はVMware Infrastructureベースの仮想マシンにしかコンバートできないということが判明。こまりました。

とはいえ、相手はLinuxなので、実はファイルシステムレベルでまるごとコピーして、ブートローダ(GRUB)の設定だけなんとかすればいけそうだよなぁという気がしませんか? そんな気がします。ということでやってみました。

まず、VMware ServerをMac mini(のWindows Vista)に導入して、リアルLinuxと同じOSをVMware Virtual Appliance Marketplaceからとってきます。うちの場合、Debianのsqueeze/sidなので、一番近そうなlennyにしておくかーということでLINHOSTからDebian 5.0 Serverをダウンロードしておきます。

とりあえずVMware Serverでlennyが起動することを確認できたら、仮想マシンにHDDを追加します。とりあえずうちのリアルサーバは30Gぐらい使っているので、40Gのディスクを追加しました(VMware ConverterでESXiへ再コンバートするときに広げるので、今はファイル全部コピーできる容量さえあればOK)。

さて、ここからが本番です。

リアルマシンのファイルシステムをNFSでまるごとエクスポートします。うちのLinuxはこういうことになることを予見して/と/bootを分けていないので、こういうときはらくですね。/と/bootを分けている人はどうすればいいかって? それはしりません…。それぞれ作業することになると思います。分けていたのを一つにしたいなら、コピー元は2つマウントしてコピー先は1パーティションにすればよさそうです(やってないのでしりません)。

で、具体的にはどうやってやるかというと、追加したHDDをfdiskでパーティション作成して(swap忘れないように!)、mkfs.ext3とかでフォーマットします。あとは、旧マシンのNFS設定を編集し、 /をエクスポートするように(オプションはrw,sync,no_root_squash,no_subtree_checkあたり)変更します。あとは、マウントするだけ。古いデータを/mnt/old、新しいデータを/mnt/newにマウントしてパーミッション等の情報付きでコピーするには、以下のようにします。

# mount -t nfs 192.168.xx.xx:/ /mnt/old
# mount -t ext /dev/sdb1 /mnt/new
# cp -a /mnt/old/* /mnt/new/

これでまるごとコピーが完了します。このとき、ApacheとかMySQLとかその手のサービスを動かしているなら止めたほうがいいでしょう。私の場合は稼働中のサーバを止められない&HDD取り外してMac miniに取り付けられないのでライブコピーみたいな感じにしましたが、稼働中のサーバをはずして移行先マシンでマウントしたほうがファイルの整合性という点では安全ですね。

さて、これでまるごとコピーはおわったわけですが、ここからが問題です。これだけではブートできないただのデータディスクのままなので、GRUBのブートローダを書き込む必要があります。grub-installコマンドを使ってやればOKです。VMware Appliance Marketplaceから持ってきたlennyはGRUBが1.9x(GRUB2)ではなく0.9xなので、もし移行元システムがGRUB 1.9x(GRUB2)を使っている場合はlenny側をapt-get install grub2する必要があります。うちはGRUB2だったので、これでハマりました。

ただ、この手順で行くとHDDを追加しているのでdevice.mapが違うぞとか言われると思います。私の場合は、/mnt/new/boot/grub/device.mapを編集して (hd1) /dev/sdb1 と (fd0) /dev/fd0 を追加しました。

あとはgrub-installを実行するだけ! grub-install --root-directory=/mnt/new /dev/sdb とかやってインストールしました(たしか)。これで、新ディスクからブートできるはずなので、ブートしてみましょう。もし、GRUB2が error: unknown command `initrd' とか言って起動してくれなかった場合は、insmod linuxの件に引っ掛かっているので、リンク先を参考にsearch --fs-uuidなんたらを削除してinsmod linuxすればきっと起動します。

これでリアルマシンベースからVMwareベースにLinuxをコンバートできました。あとはもう楽勝です。ESXiのddイメージを書き込んだUSBメモリをサーバに差し込んで起動し、問題なく起動してvSphere Clientでつなげられることを確認したら、VMware Converterで出来上がったLinux仮想マシンを送り込んであげて作業完了です。なかなか長かった。

ということで、環境移行した話はこれでおしまいです。しかしまだBootCampのVista x64環境にはちょっと問題があって、プリンタスプーラが強制終了する問題があるのでした(原因はBootCampというより、VMware FusionのVMware Toolsがインストールするサービスに問題があるっぽい)。これは明日書こう。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac