VHD — формат виртуального диска: что это и как использовать | Глоссарий FREEHOSTING

VHD

Virtual Hard Disk
VHD — VHD (Virtual Hard Disk) — формат файла виртуального жёсткого диска, разработанный Microsoft. Используется в Hyper-V и Virtual PC для хранения образа диска виртуальной машины в одном файле с расширением .vhd.

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

VHD — это файл-контейнер, который эмулирует физический жёсткий диск внутри виртуальной машины. Операционная система внутри VM видит его как обычный диск: можно разбить на разделы, отформатировать, установить ОС. Снаружи это просто файл с расширением .vhd на хосте.

Формат разработан Microsoft и впервые появился в продукте Connectix Virtual PC в 2003 году, затем перешёл к Microsoft. Максимальный размер диска в формате VHD ограничен 2 ТБ. Для преодоления этого ограничения Microsoft выпустила расширенный формат VHDX, поддерживающий до 64 ТБ. VHD поддерживается Hyper-V, Azure, VirtualBox и рядом других гипервизоров.

Сравнение форматов виртуальных дисков

Формат Макс. размер Гипервизор Особенности
VHD 2 ТБ Hyper-V, VirtualBox Широкая совместимость, устаревший лимит размера
VHDX 64 ТБ Hyper-V (Win8+) Защита от повреждений, большие блоки данных
VMDK 62 ТБ VMware ESXi, VirtualBox Поддержка split-образов, широко используется в VMware
QCOW2 ~2 ЭБ (теор.) QEMU/KVM Снапшоты, сжатие, шифрование, copy-on-write

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

  • Виртуальные машины Hyper-V: системный диск ВМ под управлением Windows Server хранится как .vhd-файл на томе хоста.
  • Azure классические ВМ: до перехода на управляемые диски Azure хранил образы ВМ в формате VHD в Blob Storage.
  • Резервное копирование: создание полного снимка системного раздела в один файл для последующего восстановления через wbadmin или Backup and Restore.
  • Переносимость: копирование ВМ между хостами — достаточно скопировать .vhd и пересоздать конфигурацию ВМ.
  • Разработка и тестирование: быстрый откат к снапшоту диска без переустановки ОС.

Негативный пример: использовать VHD для новых дисков размером более 2 ТБ на Hyper-V — файл создастся, но запись сверх лимита вызовет ошибку. Для таких объёмов необходим VHDX.

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

VHD существует в трёх вариантах: Fixed (фиксированный размер, занимает место сразу), Dynamic (динамически расширяемый, растёт по мере заполнения), Differencing (разностный, хранит только изменения относительно родительского VHD). Структура файла описана в открытой спецификации Microsoft (VHD Image Format Specification).

Работа с VHD в Windows через PowerShell и diskpart:

# Создать новый динамический VHD на 50 ГБ
New-VHD -Path C:disksmyvm.vhd -SizeBytes 50GB -Dynamic

# Подключить VHD как локальный диск
Mount-VHD -Path C:disksmyvm.vhd

# Отключить VHD
Dismount-VHD -Path C:disksmyvm.vhd

# Конвертировать VHD в VHDX (Hyper-V PowerShell)
Convert-VHD -Path C:disksmyvm.vhd -DestinationPath C:disksmyvm.vhdx

На Linux VHD можно смонтировать через qemu-nbd:

modprobe nbd
qemu-nbd --connect=/dev/nbd0 /path/to/disk.vhd
mount /dev/nbd0p1 /mnt/vhd

# Отмонтировать
umount /mnt/vhd
qemu-nbd --disconnect /dev/nbd0

Для конвертации VHD в QCOW2 (например, для переноса на KVM):

qemu-img convert -f vpc -O qcow2 disk.vhd disk.qcow2

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

В чём разница между VHD и VHDX?

VHD ограничен 2 ТБ и не имеет защиты от повреждений при сбое питания. VHDX поддерживает до 64 ТБ, использует большие блоки (по умолчанию 32 МБ против 2 МБ) и защищает метаданные через журналирование. VHDX доступен начиная с Hyper-V на Windows Server 2012.

Можно ли использовать VHD на Linux без Hyper-V?

Да. Утилита qemu-nbd из пакета qemu-utils позволяет подключить .vhd-файл как блочное устройство и смонтировать разделы. Также qemu-img convert конвертирует VHD в QCOW2 или RAW для использования в KVM/QEMU.

Что такое Differencing VHD и когда его применять?

Differencing VHD хранит только изменения относительно родительского образа. Это удобно для тестирования: родительский диск с чистой ОС остаётся неизменным, все правки пишутся в дочерний файл. Для отката достаточно удалить дочерний VHD и создать новый.

Как конвертировать VHD в VMDK для переноса на VMware?

Используйте qemu-img: qemu-img convert -f vpc -O vmdk disk.vhd disk.vmdk. Либо воспользуйтесь утилитой VMware vCenter Converter, которая автоматизирует весь процесс конвертации и настройки драйверов.