← Назад к вопросам

Что такое виртуальная машина?

1.3 Junior🔥 61 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виртуальная машина (Virtual Machine)

Что это такое?

Виртуальная машина (VM) — это программное обеспечение, которое эмулирует (имитирует) работу полноценного компьютера с собственным процессором, памятью, жёстким диском и операционной системой. Виртуальная машина работает внутри хоста (основного компьютера) и позволяет запускать одну или несколько операционных систем на одном физическом оборудовании.

ВМ создаёт полную изоляцию: каждая виртуальная машина работает независимо от других и от основной ОС.

Типы виртуализации

1. Полная виртуализация (Full Virtualization) Гипервизор полностью эмулирует аппаратное обеспечение:

┌─────────────────────────────────┐
│      Хостовая ОС (Windows)      │
│  ┌──────────┬──────────┬──────┐ │
│  │   VM 1   │   VM 2   │ VM 3 │ │
│  │ Ubuntu   │ CentOS   │Windows││
│  │  (Linux) │  (Linux) │      │ │
│  └──────────┴──────────┴──────┘ │
│         (Гипервизор)            │
└─────────────────────────────────┘

2. Паравиртуализация (Paravirtualization) ОС в ВМ знает о гипервизоре и взаимодействует с ним напрямую:

┌─────────────────────────────────┐
│      Хостовая ОС (Linux)        │
│  ┌──────────────────────────┐   │
│  │   KVM / Xen гипервизор  │   │
│  │  (паравиртуализованные)  │   │
│  │  VMs с модифицированным  │   │
│  │         ядром            │   │
│  └──────────────────────────┘   │
└─────────────────────────────────┘

Популярные гипервизоры

Type 1 (Bare Metal) — запускаются напрямую на оборудовании:

  • ESXi (VMware) — для корпоративных систем
  • Hyper-V (Microsoft) — встроена в Windows Server
  • KVM (Kernel-based Virtual Machine) — встроена в Linux
  • Xen — открытый исходный код

Type 2 (Hosted) — работают внутри операционной системы:

  • VirtualBox (Oracle) — бесплатная, для всех ОС
  • VMware Workstation / Fusion — коммерческая
  • Parallels (macOS) — для Mac
  • QEMU (Quick Emulator) — открытый исходный код

Пример: VirtualBox

На Windows/Mac/Linux можно установить виртуальную машину:

# Создание новой VM через командную строку (VirtualBox)
VBoxManage createvm --name "Ubuntu" --ostype Ubuntu_64

# Выделение ресурсов
VBoxManage modifyvm "Ubuntu" --cpus 4 --memory 4096

# Создание жёсткого диска
VBoxManage createmedium disk --filename "Ubuntu.vdi" --size 50000

# Подключение диска к VM
VBoxManage storageattach "Ubuntu" --storagectl "SATA" --port 0 --device 0 --type hdd --medium "Ubuntu.vdi"

# Запуск VM
VBoxManage startvm "Ubuntu" --type headless

Python и VM: управление через libvirt

import libvirt

# Подключение к локальному KVM
conn = libvirt.open('qemu:///system')

# Получение списка виртуальных машин
dom_ids = conn.listDomainsID()
for dom_id in dom_ids:
    dom = conn.lookupByID(dom_id)
    print(f"VM: {dom.name()}, Статус: {'running' if dom.isActive() else 'stopped'}")

# Запуск VM
dom = conn.lookupByName("my-ubuntu-vm")
if not dom.isActive():
    dom.create()
    print("VM запущена")

# Остановка VM
if dom.isActive():
    dom.shutdown()
    print("VM остановлена")

conn.close()

Контейнеры vs Виртуальные машины

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

┌─────────────────────┐
│   Приложение        │
│  ┌────────────────┐ │
│  │  Гостевая ОС  │ │
│  │   (Ubuntu)     │ │
│  └────────────────┘ │
│  ┌────────────────┐ │
│  │ Гипервизор     │ │
│  └────────────────┘ │
└─────────────────────┘
 Хостовая ОС + оборудование

Контейнер (Docker):

┌─────────────────┐
│  Приложение     │
│  + библиотеки   │
│  + зависимости  │
└─────────────────┘
  Ядро хостовой ОС
КритерийVMКонтейнер
Размер1-10 ГБ10-100 МБ
Время запускаМинутыСекунды
ИзоляцияПолнаяЧастичная (делят ядро)
Производительность~95% хоста~99% хоста
Использование ресурсовВысокоеНизкое

Практический пример: Python на VM

# На хостовой машине
import subprocess
import time

# Запуск VM с Ubuntu
vm_name = "dev-environment"
subprocess.run(["VBoxManage", "startvm", vm_name])

# Ждём загрузки
time.sleep(10)

# SSH подключение к VM
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='user', password='pass')

# Запуск Python скрипта в VM
stdin, stdout, stderr = ssh.exec_command('python3 /home/user/script.py')
print(stdout.read().decode())

ssh.close()

Создание собственного образа VM

# Загрузка базового образа Linux
wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img

# Создание VM из образа
cp focal-server-cloudimg-amd64.img my-vm.qcow2

# Запуск VM через QEMU
qemu-system-x86_64 -m 2048 -smp 2 -hda my-vm.qcow2 -net nic,model=virtio -net user,hostfwd=tcp::2222-:22

# SSH подключение через проброс портов
ssh -p 2222 ubuntu@localhost

Снимки (Snapshots)

import libvirt

conn = libvirt.open('qemu:///system')
dom = conn.lookupByName("my-vm")

# Создание снимка состояния VM
xml_config = """
<domainsnapshot>
    <name>backup-before-upgrade</name>
    <description>Снимок перед обновлением</description>
</domainsnapshot>
"""
dom.snapshotCreateXML(xml_config, 0)

# Список снимков
for snap in dom.listAllSnapshots():
    print(f"Снимок: {snap.getName()}")

# Восстановление из снимка
dom.snapshotRevert(snap, 0)
print("Восстановлено из снимка")

Когда использовать VM?

Используйте VM для:

  • Полной изоляции окружений
  • Запуска разных ОС на одном оборудовании
  • Разработки (безопасное тестирование)
  • Серверов с разными требованиями
  • Обучения Linux/системному администрированию

Не используйте VM для:

  • Микросервисной архитектуры (используйте контейнеры)
  • Быстрого масштабирования (контейнеры лучше)
  • Минимизации ресурсов (контейнеры эффективнее)

Облачные VM

Вместо локальной VM, можно использовать облачные сервисы:

# Запуск VM на AWS
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --instance-type t2.micro

# Запуск VM на Google Cloud
gcloud compute instances create my-instance --image-family ubuntu-2004-lts --image-project ubuntu-os-cloud

# Запуск VM на Azure
az vm create --resource-group myResourceGroup --name myVM --image UbuntuLTS

Заключение

Виртуальная машина — это мощный инструмент для создания изолированных вычислительных окружений. Хотя в современной разработке контейнеры часто предпочтительнее для микросервисов, VM остаются критически важными для полной виртуализации, тестирования разных ОС и облачных вычислений. Python разработчик должен понимать, как работают VM, как управлять ими программно и когда их использовать вместо альтернатив.