Maszyna wirtualna (VM) to programowa emulacja całego komputera — z procesorem, pamięcią, dyskiem i kartą sieciową — która udaje sprzęt na tyle dobrze, że uruchomisz na niej pełny system operacyjny. Całość działa pod kontrolą hypervisora, czyli warstwy zarządzającej, która dzieli zasoby fizycznego hosta między wiele odizolowanych guestów. Z punktu widzenia systemu w środku wszystko wygląda jak prawdziwy pecet. W praktyce to plik (a w zasadzie kilka) na dysku hosta.
Jak to działa i do czego służy
Hypervisor występuje w dwóch odmianach. Typ 1 (bare-metal) siedzi bezpośrednio na sprzęcie — to np. VMware ESXi, Microsoft Hyper-V czy KVM na Linuksie, i tak działają serwery w chmurze. Typ 2 uruchamiasz jako zwykłą aplikację na swoim systemie — VirtualBox albo VMware Workstation. Typ 1 jest szybszy i używany w produkcji, typ 2 wygodniejszy do nauki i testów na laptopie.
Po co to komu? Żeby na jednym fizycznym serwerze odpalić kilkanaście niezależnych maszyn (konsolidacja), żeby bezpiecznie przetestować podejrzane oprogramowanie w piaskownicy, postawić środowisko deweloperskie identyczne z produkcją albo zrobić snapshot i cofnąć się do działającego stanu, gdy coś rozwalisz. Izolacja jest tu kluczowa: awaria jednej VM nie kładzie pozostałych.
Przykład z praktyki
Chcesz nauczyć się Linuksa, ale na co dzień siedzisz na Windowsie. Instalujesz VirtualBox, pobierasz obraz ISO Ubuntu i tworzysz nową maszynę z 4 GB RAM oraz 25 GB dysku. Z poziomu skryptu wygląda to tak:
VBoxManage createvm --name "ubuntu-lab" --registerVBoxManage modifyvm "ubuntu-lab" --memory 4096 --cpus 2VBoxManage startvm "ubuntu-lab"
Zrobisz snapshot przed eksperymentem, rozwalisz konfigurację sshd, a potem jednym poleceniem wracasz do stanu sprzed katastrofy. Twój prawdziwy system nawet nie wie, że coś się działo.
Częste błędy i mity
VM to nie kontener. Kontener (Docker) współdzieli jądro hosta i pakuje samą aplikację z zależnościami — startuje w sekundy i waży megabajty. VM ma własne jądro i pełny OS, więc jest cięższa, ale lepiej odizolowana. To różne narzędzia, nie konkurenci do jednego zadania.
Drugi grzech: przydzielanie maszynie wszystkich rdzeni i całego RAM-u hosta. Host też potrzebuje zasobów, a overcommit potrafi zdławić wszystko naraz. I pamiętaj, że bez wsparcia wirtualizacji sprzętowej (VT-x u Intela, AMD-V u AMD) włączonej w BIOS-ie VM albo nie ruszy, albo będzie pełzać.
Pojęcia powiązane
Hypervisor, konteneryzacja (Docker), snapshot, IaaS i chmura (AWS EC2, Azure), wirtualizacja sprzętowa (VT-x, AMD-V), obraz dysku, host i guest.