🍑あわもり教室🫧 クラウドの「手前」を、ちゃんとやる。 はじめる
SET 0325分

一台の物理サーバーを分ける

物理サーバー、ハイパーバイザー、ゲストOSの関係を整理します。

このレッスンのメニュー

物理サーバーには上限がある

物理サーバーには、CPU、メモリ、ディスク、ネットワークインターフェースがあります。 それぞれの数と性能には上限があり、同時に動かせる仕事の量も限られます。

一台の大きなサーバーを一つの用途だけに使うと、余った資源が無駄になります。 複数の用途を同じOSで動かすと、一つの障害や設定ミスがほかの用途へ波及しやすくなります。 仮想化は、物理資源を複数の独立したコンピューターに見せることで、この問題を扱いやすくします。

このページを終えると、物理サーバー、ハイパーバイザー、仮想マシン、ゲストOSを外側から順に説明し、Linuxから仮想化環境を確認できます。

物理サーバー上のハイパーバイザーがCPU、メモリ、ディスク、ネットワーク接続を二台の仮想マシンへ割り当てる図
各仮想マシンは一台のコンピューターに見えますが、実際の資源は物理サーバーから割り当てられます。

ホスト、ハイパーバイザー、ゲスト

  • ホスト:仮想マシンを動かす側の物理サーバー
  • ハイパーバイザー:物理資源を仮想マシンへ割り当て、実行を管理するソフトウェア
  • ゲストOS:仮想マシンの中で動くOS

ゲストOSからは、割り当てられた仮想CPU(vCPU)や仮想ディスクが本物の機器のように見えます。 そのためLinuxの起動方法や操作は、物理サーバーと大きく変わりません。

仮想マシンはそれぞれOSを起動する

仮想マシンはゲストOSごとにカーネルを起動します。 一台の仮想マシンでOSが停止しても、別の仮想マシンは原則として動き続けます。

ただし、物理サーバーの電源、ハイパーバイザー、共有ストレージなどが壊れれば、複数の仮想マシンが同時に影響を受けます。 仮想マシン同士が共有している物理資源は、共通の障害原因になります。

仮想化方式とLinuxから見えるCPUを確認する

60分 Linux Labを開き、次のコマンドを実行します。

uname -m
systemd-detect-virt --vm
lscpu | grep -E '^(Architecture|CPU\(s\)|Model name|Hypervisor vendor|Virtualization type):'

三つのコマンドは、それぞれ別の情報を表示します。

  • uname -m:Linuxから見えるCPUアーキテクチャを表示する。Labではx86_64と表示される
  • systemd-detect-virt --vm:Linuxが仮想マシンを検出すると、仮想化方式を表示する。Labではkvmと表示される
  • lscpu:Linuxから見えるCPUの名前と数、検出できた場合はハイパーバイザーの情報を表示する

lscpuCPU(s): 1は、この仮想マシンへ一つのvCPUが割り当てられていることを表します。 Model name: AMD EPYC-Genoa Processorは、仮想マシンから見えるCPU名です。 ハイパーバイザーが物理CPUの名前や機能をゲストOSへ見せる構成もあるため、この名前だけでは物理マシンか仮想マシンかを判断できません。

仮想マシンであることはsystemd-detect-virt --vmの結果で確認し、割り当てられたCPUはlscpuで確認します。 lscpuの項目や並び順は環境によって変わるため、行数ではなく項目名を指定して表示しています。

次の言葉を、外側の「動かす側」から順に並べてください。

  • ゲストOS
  • 物理サーバー
  • ハイパーバイザー

並べたあと、どの層が壊れると複数の仮想マシンが同時に止まるか考えてみます。

このレッスンは完了

このページで扱った流れを確認したら、次の内容へ進みます。