VMware Workstation/Player Linuxホスト環境で物理ディスク管理


VMwareゲストOSでの物理ディスク/パーティション利用

物理ディスク/パーティションの利用について

メリット

ゲストOSにおけるディスクI/O性能が向上する。

確か、VMware Workstationのどこかのマニュアルに、ディスクイメージファイルよりI/O性能がよいとの記述があった。

単純に考えても、正確ではないかもしれないがおそらく、

仮想ディスクでは、 ゲストOSドライバ→VMwareディスク制御ドライバ→ホストOSのファイル管理サブシステム→VMware仮想ディスクイメージの制御ドライバ→ディスクイメージの実体ファイルへのアクセスとなり、

物理ディスクorパーティションの場合に比べて、ホストOSのファイル管理サブシステム、VMwareディスク仮想ディスクイメージ制御ドライバの部分の処理でIO性能が落ちることは予想がつく。

デメリット

VMware Workstation/Playerにおいて物理ディスク/パーティションを使用すると、ゲストOSから実際のディスクパーティション構成がほぼそのままのイメージで見えるような感じになる。

ただし、パーティションを利用する場合、そのゲストOSが使用するパーティション以外にはアクセスできないよう、ガードされているようだ。(VMware Workstation 6.5.2/Player 2.5.2の場合。古いバージョンでもガードされているかどうかは未確認。)

このため、ディスク全体を使用する場合はさほど問題とならないが、ゲストOS毎にパーティションを作成し、そこにインストールする場合、注意すべき事項がある。

これはおそらく、VMware WorkstationのゲストOSインストールガイドないしはユーザーズガイドの物理ディスク使用セクションあたりに記載されていると思うのだが、マニュアル見るのは面倒なのでgoogleや実際の作業により確認を行った。このため、以降記載するネタは、今後のVMware Workstation/Playerリリースでは機能が変わるかもしれないことに注意しておいて欲しい。

まず、ゲストOSのディスクとして使用するパーティション構成は、可能であれば最初に決めてしまって、fdiskなどで作成しておき、一旦ゲストOSをインストールしたら、変更しない方が良い。というのは、どうもゲストOSディスクを物理パーティションにて作成した場合、そのディスクファイルXXXX-pt.vmdkに、その時点での物理ディスク全体のパーティション構成が覚えこまれるようなのだ。ゲストOS作成後、そのゲストがパーティションをディスクとして利用している物理ディスクのパーティション構成を変更すると、「一旦物理ディスクを切り離し、再度追加してください」というようなメッセージダイアログが表示され、ゲストOSが起動しなくなってしまうのだ。さらに、これに従ってゲストOSからディスクを削除し、再度組み込むと、元のディスクのMBR情報が消えてしまうようで、やはりゲストOSが起動しないままとなる。こうなってしまったら、同じディスクを使用している全ゲストOSのMBRを修復しなければならなくなる。OS毎に異なるMBRMBR修復手順は異なるので、それぞれで対処も異なることになる。

また、Windows用に販売されている、OSディスク全体をバックアップするようなソフトが動作しない可能性がある。実際、私はLB Image Backup 9というバックアップソフトを使用しているのだが、このブートCDから起動すると、ゲストOSがパーティションをディスクとして利用しているのに、そのディスク全体が見える。かつ、恐らくディスク全体のブートブロックやパーティション領域がVMwareによって隠されているためだと思うが、ディスクを性格に認識できず、結果としてバックアップができなかった。


ゲストOS毎の制約

ディスクにパーティションを作成した場合、ゲストOSによってインストールできるパーティションが制約される。VMwareで物理的なパーティションにゲストOS用ディスクを作成しインストールする場合も、この制約の影響を受ける。

Linuxは基本パーティション、拡張パーティション内の論理パーティション、どこにでもインストールできる。しかし、Windows XPやSolarisはこれらの影響を受けてしまう。

Windowsの制約

Windows 2000は確か基本パーティション、論理パーティションいずれにもインストール可能だったと思うが、Windows 95/98/MEは先頭の基本パーティションでないとインストールできなかった。Windows Vista/XP/7がどうであるかは確認していない(Vistaは持っていない。7はRC版で確認できるが、未確認)。googleで調べ、少なくとも基本パーティションにインストールする必要があることは分かった。先頭の基本パーティションにインストールするのが無難かと思われる。

