![見出し画像](https://assets.st-note.com/production/uploads/images/73168718/rectangle_large_type_2_5dd11933653007b9b9da6eb0f8f21f82.png?width=800)
仮想マシンについてまとめてみた
42の「仮想マシンの上にLinuxを構築する」課題に取り組んでいる。
この課題をこなせば、独自にLinuxの設定ができるようになるというものだ。
プログラミングをやっている人にとっては基本的なことなのだろうけど、そもそも仮想マシンって何?という状態だったので、仮想マシンについてまとめてみたい。
仮想化とは
そもそも仮想化とは、サーバやストレージ、ネットワーク機器といった「物理的な構成」にしばられずに、「論理的な構成」でシステムを使うことが出来る技術のことを指す。
物理的には 1 台のサーバを、あたかも複数のサーバに見せたり、反対に、複数台のサーバをあたかも 1 台のサーバのように見せるといったことを
可能にする技術だ。
仮想を英語でいうと「Virtual」で、リアルじゃないといったニュアンスを受け取るかもしれないが、本来は「実質的な」という意味が含まれている。
なので「仮想」といったばあいは、「事実上本物のものと同じように扱える」といった意味になる。
コンピューターの文脈の中では、仮想化とは、ソフトウェアによって仮想的なハードウェアを作り、実際のハードウェアと同じ様に扱えるようにする技術を指す。
仮想マシンとは
仮想環境とは、OS(MacならMac OS X)の上でコンピューターのハードウェアを模倣して、ソフトウェア的にコンピューターを作ることだ。
このように作った仮想上のコンピューターのことを仮想マシン(Virtual Machine、またはVM)と呼ぶ。
仮想マシンはいろいろな名前で呼ばれており、「仮想PC」とも「仮想サーバー」とも呼ばれている。
混乱しがちだが、どれも同じものを指している。
この仮想マシンにLinuxをインストールすることになる。
仮想マシンを利用する代表的なアプリケーションはVirtualBoxで、VirtualBoxは仮想環境管理ツールといえる。
仮想マシンの目的
仮想マシンの目的やメリットは以下のようなものがある。
仮想環境は手軽なので、運用面において、処理性能が低くても構わない場合に利用される。
ハードウェアの性能を効率よく運用
1台のハードウェアの上に、仮想的なサーバーを複数台作ることが可能になる。
それにより、サーバーAとサーバーBがあり、サーバーAのCPUとメモリが圧迫されていて、サーバーBに余裕があったばああい、サーバーBの余っているリソースをサーバーAに融通することができる。
また、1 台のハードウェアを複数のハードウェアとして利用することが出来るので、機器の台数が削減できるため消費電力の削減にもつながる。
運用コストが低い
仮想マシンの作成、停止、複製、リソース量の変更、バックアップ、復元、移行などの作業が、ソフトウェア的に行うことができるので、実際にハードウェアを操作するよりも運用にかかる労力がすくなくて済む。
柔軟な拡張性
通常のサーバやネットワーク機器を拡張する場合、一度ハードウェアを停止させてから作業する必要があったが、仮想化の利用により、システムを停止させることなく拡張させることが可能となった。
1つのOSの中で、別のOSが使える
Mac上でアプリのような感覚でWindowsやLinuxを使うことができたり、それらを複数同時に動かすこともできる。
どうやって動いているのか?
仮想マシンを使うと、ハードウェアが持つCPUやメモリといった資源を、いったん抽象化し、各仮想マシンに自由に振り分けることができる。
つまり、物理的に1台のハードウェアの中で、複数のOSを動作させることが可能だ。
これは、以下の技術によって成り立っている。
LVM(logical volume manager)
仮想マシンには「論理パーティショニング」によってなりたっており、そこで重要になるキーワードがLVMだ。
以下のサイトが図つきで詳しい。
仮想マシン方式
仮想マシン方式とは、ハードウェア資源を論理的なリソースとして利用し、作成した論理リソース上に仮想マシンを動作させる方式だ。
仮想マシン方式には2つあり、「ホスト型」と「ハイパーバイザ型」で、Virtual Boxはホスト型、ハイパーバイザ型の代表はMicrosoftのWindows Server Hyper-Vが挙げられる。
「ホスト型」は既存のOS上で、仮想的にOSを起動させる方式で、最も手軽に仮想化を試すことが出来る。
「ホスト型」のメリットは運用中のサーバにも導入できることだ。
物理サーバOSでと仮想サーバOSでの両方を使用可能なので、現在使用しているサーバの使用していない部分を仮想化することで導入することができる手軽さがある。
逆にデメリットは、オーバーヘッドが大きいことが挙げられる。
オーバーヘッドとは、何らかの処理を行うためにかかるシステムやプロトコルの動作に対する負荷のことを指す。
「仮想化オーバーヘッド」という場合、物理サーバー上での動作では発生しないが仮想サーバー上では発生する余分な制御や余分な時間のことだ。
仮想サーバOSでアプリケーションを使用する場合も常に物理サーバOSを経由しているので、結果的に2つのOSを経由し、通常よりも余分な処理が発生する。
「ハイパーバイザ型」は、仮想化用に設計された専用のOSの上に、ホストOSを挟まずに仮想OSを動作させる方式のことだ。
ホストOSが不要なので「ベアメタル方式」と呼ばれることもある
メリットは高い処理能力の持っていることで、物理サーバのOSを必要としない分、ホスト方式と比べて高い処理能力を発揮する。
デメリットはサイジングが困難なことで、1台の物理サーバ上で複数の仮想サーバを稼働させるため、どのくらいのサーバ台数とコストであるかという見積りがしにくい。
UNIXとは?
プログラマーにとって一つの大きな指針である「ハッカーになろう」でも、「UNIX がわからずにインターネットハッカーにはなれません。」と断言されており、MacやWindowsユーザーはUNIX(Linux)を使うために仮想マシンが必要になる。(必要と言ったが、Linux専用のパソコンを買うなど、仮想マシンを使用しない別の方法もある)
UNIXとは何かというと、OSだ。もともとはアメリカAT&Tのベル研究所で開発された。
UNIXは大きく分けて、「System V」系、「BSD」系、「UNIX」系に別れる。
「System V」はベル研究所が作り、「BSD」はカリフォルニア大学バークレー校が開発した。
UNIXはもともと専用のワークステーションで作動するものだったが、個人向けのパソコンで使えるようにしたのがPC-UNIXと呼び、Linuxはその代表といえる。
下記、UNIXの系譜をまとめる。
![](https://assets.st-note.com/img/1645972034416-HVlqXCiFtU.png?width=800)
匿名のコメ・質問はmondまで👍 https://mond.how/ja/hovinci_jp