VPSとは?初心者向けに仕組みとroot権限を解説
VPSは、共有ハードウェア上に仮想マシンやコンテナで作られた専用環境です。root権限でできることと、メモリやCPUなど共有される資源の制限を分かりやすく解説します。
VPS とは何ですか?
VPS(virtual private server)は、データセンターにある 1 台の物理コンピューターを分割した領域を、あたかも自分専用のマシン全体であるかのように借りるサービスです。そのコンピューター上のソフトウェアが複数の独立したサーバーに分割し、そのうち 1 つが割り当てられます。専用のメモリ割り当て、ディスク領域、IP アドレスが提供され、プランの制限内でソフトウェアをインストールする管理者アクセス権も得られます。VPS は常時稼働します。また、外部公開向けのプランでは、インターネット上のアドレスで接続を受け付けます。
3 つの単語に分けて考えると、この製品の意味が分かります。Server は、電源が入った状態で稼働し、ネットワーク経由の要求に応答するコンピューターです。Virtual は、ソフトウェアによって作られたことを意味します。サーバーは、より大きな物理マシンを分割した領域です。Private は、その領域が自分だけに割り当てられていることを意味します。ファイルや実行中のプログラムは、隣の領域を借りている利用者から見えません。
これまで何かの環境で root 権限を使ったことがない場合、最も重要なのは最後の点です。VPS では、サーバー環境への管理者アクセス権が与えられます。あらかじめ設定されている内容と変更できる範囲は、イメージ、仮想化技術、プランによって異なります。
ハイパーバイザーが分割するものと共有するもの
仮想マシン型 VPS では、リソースを分割するプログラムをハイパーバイザーと呼びます。ハイパーバイザーはホストと呼ばれる物理マシン上で動作します。ハイパーバイザーは各顧客に、プロセッサ、メモリ領域、ディスク、ネットワークカードという仮想ハードウェア一式を割り当てます。その仮想ハードウェアにオペレーティングシステムをインストールすると、実際のコンピューターを所有しているかのように起動します。このゲストシステムが VPS です。KVM (kernel-based virtual machine)、Xen、VMware ESXi、Microsoft Hyper-V がこの方式を使用します。一方、OpenVZ などのコンテナ型 VPS は、独立したゲストカーネルを使わず、ホストのオペレーティングシステムカーネル内の仮想化層を使用します。
メモリとディスクは空間で分割されます。プロセッサは時間で分割されます。この違いが、後で生じる意外な挙動の大部分を説明します。割り当てられたメモリは、物理 RAM の予約を自動的に意味するわけではありません。KVM はメモリのオーバーコミットをサポートしており、ホストはゲストのメモリを swap に退避できます。ディスクはホストのストレージ上にあるファイルまたは論理ボリュームであり、削除するまで自分のものとして保持されます。仮想 CPU コアはホストの物理コアに対するキューであり、ハイパーバイザーが次に実行するゲストをスケジュールします。
次のコマンドで、検出可能な仮想化方式を確認できます。
systemd-detect-virt
uname -rKVM VPS では systemd-detect-virt が kvm を出力します。これは、完全なハイパーバイザー上で、ユーザー専用のカーネルが起動していることを意味します。コンテナ技術では lxc または openvz を出力します。この場合、サーバーはホスト自身のオペレーティングシステム内に隔離された領域として存在し、カーネルは同じホスト上の他のコンテナと共有されます。別のコンテナ環境を検出すると container-other を出力します。仮想化を検出しない場合は none を出力します。この違いには実際の影響があります。共有カーネルは変更できないカーネルだからです。共有カーネル型コンテナでは、モジュールのロードをホストが制御します。そのため、WireGuard VPN モジュールのようなカーネル内機能にはホスト側の対応が必要です。共有カーネル型コンテナでは、uname -r は通常、ホストのカーネルリリースを報告します。ただし、コンテナランタイムによって動作は異なります。gVisor はホストカーネルを共有せずにコンテナを実行し、公式の例では 5.15.0-gvisor と報告されます。KVM サーバーでは、同じコマンドによって自身のゲスト内にインストールされたカーネルが表示されます。そのカーネルは、他のマシンと同じ方法でアップグレードまたは置き換えられます。
ここでいう virtual とは何ですか?
サーバーはソフトウェアで構成されているため、プロビジョニングの際に、物理マシンを新たにラックに搭載してもらう必要はありません。ハードウェアをラックに搭載する作業は発生しません。テンプレートイメージから構築されるため、再構築するとクリーンな Ubuntu が戻ります。ただし、既存のディスク内容も消去されます。多くのプロバイダーの管理画面では、リスクのある操作を試す前にディスクのスナップショットを作成できます。また、再起動してプランのサイズを変更したり、基盤ホストの保守が必要なときに、ゲストを別のハードウェアへ移動したりできます。
料金も同じ事実から決まります。1 台の物理マシンを同時に複数の顧客で共有するためです。そのため、専用サーバーを 1 台借りる場合と比べて、VPS の料金がその水準になる理由が分かります。
この利点には、同時にコストもあります。基盤のハードウェアを共有するため、近隣の利用者が高負荷になると、その影響も受けます。以下の制限に関するセクションに、その影響を測定するコマンドを示します。
ここでいう「private」とは何ですか?
Private とは、隔離されていることを意味します。どの程度隔離されるのかを具体的に確認する価値があります。自分専用の root ファイルシステム、自分専用のユーザーアカウント、自分専用のプロセス一覧を使用できます。仮想マシン型の VPS では専用のカーネルも使用できますが、OpenVZ コンテナはホストのカーネルを共有します。同じホスト上の別の顧客があなたのプロセスを一覧表示したり、ファイルを読み取ったりすることはできません。別の顧客のゲストから、あなたのメモリや仮想ディスクへ到達する経路がないためです。仮想マシンはオペレーティングシステムを分離して実行します。一方、カーネルを共有するコンテナは、1 つのオペレーティングシステム内でユーザーとプログラムを隔離します。ただし、プライバシーはホスト自体までです。ハイパーバイザーを運用する者は、必要なときにいつでもゲストのメモリを読み取れます。この最後の隔たりを埋めるには、VPS における confidential computingで説明する暗号化メモリ対応ハードウェアが必要です。
Shared hosting は逆の仕組みです。数百の Web サイトをホストするマシン上のディレクトリ、control panel、そしてプロバイダーが選択してインストールしたソフトウェアを使用します。そこには apt install がありません。パッケージをインストールするとマシン全体が変更される一方、そのマシン全体を変更する権限はないためです。Shared hosting と VPS の比較では、この違いを詳しく説明します。一言でいえば、shared hosting はアカウントを貸し出し、VPS はコンピューターを貸し出します。
VPS の仕様表を 1 行ずつ読む
VPS は、通常、いくつかの数値を並べた短い仕様表として提供されます。以下では、中価格帯のプランを例として使用します。これらの数値は説明用の例であり、見積書や特定時点の市場調査ではありません。
このグラフのデータ
[
{
"plan": "Example mid-range VPS",
"vcpu_cores": 4,
"ram_gb": 16,
"nvme_gb": 160,
"bandwidth_tb": 8,
"ipv4_addresses": 1
}
]この 1 行が製品の全体像です。左から右へ読みます。
4 vCPU。 vCPU(virtual central processing unit)は、ハイパーバイザーがホストのプロセッサ上でスケジュールする仮想プロセッサです。プランに dedicated と明記されていない限り、専有ではなく、そのスレッドの一部を共有します。サーバー内では、nproc が通常 4 を表示します。これは現在のプロセスが利用できるプロセッサ数を数えます。CPU affinity と、対応する cgroup の CPU quota によって、この値が小さくなる場合があります。一方、OMP_NUM_THREADS と OMP_THREAD_LIMIT は、それぞれ返される最小値と最大値を設定し、nproc --all はインストールされているすべてのプロセッサ数を数えます。lscpu はモデル名を表示します。これは、ホストの設定によって、実際のホスト CPU 名または汎用の QEMU モデル名になります。
16 GB の RAM。 プランではメモリの割り当て量または上限が指定されます。ただし、それだけでホスト上の物理 RAM が予約されるとは限りません。free -h は、カーネルと予約済みメモリ領域を除いた使用可能メモリを 2 進単位で報告します。そのため、差を判断する前に、プロバイダーが使用する GB または GiB の単位を確認してください。割り当て量を超える追加メモリを使用できるかどうかは、プランと仮想化の設定によって異なります。
160 GB の NVMe。 NVMe(non-volatile memory express)は、ホスト内部でドライブを接続する方式です。以前のプランで使われていた SATA SSD よりも大幅に高速です。割り当てられた領域は仮想ディスクとして見え、KVM では通常、/dev/vda になります。df -h / は root filesystem の容量を 2 進単位で報告します。そのため、10 進の GB で表示されたディスク容量とは異なり、他のパーティションや filesystem metadata が使用する領域も含みません。使用可能容量はさらに小さくなります。ext4 はデフォルトで、filesystem の 5 percent を root 用に確保するためです。SSD VPS における SSD の実際の意味 と 契約したディスクを確認する方法 で、さらに詳しく説明しています。
8 TB の転送量。 これは 1 か月間に転送できるデータ量で、通常は outbound のみを対象に集計します。転送量は容量であり、port speed はプランで別に指定される値です。上限を超えると、プロバイダーによって追加料金が発生するか、速度制限が適用されます。そのため、動画をホストする前にこの項目を確認してください。sudo apt install vnstat で自分の使用量を確認でき、vnstat -m はインストールした日から集計を開始します。
1 個の IPv4 address。 この address は、サーバーを借りている間は自分のものです。ドメインをこの address に向け、firewall とプロバイダーのネットワークポリシーで許可された port で traffic を受け入れられます。reverse DNS の設定もプロバイダーによって異なります。非常に安価なプランでは、多数の顧客が 1 つの shared address の背後に置かれることがあります。これは NAT VPS と呼ばれ、その場合、ip -4 addr show は 10.0.0.5 のような private address を報告し、inbound port も制限されます。
次の 4 つのコマンドで、割り当てられた内容を確認できます。
nproc
free -h
df -h /
ip -4 addr show上記のいずれかが、前述の丸めによる差を超えて仕様表と一致しない場合は、そのマシン上で構築を始める前に、サポートへ問い合わせる価値があります。
実際の運用で root 権限が意味すること
root は Linux の管理者アカウントで、ユーザー ID は 0 です。root で id -u を実行すると、0 が表示されます。root はシステム全体にパッケージをインストールできます。1024 未満のポートも開けます(デフォルトでは、カーネルがこれらを root または CAP_NET_BIND_SERVICE を持つプロセス用に予約しているため、その capability を持つ non-root プロセスは net.ipv4.ip_unprivileged_port_start を下げずに port 80 に bind できます)。システムファイルの読み取りと編集も可能です。また、1 つの不注意なコマンドでシステムを破壊できます。モジュールのロードとカーネルの置換にはカーネルの制御が必要ですが、shared-kernel container ではその制御は提供されません。これを代わりに元へ戻してくれる人はいません。
実際の違いは明快です。shared hosting では、ソフトウェアの導入をサポートチケットで依頼します。VPS では、次のように入力します。
sudo apt update
sudo apt install -y nginx
systemctl status nginxsystemd を使用する Ubuntu image では、インストール後に systemctl status nginx を実行すると active (running) が表示されるはずです。port 80 に到達できる場合は、ブラウザーでサーバーの IP address を開くと、デフォルトの nginx ページが表示されます。status に failed と表示された場合は、journalctl -u nginx -n 50 を実行して最後の行を確認してください。サービスが起動を拒否した理由が記録されています。よくある原因は、config file の typo、または別の program がすでに port 80 で listening していることです。
root はセキュリティ境界全体でもあります。アクセスは、SSH key や password など、サーバーに設定された login method を通じて行われます。新しいサーバーで最初に行う session は、アプリケーションをインストールするタイミングではありません。通常の user を作成し、SSH key による login に切り替え、port の前段に firewall を配置してください。新しい VPS で最初の 10 分に行うことでは、その checklist を順番に説明しています。SSH key の基本では login 自体を、ufw firewall の基本では port を、least privilege userでは、以後サービスをどの user として実行すべきかを説明しています。journalctl -u ssh -f で SSH service の log を監視し、login attempt を確認してください。
VPSの制限は何ですか?
プロセッサは共有され、その共有状況を測定できます。 steal time は、仮想 CPU が実行可能な状態で待機していた時間のうち、ハイパーバイザーが物理コアを別のゲストに割り当てたために実行できなかった時間の割合です。
vmstat 1 5st列は steal time を示します。共有ホストでは、短時間の steal time の急増が発生します。自分のプロセスがアイドル状態なのに 2 桁の値が継続する場合、通常はホストにゲストが過剰に割り当てられています。待機はサーバーの外部で発生しているため、サーバー内のチューニングでは解決できません。Hostinger は CPU steal と CPU credit システムを区別しています。CPU credit ポリシーでは、使用量が低下してクレジットが回復し、回復しきい値に達すると、完全な容量が復元されます。近隣のゲストを疑う前に、契約プランの CPU ポリシーを確認してください。VPS を適切にベンチマークするでは、プロバイダーに問い合わせる前にそれを証明する方法を説明しています。steal は KVM および Xen のゲストで報告されます。コンテナでは、報告値は CPU 統計の公開方法によって異なり、コンテナの CPU スロットリングを測定する指標としては信頼できません。
メモリ容量は固定され、上限に達すると急激に動作します。 メモリを使い果たし、reclaim でも十分に解放できない場合、カーネルの OOM (out of memory) killer がプロセスを選び、SIGKILL で終了させます。
sudo dmesg -T | grep -i "out of memory"一見すると原因不明の障害でも、次の 1 行で説明できることがあります。
Out of memory: Killed process 2412 (mysqld) total-vm:2183104kB, anon-rss:1897224kB, file-rss:0kBSIGKILL ではプロセスが何も書き込む機会を得られないため、通常、アプリケーション自身のログには何も記録されません。原因を確認するにはカーネルログを調べてください。コンテナからそのログにアクセスできるかどうかは、ホストの設定によって異なります。swap を設定する前に、swap がすでに構成されているか確認してください。コンテナ VPS では、ホストのルールも確認してください。
ディスクは高速ですが、共有されています。 ホストの NVMe は高速ですが、割り当てられた領域は、入出力操作をめぐって他のすべてのゲストと競合します。負荷の低い時間帯に実施したベンチマークは、ピーク時の同じマシンの性能を保証するものではありません。
ハードウェアに触れることはできません。 デバイスを接続することはできません。USB デバイスもキャプチャーカードも接続できません。グラフィックカードも、プランで意図的にパススルーされる場合を除き、接続できません。これは別の製品である GPU 付き VPSに該当します。
それは 1 台しかありません。 VPS は単一のマシンです。ホストの障害によってサーバーが停止することがあります。プロバイダーが別の場所へ移行または再起動するかどうかは、サービスによって異なります。また、アプリケーションのフェイルオーバーは別途構成する必要があります。バックアップは利用者の責任なので、VPS からの restic バックアップをセットアップ項目に含めてください。プロバイダーのスナップショットは便利ですが、その保護範囲は保存場所と保持方法によって異なります。独立したバックアップも保持してください。
サポートの範囲はハイパーバイザーまでです。 アンマネージドプランでは、プロバイダーがハードウェア、ネットワーク、仮想化層を正常な状態に維持します。オペレーティングシステム以上の範囲は、セキュリティ更新を含めて利用者の責任です。マネージドホスティングとアンマネージドホスティングでその境界を説明しています。Ubuntu の unattended upgradesを有効にすることが、最低限の有用な対策です。
VPS と混同されやすいものとの比較
virtual machine は、仮想ハードウェアと独自のオペレーティングシステムカーネルを持つゲストです。VPS は、virtual machine またはコンテナとして構築されたレンタルサーバー製品です。通常はパブリックアドレスが割り当てられ、ネットワークも接続済みです。VPC(virtual private cloud)は、大規模なクラウド内にあるプライベートネットワークで、サーバーはその内部で稼働します。つまり、VPC はまったく別の問題に答えるものです。VPS、VM、VPC の違いでは、3 つの用語を正しく区別しています。
dedicated server は、他の顧客のゲストと共有しない、専有の物理マシン全体です。自分で hypervisor をインストールすることもできます。steal time やディスク競合が実際のボトルネックになった場合の選択肢です。VPS と dedicated server の違いでは、選択時の判断ポイントを説明しています。
VPN(virtual private network)は、VPS と 2 文字が共通しているだけで、ほかに共通点はありません。VPN は、マシン間の暗号化トンネルです。VPS はマシンであり、その代表的な用途の 1 つが自分の VPN の運用です。この点から混同が始まります。VPS と VPN の違いでは、この 2 つの用語を整理しています。
自分で所有するハードウェアや、自宅のマシンで動作する Proxmox などの hypervisor を使うと、ハードウェアを管理でき、また多くのサービスから警戒される住宅向け接続を使用することになります。さらに、ホスト自体を所有するため、Proxmox で nested virtualization を有効にすると、ゲスト上で独自の hypervisor を動作させることもできます。ただし、レンタル VPS でもこの機能を明示的にサポートしている必要があります。Proxmox と VPS の違いでは、処理能力、騒音、稼働時間と月額料金を比較しています。
VPS では何を動かしますか?
率直に言えば、VPS のオペレーティングシステム、アーキテクチャ、リソース、プロバイダーの規約に適合するソフトウェアです。一般的な用途には、データベースを備えた Web サイト、プライベート VPN、ゲームサーバー、ステータス監視、メールサーバー、メディアライブラリ、またはノート PC を閉じている間も動作し続けるコーディングエージェントがあります。メールを運用する場合は、まずプロバイダーのポリシーを確認してください。たとえば DigitalOcean では、Droplets の SMTP ポート 25、465、587 がデフォルトでブロックされています。ネットワークサービスはポートで待ち受けるため、次に Linux におけるポートとは何か を学ぶとよいでしょう。用途の詳しい一覧と、それぞれに必要なリソースコストについては、VPS でできることを参照してください。
FAQ
VPSは仮想マシンと同じものですか?
VPSは、オペレーティングシステム、通常はパブリックIPアドレス、料金が付いた状態で、事業者から借りるサーバーです。独自のカーネルを持つ仮想マシンの場合もあれば、ホストのカーネルを共有する OpenVZ VPS のようなコンテナの場合もあります。両者は指す範囲が異なります。「仮想マシン」はハイパーバイザー上で動作するゲスト全般を指し、自分のラップトップ上のものも含みます。一方、「VPS」は購入する製品を指します。VPCはさらに別のもので、サーバーではなく、クラウドプロバイダー内のプライベートネットワークです。
VPSを使うにはLinuxの知識が必要ですか?
少し必要ですが、残りは使いながら学べます。最初に必要なのは、ssh で接続し、cd と ls で移動し、nano でファイルを編集し、apt でソフトウェアをインストールし、journalctl でログを読むことです。アンマネージドVPSでは、更新とファイアウォールを自分で管理することが前提です。そこまで対応したくない場合は、マネージドプランまたはコントロールパネルの料金と管理範囲を比較してください。
VPSのRAMが、プランで約束された容量より少なく表示されるのはなぜですか?
Linuxが報告するのは使用可能メモリであり、プランが表示するのは割り当てられたメモリです。free -h の合計を計算する前に、カーネルイメージと複数の予約済みメモリ領域が差し引かれます。また、2進単位は10進のGBと異なるため、プロバイダーがどの単位を使用しているか確認してください。差を判断する前に、割り当て容量、単位、予約済みメモリを比較します。説明のつかない不足であれば、サポートに問い合わせる価値があります。
steal timeとは何ですか。気にする必要がありますか?
steal timeは、仮想CPUが実行可能な状態だったものの、ハイパーバイザーが物理コアを別のゲストに割り当てたために待機した時間の割合です。vmstat 1 の st 列に表示されます。共有ハードウェアでは、steal timeが短時間急増することがあります。自分の負荷が低い状態で 2 桁の値が継続する場合、通常は物理ホストにゲストが過剰に割り当てられています。自分のサーバー内にあるものではホストのスケジューラーを制御できないため、別のホストまたは別のプランに変更するのが対策です。CPU使用率の上限も性能を制限します。回復方法はプロバイダーのポリシーに従い、必要に応じてCPUクレジットの再構築も行われます。
1台のVPSで複数のサービスを実行できますか?
はい。rootを使える理由はそこにあります。マシンは汎用目的で利用でき、メモリに収まり、各サービスがそれぞれ異なるポートで待ち受ける限り、サービスは共存できます。通常、最初に制約となるのはメモリで、次がディスク速度です。メールは例外的に扱いが難しくなります。配送はメールサーバー自体だけでなく、IPアドレスの評価やプロバイダーの SMTP ポリシーにも左右されるためです。