物理ハードディスクがシリアルATAであった時ゲストWindows XPがハードディスクを認識できない問題

シリアルATAハードディスクの物理ディスクをVMware Workstation/Playerで使用しようとすると、VMwareゲストからはSCSIディスクとして認識されてしまう。

ところが、Windows XPインストールディスクには、これに対応するSCSIドライバが含まれていない。VMwareサイトのWorkstationダウンロード系ページから、Windows用の仮想SCSIドライバドライバのフロッピーディスクイメージがダウンロードできるので、これを利用する必要がある。

ちなみに、Windows 2000 ProfessionalインストールディスクにはSCSIドライバが入っているため、この問題は発生せずインストールできる。

具体的には、

仮想マシン作成時にフロッピーディスクを組み込んで、このドライバイメージに接続しておく。仮想マシン起動時にはフロッピーディスクは接続しないように設定しておく。

Windows XPをインストールし始めてすぐ、画面の下の方に「SCSIなどの追加ドライバを入れるならF6キーを押せ」というようなメッセージが出るので、F6キーを押す。

しばらくドライバなどの組み込み処理が走った後、追加ドライバを入れるかどうかの確認画面になるので、"s"キーを押す。

「A:ドライブにドライバディスクを入れなさい」というようなメッセージが出力されるので、仮想マシンに先ほどのフロッピーディスクイメージを接続して[ENTER]を押す。すると、VMwareの仮想SCSIドライバが読み込まれる。

以降は、普通にWindows XPをインストールできる。また、このドライバはインストールされるディスクに組み込まれるらしく、インストールが終わった後も、問題なくWindows XPが起動して、使用できるようになる。

Windowsをインストールした後に、パーティション変更した場合の対処

Windows XPのディスクイメージで起動し、回復コンソールでfixmbrコマンドを実行する。ただし、SCSIドライバが存在せず、ゲストWindows XPがハードディスクを認識しなくなるため、VMwareからダウンロードしたフロッピーを利用した対処が必要となる。

なお、私はSCSIドライバの問題が発生しないWindows 2000 Professionalのインストールディスクも持っていたため、こちらを用いてfixmbrを実行し、復旧させることもできた。

Solaris10/OpenSolaris

googleで調べたところ、Solarisも論理パーティションを認識できないらしい、とのこと。先頭パーティションである必要はないが、基本パーティションにインストールする必要がある。

パーティション変更のSolaris10/OpenSolarisへの影響

ゲストSolarisの"/"をzfsで作成していた場合

OpenSolarisはLive CDとなっているので、このCDイメージをSolaris10/OpenSolarisのゲストOSに接続し、起動する。

VMwareゲストOSのBIOSはデフォルトではハードディスクがCDより優先でブートするようになっているので、CD優先でブートするように変更。

デフォルトのOpenSolaris Live CDをデスクトップ環境で起動させると起動に時間がかかるので、シングルユーザーモードで作業する。MBR修復作業にはデスクトップ環境は不要である。

ブートメニューが表示されたら"e"を入力。

ブートするコマンドラインが編集できるようになるので、その行の最後に" -s"オプションを指定する。(single-userモードで起動する、ということ)

[ENTER]キーを押してしばらくすると、グラフィック画面まで起動せず、どのユーザーでログインするかの入力プロンプトが出力されるので、"root"と入力。

パスワードには"opensolaris"を入力する。

コマンドプロンプト状態となる。まずはzpoolの状態を確認する。

# zpool import
  pool: rpool
    id: XXXXXXXXXXXXXXXXXXXXX
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        rpool       ONLINE
          cXt0d0s0  ONLINE
          ^^^^^^^^

上記の、cXt0d0s0を覚えておく。ちなみに、私の環境では、物理ディスクの基本パーティション1/2にOpenSolarisとSolaris10をインストールしたのだが、いずれもc4t0d0s0が"/"であった。

# pfexec zpool import -f rpool

