VMware vSphereにおけるFreeBSDのP2V(ddを使う方法)


VMware vCenter Converterを利用すれば、物理サーバを仮想化するいわゆるP2Vは比較的簡単に行うことができますが、対応しているOSは限られています。具体的には次のようなOSです。

  • Windows XP Professional SP3 (32-bit and 64-bit)
  • Windows Server 2003 SP2, R2 (32-bit and 64-bit)
  • Windows Vista SP2 (32-bit and 64-bit)
  • Windows Server 2008 SP2 (32-bit and 64-bit)
  • Windows Server 2008 R2 (64-bit)
  • Windows 7 (32-bit and 64-bit)
  • Red Hat Enterprise Linux 2.x (32-bit and 64-bit)
  • Red Hat Enterprise Linux 3.x (32-bit and 64-bit)
  • Red Hat Enterprise Linux 4.x (32-bit and 64-bit)
  • Red Hat Enterprise Linux 5.x (32-bit and 64-bit)
  • SUSE Linux Enterprise Server 8.x (32-bit and 64-bit)
  • SUSE Linux Enterprise Server 9.x (32-bit and 64-bit)
  • SUSE Linux Enterprise Server 10.x (32-bit and 64-bit)
  • SUSE Linux Enterprise Server 11.x (32-bit and 64-bit)
  • Ubuntu 8.x (32-bit and 64-bit)
  • Ubuntu 9.x (32-bit and 64-bit)
  • Ubuntu 10.x (32-bit and 64-bit)

要するにWindowsとLinuxの一部以外無理ということですね。まあ上記以外にももちろんCentOSとかはOKのようですが。

そうは言ってもFreeBSDのサーバとかも入れたい場合があるのです。特にもう再構築するのが果てしなく面倒くさいくらい作りこんだサーバなどが典型例でしょうか。というわけで、FreeBSDのサーバをP2Vする方法をまとめてみましょう。今回はddを使う方法です。

手順概要

今回の作業手順の前提は次のようなものです。なお、最後の2項目であるディスク・パーティションサイズの変更やシンプロビジョニングへの対応に関しては、もう少し面倒な別の方法を後日紹介します

  • FreeBSDの物理サーバからvSphere上の仮想ゲストマシンにP2Vを行う
  • それぞれのマシンは直接通信できるネットワーク上にない(直接通信できる場合は、この手順より少し楽ができる)が、双方に対してsshでアクセスできる、物理サーバのディスクイメージを格納できる十分なディスクを持ったマシン(以後、仲介マシン)がある
  • 物理サーバには起動できるCD-ROMが付いている
  • ディスクやパーティションのサイズは変更しない
  • シックプロビジョニングになる(シンプロビジョニングにしても意味がない)

なお、仲介マシン上に置かれるディスクイメージはセキュリティ上重要な情報を含むため、容易に外からアクセスされるマシンや、持ち出されることのあるノートPCなどは適しません。ファイルを削除した後もデータは残るので、特に重要なデータの場合は、消去後に空き領域を/dev/randomで埋めるなど、データを慎重に消してください。仮想システム上に使い捨ての仲介マシンを構築するのが一番お勧めです。普段利用されているマシンを使う場合は、別途安全な場所に保管や、ランダム書き込み初期化、廃棄処分が可能な外付けUSBディスクなどを使うのも良い手でしょう。

そして、具体的な手順は以下のようになります。

  1. 物理サーバをLive CDで起動して、sshでのアクセスを可能とする
  2. 仲介マシンにsshでディスクイメージを転送する
  3. 仮想ゲストマシンもLive CDで起動して、sshでのアクセスを可能とする
  4. 仲介マシンから仮想ゲストマシンにsshでディスクイメージを書き込む
  5. 仮想ゲストマシンに対応する設定を修正する
  6. VMware Toolsをインストールする

では、段階を追って説明しましょう。

事前準備

