Виртуальная машина (VM): что это и как работает | Глоссарий FREEHOSTING

Виртуальная машина

Virtual Machine, VM
Виртуальная машина — Виртуальная машина (VM) — программно эмулированный компьютер: своё ядро ОС, BIOS/UEFI, виртуальный CPU, RAM, диск и сеть. Запускается под управлением гипервизора (<a href="/glossary/kvm/">KVM</a>, Hyper-V, ESXi). Изоляция полная: гость не видит хоста и других гостей.

Определение простыми словами

Виртуальная машина — это «компьютер внутри компьютера». Программа-гипервизор делит ресурсы физического сервера (хоста) и создаёт виртуальные «железки», на которые ставится обычная операционная система. Гостевая ОС считает, что у неё своё «настоящее» железо, и не догадывается, что работает поверх другого.

На практике именно так устроены VPS и VDS: одна физическая машина в дата-центре делится гипервизором на десятки виртуальных, и каждая продаётся как «свой сервер».

Сравнение: VM vs контейнер vs физический сервер

Параметр VM (KVM) Контейнер (Docker) Физический сервер
Своё ядро ОС Да Нет (общее с хостом) Да
Стартует за 10–60 секунд ~1 секунду Минуты
Накладные расходы 5–15% ~0% 0%
Изоляция Полная Слабее (общее ядро) Полная
Можно поставить Windows Да Только Windows-контейнеры на Windows-хосте Да

Кейсы использования

  • Тестовый стенд. На ноутбуке поднимается VirtualBox с Linux/Windows для проверки скриптов без риска для основной системы.
  • Изоляция приложений. Нестабильное или подозрительное ПО запускается в VM, чтобы откатиться через снапшот.
  • Хостинг сайтов. Каждый клиент — отдельная VM, упавший сосед не уронит остальных.
  • Live-миграция. VM «на лету» переезжает между физическими хостами без остановки.
  • Negative case. Запускать stateless-микросервис в VM, когда хватает Docker-контейнера, — лишний расход RAM и CPU на ядро гостевой ОС, а старт замедляется в десятки раз.

Технические детали

Создание VM через KVM/QEMU и virt-install на хосте Ubuntu Server:

# 1. установить гипервизор и тулинг
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst bridge-utils
sudo usermod -aG libvirt,kvm $USER

# 2. проверить поддержку аппаратной виртуализации
egrep -c '(vmx|svm)' /proc/cpuinfo
# любое число > 0 — поддержка есть

# 3. создать VM Ubuntu 22.04 из cloud-image
sudo virt-install 
    --name web-01 
    --memory 4096 
    --vcpus 2 
    --disk path=/var/lib/libvirt/images/web-01.qcow2,size=20 
    --location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/' 
    --os-variant ubuntu22.04 
    --network bridge=br0 
    --graphics none --console pty,target_type=serial 
    --extra-args 'console=ttyS0,115200n8 serial'

# 4. список VM и управление
sudo virsh list --all
sudo virsh start  web-01
sudo virsh shutdown web-01
sudo virsh snapshot-create-as web-01 snap-$(date +%F)

Частые вопросы

Чем VM отличается от контейнера?

У VM своё ядро ОС и полная изоляция через гипервизор; стартует медленнее, ест больше RAM. Контейнер использует ядро хоста, стартует за секунду, но изоляция слабее, и нельзя смешивать ОС (Linux-контейнер на Windows только через WSL).

Что такое снапшот VM?

Снапшот — фиксация состояния диска и (опционально) RAM на момент времени. Позволяет откатиться к предыдущему состоянию за секунды. Не заменяет полноценный backup, потому что хранится на том же сторадже.

Можно ли запустить VM внутри VM?

Да, это называется nested virtualization. На современных Intel/AMD CPU поддерживается; используется в CI/CD, при разработке гипервизоров и в облачных лабораториях. Производительность вложенной VM ниже на 10–30%.