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


前回紹介したFreeBSDのP2V方法は、手順はそれなりに簡単ですが、イメージの取得と貼り付けにddを使うため、パーティションの切り直しなどが不可能で、シンプロビジョニングも活用できないという欠点がありました。

これを解決する方法として、dump/restoreを用いてP2Vを行う方法があります。

手順概要

基本的な手順は前回と同じため、手順が重なる部分は省略して解説します。おおまかな前提は次のとおりです。

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

前回と異なる部分は後半3項目です。

ddの代わりにdump/restoreを用いるわけですが、FreeBSDのdumpはUFS2のスナップショット機能を利用してくれるので、DBサーバやWebサーバなど、テンポラリな不整合を発生しがちなプログラムさえ止めておけば、物理サーバを起動した状態で十分健全なdumpを取得できます(もちろん、Live CDブートして作業を行えばより安全です)。

また、dumpしたパーティションと異なるサイズにrestoreできるため、リッチに使っていた物理マシンのディスクを、必要最小限的に領域を確保した仮想マシンに縮めることが可能です。

さらに、restoreの書き込みはイメージ書き込みとは異なるため、シンプロビジョニングも活かすことが可能です。

いいことばかりのように思えますが、手順は幾分複雑になります。

  1. 物理サーバを掃除して、仮想マシンに必要なパーティションサイズ計画を検討する
  2. 物理サーバからssh経由のdumpで仲介マシン上に各パーティションのバックアップを取得
  3. 仮想ゲストマシンでP2Vしたい対象と同じFreeBSDのバージョンを、計画したパーティションサイズで最小インストールする
  4. 仮想ゲストマシンをLive CDで起動し、インストールしたファイルをすべて消す
  5. 仲介マシンから仮想ゲストマシンにdumpイメージをssh経由でrestoreする
  6. 仮想ゲストマシンに対応する設定を修正する
  7. VMware Toolsをインストールする

主に前回と異なる部分を重点的に解説します。

パーティション計画

まずは、物理サーバで無駄なデータや無意味に古いログなどを掃除して、スリムにします。その上で、dfで実際の利用状況を調べます。なお、以後、物理マシンのプロンプトを「src#」で表記します(rootユーザ)。

ここで、今後必要となる量などを考えて、次のように計画を立てました(なお、この手順でパーティション構成自体を変更することはできません。変更できるのはサイズだけです)。

デバイス名マウントポイント元サイズ利用サイズ新サイズ
/dev/da0s1a/1GB90MB512MB
/dev/da0s1bSWAP4GB-1GB
/dev/da0s1d/tmp1GB5MB512MB
/dev/da0s1e/var4GB90MB2GB
/dev/da0s1f/usr16GB3GB4GB
/dev/da0s1g/var/log32GB2GB4GB
/dev/da0s1h/jail91GB20GB32GB

合計で44GBです。つまり、前回の方法では150GBのシックプロビジョニングが必要でしたが、今回の方法だと44GBで、さらにシンプロビジョニングにすることが可能です。

dumpファイルの取得

前述のとおり、FreeBSDのdumpコマンドはUFS2のスナップショット機能を用いて一貫性のあるファイルシステムイメージを取得することができる(-Lオプション)ため、おおまかなサーバソフトウェアさえ停止してしまえば、概ね問題のない静的dumpイメージを取得可能です。そのため、物理マシンの/etc/ssh/sshd_configのPermitRootLoginをyesに一時的に設定し、rootユーザでログインできるように設定してください(もちろん、sshには適切なアクセス制限がされていることが前提です)。/root/.ssh/authorized_keyなどを用意して公開鍵認証を利用するのがお勧めです。

次のようにして、仲介マシン上から、物理サーバ(IPアドレスはA.B.C.Dを仮定します)の全てのUFS2パーティションのバックアップイメージをssh経由で取得します。まずはルートパーティションの/dev/da0s1aです(前回述べたとおり、物理マシンのディスクのデバイス名は異なる可能性がありますので、/etc/fstabなどできちんとチェックしてから作業を行ってください)。なお、以後仲介マシンのプロンプトは「chuukai%」(一般ユーザ)で表記します。

わずか10秒で取得できました。同じ要領で全てのパーティションのイメージを取得します。

dumpの実行はddでやるよりもかなり高速です。最後の一番大きいda0s1hの例でも、30分弱で取得できています。