移行前のマシンの/etc/fstabの情報は重要なので、メモしておきましょう。今回のマシンは比較的複雑なパーティション構成で、次のようになっています。

FreeBSD Live CD

この手順ではFreeBSD Live CDを利用します。FreeBSD 9.0から、インストールCDの最初の画面で「Live CD」という項目を選択できるようになりました。

boot

この画面でLive CDを選択すると、ホスト名未設定(Amnesiac)でログインプロンプトが出ます。

boot2

ここでrootでログインが出来ますが、パスワードは設定されていないので、いきなりrootシェルのプロンプトが出てきます。起動したマシンの全てのディスクに対して、全く何のチェックも受けない操作が可能ですので、もちろんシステムを壊すことも可能です。十分にお気をつけて作業してください。

Live CDをsshログイン可能に

この状態ではネットワークのアクセスが一切出来ません。コンソールから適切にIPアドレスを設定します。サーバ目的のネットワークでDHCPが使える環境は少ないでしょうから、静的に設定します。この例の「em0」はIntelのギガビットNICなので、異なる場合は適宜対応したNICに変えてください。なお、以後この物理マシンのプロンプトを便宜上「livecd(src)#」(rootユーザ)と表記します。

そして、書き込み不能な/etcをunionfsを使って書き込み可能とします。

rootのパスワードを設定し、/etc/sshd/sshd_configが書き込み可能となっているので、これを編集します(touchはおまじないです)。

そして、/etc/ssh/sshd_config内の

の行を

に書き換えてrootログインを許可します。あとは、sshdを起動するだけです。

仲介マシンからこのマシンにrootでログインできることを確認して下さい。なお、以後仲介マシンのプロンプトは「chuukai%」(一般ユーザ)とします。

イメージの取得

先ほどメモしておいた/etc/fstabの内容を見ると、元のディスクは/dev/da0にあるということがわかります(SCSIや一部RAIDは/dav/da0となる)。ATAやSATAのシステムでは/dev/ad0、一部のRAIDでは/dev/twed0等の別の名前になることがあります。

以後はこの例のデバイス名である/dev/da0を仮定します。一応、LiveCD上でもこれらのデバイスが存在することを確認します(da0s1cはfstabには存在しませんが、慣習的に「c」はスライス全体を表す特殊なデバイスですので問題ありません)。

仲介マシンから、ssh経由でこの/dev/da0のイメージを取得します。この例では、158999773184バイト(149GB弱)のイメージをgzipで圧縮して、11122秒(3時間弱)で取得しています。

これで、イメージの取得は完了です。

仮想マシンの作成

ここで、イメージ書き込み先の仮想マシンを作成します。元のマシンがFreeBSD amd64なので、FreeBSD 64-bitでvSphereから仮想マシンを作成します(なお、元のマシンがFreeBSD i386でも、FreeBSD 64-bitを選択するのが、ネットワークがe1000が標準になるなどの点で、個人的にはお勧めです。64ビット設定で32ビット版をインストールしても問題は生じません)。

メモリ量やコア数などは元の物理マシンに倣えばよいでしょう。ディスクサイズはイメージを書き込めるサイズで作成します(今回は149GB)。先述の通り、今回の方法だとシンプロビジョニングにしても意味は無いので、シックプロビジョニングにします。

CD-ROMは、先ほども使ったFreeBSDのインストールCDをクライアントデバイスで使うか、データストアにイメージファイルを転送してそのイメージを設定し、「ブート時に接続」を設定するかしてください。

これでシステムを起動し、再びLive CDモードでrootのシェルを出します。先ほどと同様の設定で、このLIve CDも仲介マシンからssh可能に設定してください。なお、FreeBSD 64bitの仮想マシンを通常設定で作成すると、NICはem0、ディスクは/dev/da0となります。以後、この仮想マシンのIPアドレスをM.N.O.P、プロンプトを「livecd(dst)#」(rootユーザ)と表記します。

