SSブログ

ほかのOSを仮想環境に -- 準備編 [仮想環境]

他のOSを仮想環境にセットアップする前に、仮想環境の成り立ちを勉強するために、dom0と同じ環境をもう一つ手動で作成してみました。

目次

  1. 仮想環境用のハードドライブの準備
  2. フォーマットと必要なファイル/ディレクトリのコピーまたは作成
  3. 個別環境向けの設定変更(重要!)
  4. configファイルの作成
  5. 起動

仮想環境用のハードドライブの準備

今までLVをその環境用に割り当てたり、ファイルを割り当てたりしましたが、どうも前者は管理するのに都合が悪いです。

まず環境をたくさん作成すればするほど、LVの数も多くなるということ。これではどの環境にどのLVを割り当てたのかすぐに忘れてしまいます。環境毎に volume groupを分ければそういったことも無くなりそうですが、それでは環境毎にディスクを買ってこなければならず、かつLVを使う意義が薄れます。仮想環境 の台帳を作成して割り当てたLVを記載すればいいのでしょうが、会社で使っているわけではないので、そこまでガチガチに管理したくありません。

そこで、今回からは特別な理由がない限りはファイルでいくことにしました。

これだと

  • 仮想環境毎にディレクトリを作成
    ここにはコンフィグファイルなども置いておく。必要ならば環境の説明文書を置いてもよし。
  • ハードドライブ用のファイルをディレクトリ内に作成

とすれば、環境毎の情報が一まとまりになって、管理も容易です。但し、ファイルを使うことで、もしかしたらI/O性能に難があるかもしれません。これについては、今後の課題ということにします。

さて、前提が定まったところで仮想環境用のドライブを作成します。今回は5GBで作成します。以前割愛したのですが、以下のコマンドです:

# cd <作成する環境のディレクトリ>
# dd if=/dev/zero of=hda1 bs=1024 seek=$(5 \* 1024 \* 1024 - 1) count=1
# ls -l hda1
-rw-r--r-- 1 root root 5368710144 2010-12-31 02:16 hda1
# du -s hda1
4       hda1

ddコマンドの使い方詳細は色々なところにありますので、そちらを参照してください。ここの要点は

  • /dev/zeroは常に0(zero)を埋めて返すドライバから読み込み
  • 読み書きともに1024bytesで (bs=1024)
  • 書く前に書き込みポインタを移動。今回は5GBのファイルを作成したいので、5GB - 1移動 (seek=$(...))
  • 実際には1ブロック(= 1024bytes)書き出し (count=1)

seek=...の括弧内は

5GBを1024byte block単位で勘定する = 5*1KB*1KB*1KB / 1KB = 5*1KB*1KB blocks
但し最後に1block書くため - 1する

を計算しています。細かいことを気にしない方は -1 を省いてもよいです。

フォーマットと必要なファイル/ディレクトリのコピーまたは作成

今回はdom-0と同じOSを動作させるので、必要なものはdom-0上に準備されています。

User's manualによれば、必要なものをコピーすればよいようです。先に作成したファイルにコピーするには、まずフォーマットして、その後コピーを行います。

# mkfs -t ext3 $(pwd)/hda1
<何か問われますが、Yesと答える>
# mount -o loop $(pwd)/hda1 /mnt
# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib,lib64} /mnt

下線部に注意してください。User's Manualには記載されていませんが、x64環境だとlib64も必要なディレクトリです。私はうっかり抜かしていて、2、3時間はまりました。またコピーする前に、/tmpや/var/tmpの中身は整理しておいた方がいいです。不要なデカいファイルをコピーしても仕様がないですから。ここもやってしまい、Disk Fullにしてしまいました。

以上に注意すれば、次はオリジナルと同じにしてはいけない項目のチェック&修正です。

個別環境向けの設定変更(重要!)

このまま起動してしまうと、一つだけ大変なことになります。そうです。IPアドレスがdom-0とバッティングしてしまいます。(DHCPで構成していれば 防げますが、仮想環境をDHCPしても使い辛いですよね?)って、わたしはここで起動してしまい、多分IPアドレスがバッティングしてdom-0から追い出されてしまいました。

やってしまった人は、dom-0のコンソールでログインして、間違って起動したこの環境をdestroyしましょう。まだコンフィグファイルを準備してないので、大丈夫だとは思いますが。

最低限変更するのは以下:

  1. /mnt/etc/fstab
    重要なのは、/のデバイス名です。dom-0で/dev/system/rootとかになっていると、fstabもそれに類似の名称になっています。今回は一つのディスク(パーティション)として作成したので、その名称に書き換える必要があります。後に出るように、今回はhda1として仮想環境に見せるので、/dev/hda1を/にマウントするように変更してください。
    他にもdom-0では/以外にも色々mountしていると思います。それらが自動マウントになっていた場合、この環境でもマウントしようとしてエラーになります。エラーになるだけなのですけどね
  2. IP address
    openSUSEの場合は、/mnt/etc/sysconfig/networkにif-<if名>というファイルがあります。これを削除しておけばよいです。但し、if-loはloopbackで、どのサーバでも内容が同じなので、消さなくて結構です。

双方、間違ってもdom-0のファイル(/etc/...)を編集しないようにしてください。

configファイルの作成

いよいよこの環境用のファイルを作成します。私は、スクラッチから書くようなことはせずに、サンプルを編集しましたが、ここの例であれば、作成しても大したこと無いです。

環境は以下のとおり:

  1. カーネルファイルとラムディスクはそれぞれ /boot/vmlinuz-xen,  /boot/initrd-xen (シンボリックリンクOK)
    この位置はdom-0上のファイルです。各環境の位置ではありません。
  2. 割当メモリは256MB
  3. 環境名は決めてください(この例ではpauli)
  4. diskは先に作成したファイルをhda1として、かつrootとして使用
  5. nicは1つ。MACは勝手に付けてよい
  6. VNCでコンソール出力。コンソール番号は4番。つまりVNCポートは5904。

です。以上をconfigファイルに表すと、

kernel = "/boot/vmlinuz-xen"    # (1)
ramdisk = "/boot/initrd-xen"     # (1)
memory = 256                       # (2)
name = "pauli"                       # (3)
disk = [ 'tap:aio:/var/lib/xen/images/pauli/hda1,hda1,w' ]  #(4)
root = "/dev/hda1"                 # (4)
vif = [ '' ]                             # (5)
vfb = [ 'vnc=1,vnclisten=0.0.0.0,vncunused=1,vncdisplay=4' ]  # (6)

です。

起動

以上の純美ができたら、

# xm create cfg -c

で起動してみてください。また、VNCクライアントで5904をアクセスして見てください。コンソールにアクセスできると思います。

参考:
User's Manual Xen v3.0,  "6.2 Using File-backed VB"

 

(次回予定:「ほかのOSを仮想環境に -- 実践編」)


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

[増刊号 005] GhostScrip..NECお前もか! ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。