全てのイメージの取得にかかった時間は合計約38分です。ddでやった時の3時間弱と比較して、圧倒的に高速です。

仮想マシン上にFreeBSDを最小インストール

さて、次は計画したパーティションサイズに基づき、仮想マシン上にFreeBSDを最小インストールします。実際はパーティションを切るだけで良いのですが、これはFreeBSDのパージョンなどによりいろいろ異なる部分があったりするため、LiveCDからCLIで行うことが難しいのです。

また、インストーラからパーティションを書き込むだけで良いのでは、というのもあるかもしれませんが、これもバージョンによっては操作が困難だったり、インストーラがそのような想定外の手順を正しく扱えなかったりするため、あまりお勧めできません。

そこで、一番確実な手段は、多少シンプロビジョニングを汚しますが、最小インストールを行うことだと思います。

まずはインストールしたいFreeBSDのバージョンのインストールCDのイメージを用意します。昔のバージョンのCDイメージは、ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/から入手可能です。

そして、普通にVMware上にFreeBSDをインストールするような手順の一貫で、パーティションを先ほどの計画に従って設定します。

bsdlabelそしてFreeBSDを最小インストールします。FreeBSD 8以前ならminimumでportsなし、FreeBSD 9以降ならbaseのみのインストールとするのが妥当でしょう。

インストールしたファイルを消去

さて、次はこのインストールが終わった仮想マシンをLive CDで起動します。このLive CDは最新のもので構いません(FreeBSD 8以前はインストーラにLive CD機能は付いていません)。以下の例ではFreeBSD 10.0のLive CDを用いています。

ちなみに、VMware vSphereではインストールの完了したシステムをCDから起動することには多少のテクニックが必要です。BIOSのブート順がHDD→CDとなっているからです。このブート順を切り替えるには、仮想マシンの設定から「オプション」タブを選択し、「強制的にBIOSセットアップ」のところをチェックします。

biosboot

これで起動することで、次回の起動時のみBIOSセットアップの画面が開くので、CD-ROMのブート順をハードディスクの上に持ってきます。

bios

これで、FreeBSD live CDを起動した後、前回と同じ手順で外部からsshログイン可能に設定します。以後、このマシンでのIPアドレスはM.N.O.P、プロンプトは「livecd(dst)#」(rootユーザ)と表記します。

ここで、全てのパーティションをマウントしつつ、rmで消去してください(newfsしなおしたほうが良いのでは、という意見もあると思いますが、ファイルシステムに関する様々な設定がバージョンによって違う場合もあるので、rmで消したほうが確実だと思います)。また、schgされた消せないファイルもあるので、事前にchflags noschgした方がよいでしょう。

dumpファイルをリストア

この状態で、dumpファイルをリストア出来る環境が整いました。まずは/dev/da0s1aをリストアしてみます。まずは仮想マシンで/mntに/dev/da0s1aをマウントします。

このパーティションに、dumpイメージを仲介マシンからsshを起動してrestoreします。

なお、/dev/ttyに関して出るエラーは無視して構いません。これで、仮想マシン側でルートディレクトリらしきものがリストアされていることを確認し、/mntをアンマウントします。

この手順を全てのパーティションについて繰り返します。全てのパーティションについて、マウントポイントは/mntのままで構いません。

たとえば/usrの入っていた/dev/da0s1fに関しても、まずは仮想マシンで

してマウントし、仲介マシンで

することでdumpイメージを書込み、再度仮想マシンで

のように確認作業の後にアンマウントする手順となります。

この状態で、既にrestoreしたマシンは前回と同様、マウント可能となっています。

あとは、前回と同様、/mnt/etcや/mnt/usr/local/etcの内容を調整して再起動すれば、P2Vは完了です。なお、再起動前に、先程と同様にBIOS設定を起動して起動順をハードディスク優先に戻しておかないと、またCDから起動してしまうので気をつけましょう。

また、dump時に物理マシンをSSHでrootログイン可能としているので、それをrestoreした再起動後の仮想マシンも、rootログイン可能となっています。必要であれば再度/etc/ssh/sshd_configを修正した上でsshdをリスタートして、rootログイン不可に戻しましょう。

参考サイト・謝辞

今回の内容の基本的発想に関しては、【P2V】ddによるP2Vのやり方その2(シンプロビジョニング対応)(Linux限定)というブログ記事が非常に参考になりました。ありがとうございます。

コメントを残す

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