一応、書き込み対象となるディスクイメージのデバイス名も確認して下さい。まだパーティションを切っていないので、/dev/da0のみが存在しています。

ディスクイメージの書き込み

では、これでディスクイメージの書き込み準備が出来ました。仲介マシンから、次のようにしてイメージを送り込みます。この転送には比較的時間がかかります。転送がなされていることは、vSphere Clientから仮想マシンのパフォーマンスモニタを見て、ネットワークの使用量やディスクの書き込み速度などから確認できるでしょう(計算すればおおまかな終了時間も予測できるはずです)。今回の例では、1時間強で149GB弱の書き込みが終了しました。

この状態で、既に書き込んだディスクのマウントは可能となっています。仮想マシン上で、パーティションに対応するデバイスが出現していることを確認しましょう。

これらのパーティションを、Live CDの/mnt以下に、先ほどメモしておいた/etc/fstabの結果を参照してマウントしましょう。もし仮にメモを忘れていても、/dev/da0s1aさえ/mntにマウントすれば、/mnt/etc/fstabとして参照できるはずです。仮にfstab内のデバイス名が/dev/da0*でなければ、それぞれ読み替えてください。

これを見て、残りのパーティションを/mnt以下にマウントしていきます。マウントが出来たことをdfで確認しましょう。

設定ファイルの調整

FreeBSDの場合はLinuxのinitrd的な仕組みはありませんので、この状態でおそらく起動はします。ただし、再起動後にきちんと動作するわけではありません。少なくとも以下のファイルは調整する必要があります。

/mnt/etc/fstab

ディスクのデバイス名が変化している場合は、/etc/fstabを修正する必要があります。たとえばATAやSATAのマシンであれば、/dev/ad0s1aなどとなっていたところを、/dev/da0s1aに直す必要があります。

/mnt/etc/rc.conf

/etc/rc.confは色々直す必要があるでしょう。元のNICがem以外だった場合はemに変更する必要がありますし、IPアドレスが変わるのであれば、そのあたりも変更の必要があるでしょう。その他にも色々変更の必要があるかも知れません。

/mnt/etc/hosts

/etc/hostsに色々設定していて、IPアドレスが変わった場合は修正の必要が考えられます。localhostのみの場合は変更は不要でしょう。

その他

その他にも/mnt/etc以下や/mnt/local/etc以下には、変更の必要があるファイルが多数存在する場合があります。ケースバイケースで修正しましょう。典型的な例としては、ネームサーバの設定を入れる/etc/resolv.confや、NTPサーバの設定を入れる/etc/ntp.conf等があると思います。

仮想マシンを再起動

この状態でshutdown -r nowで仮想マシンを再起動すれば、P2V後の仮想化環境でFreeBSDが起動してくるはずですが、何かと想定外の事態はつきものです。せっかくの仮想化環境ですので、再起動前にvSphere Clientからスナップショットを取りましょう。

再起動後に異常が起こったら、何度でもスナップショットからやり直せます。

無事に再起動してサーバの動作を確認できたら、VMware Toolsをインストールしましょう。vSphere Clientから純正VMware Toolsをインストールしても、それが無理ならportsやpkgからopen-vm-toolsやopen-vm-tools-nox11をインストールしてもよいでしょう。

備考

この作業を行った後、仲介マシンの~/.ssh/known_hostsには、IPアドレスA.B.C.DとM.N.O.Pのゴミが残ってしまっており、次に同じIPアドレスにsshする時に、次のようなエラーが出てしまいます。

この場合は、~/.ssh/known_hostsの該当行を削除しましょう。

これで問題なくログインが出来ます。

参考サイト・謝辞

今回の内容の基本的発想に関しては、【P2V】ddによるP2Vのやり方(Linux限定)というブログ記事が非常に参考になりました。また、LiveCDにおけるsshdの起動に関しては、Start SSHd on FreeBSD live cdを参考にしました。ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です