Определение простыми словами
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, которая автоматизирует весь процесс конвертации и настройки драйверов.