importされたzpoolのうち、自分が使用していたBEの"/"を確認する。

# pfexec zfs list
NAME                       USED  AVAIL  MOUNTPOINT
rpool                     X.XXG XX.XXG  /rpool
rpool/ROOT                X.XXG    XXK  legacy
rpool/ROOT/opensolaris    X.XXG XX.XXG  /
...

上記の場合は、rpool/ROOT/opensolarisが"/"でマウントされていたはず。

次に以下を実行して、/hddにSolaris/OpenSolarisのzfsで作成された"/"ファイルシステムをマウントする。

# pfexec mkdir /hdd
# pfexec zfs set mountpoint=legacy rpool/ROOT/opensolaris
                                              ^^^^^^^^^^^BEにより異なる。
# mount -F zfs rpool/ROOT/opensolaris /hdd

先ほどのcXt0d0s0がzfsでマウントされたことを確認。

# fstyp /dev/rdsk/cXt0d0s0
zfs

マウントしたgrub環境を用いて、そのデバイスにgrubをインストールする。Linuxのgrubとは異なり、installgrubというコマンドを使用する。

# installgrub -m /hdd/boot/grub/stage1 /hdd/boot/grub/stage2 /dev/rdsk/cXt0d0s0
Updating master boot sector destroys existing boot managers (if any).
continue (y/n)? ← 勇気を持って?y[enter]を入力する。

rpoolの環境を元に戻しておく。

# umount /hdd
# pfexec zfs set mountpoint=/ rpool/ROOT/opensolaris
# pfexec zpool export rpool

リブートする。

# shutdown -g0 -i6 -y

再びOpenSolaris Live CDが起動するので、まずはこのメニューから"ハードディスクから起動"を選択し、ちゃんと起動することを確認する。 うまく起動したら、CDを取り外す。

ゲストSolaris10の"/"をufsで作成していた場合

OpenSolarisは"/"がzfsで作成されてしまうので、これに該当することはない。

このケースでも、修復のために、OpenSolarisのLive CDをシングルユーザーモードでブートし、作業を行う。

まず、どのディスクスライスが"/"であるかを調べる必要がある。

Solaris10インストール時にどのスライスを"/"にしたかによってデバイス名c0t0d0sXのXが異なるが、スライス0にインストールしたケースで例を示す。c0t0d0s0コントローラcの番号を一つずつ増やしながら、fstypコマンドでufsパーティションを探す。

# fstyp /dev/rdsk/c0t0d0s0
unknown_fstyp (cannot open device)
# fstyp /dev/rdsk/c1t0d0s0
    :
# fstyp /dev/rdsk/cXt0d0s0
ufs

このデバイスを覚えておく。なお、fstypでhsfsと表示されるデバイスは、CD-ROMデバイスであるので、違う。デバイスを見つけたら、

# mkdir /hdd
# mount -F ufs /dev/dsk/cXt0d0s0 /hdd
# installgrub -m /hdd/boot/grub/stage1 /hdd/boot/grub/stage2 /dev/rdsk/cXt0d0s0
Updating master boot sector destroys existing boot managers (if any).
continue (y/n)? ← 勇気を持って?y[enter]を入力する。

リブートする。

# shutdown -g0 -i6 -y

再びOpenSolaris Live CDが起動するので、まずはこのメニューから"ハードディスクから起動"を選択し、ちゃんとSolaris10が起動することを確認する。 うまく起動したら、CDを取り外す。

Windows/Solarisの制約を考慮した上での、パーティションレイアウト

OpenSolaris/Solaris10共にインストールしたかったので、以下のようなディスクパーティションレイアウトとした。

基本パーティション0 /dev/sda1 Windows XP仮想マシン 基本パーティション1 /dev/sda2 OpenSolaris仮想マシン 基本パーティション2 /dev/sda3 Solaris10仮想マシン 拡張パーティション /dev/sda4 論理パーティションの器 論理パーティション0 /dev/sda5 Debian GNU/Linux 5 lenny ホストマシンの"/" 論理パーティション1 /dev/sda6 lennyのスワップ領域

まだ、少々空き領域が残っている。