tinyvisor (1.8) | 2016-11-13 20:03 |
このページでは、PC内に2個のVM(VM0とVM1)を作成し、それぞれのVMでOSを動作させる手順を説明します。
あらかじめ、VM1に割り当てるためのHBA(AHCIカードなど)とHDD、NIC、ビデオカード、ディスプレイ等を用意してください。 また、TinyVisorのインストール方法を参照して、TinyVisorをインストールしてください。
GNU/Linuxを起動して、ハードウェア構成を確認します。
始めに、次のコマンドを実行し、CPU(論理プロセッサ)の数と各CPUのAPIC IDを確認します。 後ほどVMにCPUを割り当てる際に、APIC IDを指定します。
grep '^apicid' /proc/cpuinfo apicid : 0 apicid : 2 apicid : 4 apicid : 6 apicid : 1 apicid : 3 apicid : 5 apicid : 7
次に、次のコマンドを実行し、メモリがマップされている物理アドレスを確認します。 後ほどVMにメモリを割り当てる際に、物理アドレス範囲を指定します。
grep 'System RAM' /proc/iomem 00000000-0009c3ff : System RAM 00100000-dfbdffff : System RAM 100000000-11fffffff : System RAM
最後に、次のコマンドを実行し、I/O(PCI)の構成を確認します。 後ほどVMにI/Oを割り当てる際には、I/Oが接続しているPortのバス番号とデバイス番号、ファンクション番号を指定します。 例えば「88SE9123 PCIe SATA 6.0 Gb/s controller」を割り当てる場合には、00:1c.2を指定します。
lspci -tv -[0000:00]-+-00.0 Intel Corporation Core Processor DMI +-03.0-[01]----00.0 nVidia Corporation G98 [GeForce 8400 GS] +-08.0 Intel Corporation Core Processor System Management Registers +-08.1 Intel Corporation Core Processor Semaphore and Scratchpad Registers +-08.2 Intel Corporation Core Processor System Control and Status Registers +-08.3 Intel Corporation Core Processor Miscellaneous Registers +-10.0 Intel Corporation Core Processor QPI Link +-10.1 Intel Corporation Core Processor QPI Routing and Protocol Registers +-1a.0 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1a.1 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1a.2 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1a.7 Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller +-1b.0 Intel Corporation 5 Series/3400 Series Chipset High Definition Audio +-1c.0-[02]-- +-1c.1-[03]----00.0 Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller +-1c.2-[04]----00.0 Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s controller +-1c.3-[05]----00.0 NEC Corporation uPD720200 USB 3.0 Host Controller +-1d.0 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1d.1 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1d.2 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1d.3 Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller +-1d.7 Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller +-1e.0-[06]----03.0 ATI Technologies Inc Rage XL +-1f.0 Intel Corporation 5 Series Chipset LPC Interface Controller +-1f.2 Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller \-1f.3 Intel Corporation 5 Series/3400 Series Chipset SMBus Controller
始めに、BIOSメニューにて、VM1に割り当てるHDDの起動順位をVM0のHDDの起動順位より上にします。
次に、そのHDDに、通常の手順でOSをインストールします。このとき、UEFI環境用ではなく、BIOS環境用にOSをインストールしてください。
最後に、BIOSメニューにて、起動順位をもとに戻します。
VM1を生成し、VM1にCPU、メモリ、I/Oを割り当てるためには、次に示すVMMパラメータを指定します。
パラメータ | 説明 | 例 |
vm=<vm名>[,<vm名>[,...]] | 生成するVMの一覧を指定します。vm0は指定しなくても指定したとみなします。 | vm=vm0,vm1 |
<vm名>.cpu=<APIC_ID>[,<APIC_ID>,[...]] | 指定したVMに割り当てるCPUのAPIC IDを指定します。 | vm1.cpu=6.7 |
<vm名>.mem=<開始アドレス>-<終了アドレス>[,<開始アドレス>-<終了アドレス>,[...]] | 指定したVMに割り当てる物理メモリのアドレス範囲を指定します。 | vm1.mem=80000000-11fffffff |
<vm名>.cpu=<BUS>:<DEV>:<FUNC>[,<BUS>:<DEV>:<FUNC>,[...]] | 指定したVMに割り当てるPCIe Root Portのバス番号、デバイス番号、ファンクション番号を指定します。 | vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4 |
例えば、VMMパラメータは次のようにになります。
vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4
具体的な手順は、VMMをインストールした方法によって違います。
UEFI環境において、USBメモリにTinyVisorをインストールした場合は、TinyVisorをビルドしたディレクトリに移動し、次のコマンドを実行してUSBメモリに書き込みなおします。1.7以降の場合は、ゲストBIOSのバイナリを明示的に指定する必要があります。
1.7以降の場合
sudo vmm/boot/uefi-loader/install.sh -c 'vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' -m bios/out/bios.bin /dev/sdf1
1.6以前の場合
sudo ./install_to_usb.sh -e -c 'vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf1
BIOS環境において、USBメモリにTinyVisorをインストールした場合は、TinyVisorをビルドしたディレクトリに移動し、次のコマンドを実行してUSBメモリに書き込みなおします。BIOS環境では「vm0.boot_int18」または「vm0.boot_drive=81」の指定を指定して、USBメモリの次の優先順位のドライブからOSをロードするようにしてください。
1.7以降の場合
sudo vmm/boot/loader/install.sh -c 'vm0.boot_int18 vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf 0 1 vmm/boot/loader/bootloader vmm/vmm.elf bios/out/bios.bin
1.6以前の場合
sudo ./install_to_usb.sh -c 'vm0.boot_int18 vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf
LinuxのファイルシステムにTinyVisorをインストールした場合、/etc/grub.d/40_customのエントリを次のように変更してから、update-grubコマンドまたはgrub2-mkconfig -o /boot/grub2/grub.cfgコマンドを実行します。
menuentry 'VMM (vm0, vm1)' --class vmm { insmod part_msdos insmod ext2 set root='(hd0,msdos1)' echo 'Loading VMM ...' multiboot /boot/vmm.elf vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4 echo 'Loading guest BIOS ...' module /boot/bios.bin }
PCに電源を投入します。
USBメモリにTinyVisorをインストールした場合は、自動的にVMMが起動します。 USBメモリからVMMがロードされ起動を開始すると、メッセージがCOM1か画面(デフォルトはCOMT1)に出力されます。
LinuxのファイルシステムにTinyVisorをインストールした場合、GRUB画面で「VMM (vm0, vm1)」を選択し、VMMを起動させます。
以下は、USBメモリにTinyVisorをインストールし、VM0にFreeBSDをインストールしたHDDを割り当て、VM1にLinuxをインストールしたHDDを割り当てた場合の写真です。
VMMの起動が完了すると、VM0とVM1の実行が開始されます。
VM0では、Host BIOSによってブートローダがロードされ、ブートローダによってOSがロードされ、OSが起動します。 ブートローダのメニューやOSのメッセージが画面に出力されます。
VM1では、初めにGuest BIOSのメッセージがCOM1に出力されます。 次に、Guest BIOSによってGRUBがロードされ、GRUBによってOSがロードされ、OSが起動します。 VM1にビデオカードを割り当てていれば、そのビデオカードに接続されたディスプレイの画面にOSのメッセージが出力されます。
VM0とVM1のOSが起動完了すれば、それぞれ独立して操作可能です。
BIOS環境では、VM0のOSを再起動すると、VM0のOSだけが再起動します VM1のOSを再起動すると、VM1のOSだけが再起動します。
UEFI環境では、VM0のOSを再起動して、VM1のOSをシャットダウンすると、マシン全体が再起動します。 VM1のOSを再起動すると、VM1のOSだけが再起動します。
VM0のOSと、VM1のOSの両方を停止すると、PCの電源がOFFになります。