Последние версии VirtualBox поддерживают несколько форматов виртуальных дисков, но они забыли предоставить сравнение между ними.
Теперь меня интересует рекомендация или сравнение, которое учитывает следующее:
VirtualBox имеет
Источник: Oracle® VM VirtualBox® User Manual » Chapter 5. Virtual Storage » 5.2. Disk Image Files (VDI, VMDK, VHD, HDD)
- уметь использовать динамическое изменение размеров
VDI, VMDK и VHD поддерживают динамически выделяемое хранилище. VMDK имеет дополнительную возможность разбиения файла хранилища на файлы размером менее 2 ГБ каждый, что полезно, если ваша файловая система имеет ограничение на малый размер файла.
HDD, QCOW и QED должны быть динамически выделены, если они созданы в VirtualBox.
- возможность создания моментальных снимков
VirtualBox поддерживает создание моментальных снимков всех шести форматов.
- иметь возможность перенести мою виртуальную машину на другую ОС или даже на другое бесплатное решение для виртуализации с минимальными усилиями (возможно, что-то, что будет отлично работать на Ubuntu).
VDI - это родной формат VirtualBox. Другие программы виртуализации обычно не поддерживают VDI, но конвертировать из VDI в другой формат довольно просто, особенно с помощью qemu-img convert
.
VMDK разработан компанией VMWare и для нее, но VirtualBox и QEMU (другое распространенное программное обеспечение для виртуализации) также поддерживают его. Этот формат может быть лучшим выбором для вас, поскольку вы хотите получить широкую совместимость с другими программами виртуализации.
VHD - это родной формат Microsoft Virtual PC. Windows Server 2012 представил VHDX в качестве преемника VHD, но VirtualBox не поддерживает VHDX.
HDD - это формат для Parallels. Parallels специализируется на виртуализации для macOS. *Это, вероятно, вам не подходит, особенно учитывая, что VirtualBox поддерживает только старую версию формата HDD.
QCOW - это старая оригинальная версия формата qcow. Он был заменен на qcow2, который VirtualBox не поддерживает.
QED был заброшенным усовершенствованием qcow2. QEMU не рекомендует использовать QED.
- производительность
Каждый из форматов может иметь свои нюансы производительности из-за того, как блочное хранилище абстрагируется форматом, но я не нашел ни одного бенчмарка, сравнивающего форматы, поддерживаемые VirtualBox.
Есть и более важные факторы, влияющие на производительность, такие как:
Я всегда использую VDI, поскольку это родной формат VirtualBox; однако использование VMDK (формат VMWare) повысит совместимость с другим программным обеспечением для виртуальных машин.
VirtualBox прекрасно работает на Ubuntu, поэтому если целью является совместимость Windows/Ubuntu, VDI будет вполне оправданным выбором.
Оба формата будут соответствовать вашим требованиям.
Что касается двух других форматов, VHD - это формат, разработанный Microsoft, а HDD - формат, разработанный Apple; они оба лицензированы по собственному усмотрению, что ограничивает кросс-платформенную поддержку; я бы их не рекомендовал.
Mpack объясняет ключевое различие в производительности между VHD и VDI здесь:
Недавно изучив формат VHD, я ожидал, что будет по крайней мере небольшая разница в пользу VDI, наиболее заметная, когда вы сравниваете подобное с подобным, т.е. оптимизированный VDI против оптимизированного VHD. Причина в том, что динамический формат VHD имеет эти "растровые" сектора, разбросанные по всему диску. Каждый раз, когда вы изменяете сектор внутри блока, эти растровые блоки должны быть обновлены и записаны, что влечет за собой дополнительные запросы, чтения и записи. Эти растровые сектора также приходится пропускать при чтении последовательных кластеров из образа диска - еще больше обращений. Формат VDI не имеет таких накладных расходов, особенно если VDI был оптимизирован (блоки на виртуальном диске отсортированы в порядке LBA).
Все мои комментарии относятся к динамическому формату VHD и динамическому VDI. Тесты производительности на виртуальных дисках фиксированного размера бессмысленны, поскольку оба формата одинаковы (просто образ диска), у них просто разные заголовки.
Файлы образов дисков находятся на хост-системе и воспринимаются гостевыми системами как жесткие диски определенной геометрии. Когда гостевая операционная система читает с жесткого диска или записывает на него данные, VirtualBox перенаправляет запрос на файл образа.
Как и физический диск, виртуальный диск имеет размер (емкость), который должен быть указан при создании файла образа. Однако, в отличие от физического диска, VirtualBox позволяет расширить файл образа после создания, даже если в нем уже есть данные; VirtualBox поддерживает четыре варианта файлов образов дисков:
VDI: Обычно VirtualBox использует свой собственный формат контейнера для гостевых жестких дисков - файлы Virtual Disk Image (VDI). В частности, этот формат будет использоваться при создании новой виртуальной машины с новым диском.
VMDK:VirtualBox также полностью поддерживает популярный и открытый формат контейнера VMDK, который используется многими другими продуктами виртуализации, в частности, компанией VMware.[25].
VHD:VirtualBox также полностью поддерживает формат VHD, используемый Microsoft.
Также поддерживаются файлы образов Parallels версии 2 (формат HDD).[26] Из-за отсутствия документации по формату, более новые форматы (3 и 4) не поддерживаются. Однако вы можете конвертировать такие файлы образов в формат версии 2 с помощью инструментов, предоставляемых Parallels.
Я не знаю, позволит ли использование vmdk прозрачно запускать виртуальную машину, созданную в VirtualBox, в VMware или нет. Возможно. Однако более универсальным вариантом может быть использование функции VirtualBox File/Export для создания файла "Open Virtualization Appliance" .ova, который затем можно импортировать в VMware. При таком подходе вы можете переносить на любую систему виртуализации, которая поддерживает .ova, не заботясь о том, какой формат образа диска вы используете в VirtualBox.
Если вам нужно экспортировать данные с одной и той же виртуальной машины через регулярные промежутки времени, например, каждый день, это может стать проблемой. Но если вы переходите на другую технологию только время от времени, все должно быть в порядке.
Если у вас уже есть файл .vdi, вы можете проверить, работает ли это, не создавая новую виртуальную машину. Экспортируйте его в .ova, а затем попробуйте импортировать с помощью vmware.
Это также зависит от того, как вы планируете использовать виртуальный диск. Не каждой виртуальной машине нужен один раздел на одном диске.
VDI, кажется, имеет больше возможностей (при использовании с VirtualBox), но как только вы убираете VirtualBox из картины, поддержка VDI становится несколько шаткой (по состоянию на конец 2014 года).
Например, мои решения должны иметь максимальную кроссплатформенную поддержку. Монтировать VDI (например, устройство loopback) на linux или Windows 7 сложнее и глючнее, чем можно было бы ожидать. Почти как будто VDI имеет слишком много функций, что затрудняет создание полностью соответствующих утилит, которые могут работать с ним.
VMDK просто менее безболезненный IMHO, когда вы хотите, чтобы он работал с любой виртуальной машиной на любой рабочей станции, когда вы хотите клонировать его 3 раза на другие системы в сети одновременно, и когда вы хотите открыть его без запуска экземпляра виртуальной машины.
Хотя я использую VirtualBox 90% времени, те несколько случаев, когда мои диски становятся недоступными в определенных рабочих процессах, заставили меня отдать предпочтение VMDK для подключаемых/общих файловых систем.
Для меня хорошей причиной для использования vmdk является то, что Virtualbox (по крайней мере, до версии 4.1), использующий формат VDI, имеет тенденцию со временем заполнять все выделенное дисковое пространство, даже если внутренний виртуальный диск используется гораздо меньше. С Virtualbox, использующим vmdk-диски, эта проблема кажется менее серьезной.
Но я говорю о многолетнем времени работы. Возможно, с этой проблемой сталкивается не так много людей.
Похоже, что использование VDI позволяет обрезать дисковый файл до его реального размера https://superuser.com/questions/646559/virtualbox-and-ssds-trim-command-support
VDI гораздо легче уплотнить, если ВМ становится слишком большой.
Я только что перенес необработанный VMDK, который был отображен на раздел Transcend SSD370 128 ГБ на Samsung Pro 850 512 ГБ.
Очевидно, что VMDK намного быстрее, чем VDI. Я не понимаю почему, может я где-то допустил ошибку.
Я скопировал VMDK через Virtual Media Manager на 850. Один раз как VDI, другой раз как VMDK.
Затем я запустил hdparm -tT --direct /dev/sda
на образах. Для каждого из "запусков" я заменил "Machine -> Settings -> Storage -> Controller SATA -> ImageFile.xxx". Необработанный раздел на SSD370 был определен файлом VMDK, так что это не совсем образ.
Вот результаты:
################################################################################################
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)
System information as of Thu Sep 21 17:02:51 CEST 2017
System load: 1.96 Processes: 201
Usage of /: 83.2% of 43.88GB Users logged in: 0
Memory usage: 4% IP address for eth0:
Swap usage: 0% IP address for docker0: 172.17.0.1
################################################################################################
======================================================================================
V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================
Timing O_DIRECT cached reads: 1024 MB in 2.00 seconds = 511.61 MB/sec <---
Timing O_DIRECT disk reads: 1134 MB in 3.00 seconds = 377.88 MB/sec <---
Timing O_DIRECT cached reads: 1042 MB in 2.00 seconds = 520.82 MB/sec <---
Timing O_DIRECT disk reads: 1162 MB in 3.00 seconds = 387.27 MB/sec <---
---
Timing O_DIRECT cached reads: 816 MB in 2.00 seconds = 407.55 MB/sec
Timing O_DIRECT disk reads: 1020 MB in 3.01 seconds = 339.43 MB/sec <---
======================================================================================
V M D K --- on Samsung Pro 850 515GB
======================================================================================
Timing O_DIRECT cached reads: 836 MB in 2.00 seconds = 417.21 MB/sec <---
Timing O_DIRECT disk reads: 782 MB in 3.01 seconds = 260.21 MB/sec
Timing O_DIRECT cached reads: 834 MB in 2.00 seconds = 416.08 MB/sec
Timing O_DIRECT disk reads: 786 MB in 3.00 seconds = 261.71 MB/sec
---
Timing O_DIRECT cached reads: 826 MB in 2.00 seconds = 412.75 MB/sec <---
Timing O_DIRECT disk reads: 774 MB in 3.00 seconds = 257.79 MB/sec
Timing O_DIRECT cached reads: 828 MB in 2.00 seconds = 413.88 MB/sec <---
Timing O_DIRECT disk reads: 774 MB in 3.00 seconds = 257.83 MB/sec
---
Timing O_DIRECT cached reads: 842 MB in 2.00 seconds = 420.76 MB/sec <---
Timing O_DIRECT disk reads: 770 MB in 3.00 seconds = 256.56 MB/sec
======================================================================================
V D I --- on Samsung Pro 850 515GB
======================================================================================
Timing O_DIRECT cached reads: 470 MB in 2.01 seconds = 234.21 MB/sec <---
Timing O_DIRECT disk reads: 766 MB in 3.00 seconds = 254.94 MB/sec
Timing O_DIRECT cached reads: 494 MB in 2.00 seconds = 246.45 MB/sec <---
Timing O_DIRECT disk reads: 754 MB in 3.00 seconds = 250.92 MB/sec
Timing O_DIRECT cached reads: 490 MB in 2.00 seconds = 244.46 MB/sec <---
Timing O_DIRECT disk reads: 764 MB in 3.01 seconds = 254.03 MB/sec
################################################################################################
# Data above comes from here
################################################################################################
======================================================================================
V M D K --- on Samsung Pro 850 515GB
======================================================================================
System information as of Thu Sep 21 17:02:51 CEST 2017
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 836 MB in 2.00 seconds = 417.21 MB/sec <======
Timing O_DIRECT disk reads: 782 MB in 3.01 seconds = 260.21 MB/sec <======
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 21080 MB in 2.00 seconds = 10554.40 MB/sec
Timing buffered disk reads: 784 MB in 3.00 seconds = 260.92 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 834 MB in 2.00 seconds = 416.08 MB/sec <======
Timing O_DIRECT disk reads: 786 MB in 3.00 seconds = 261.71 MB/sec <======
======================================================================================
V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================
System information as of Thu Sep 21 17:00:47 CEST 2017
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 1024 MB in 2.00 seconds = 511.61 MB/sec <======
Timing O_DIRECT disk reads: 1134 MB in 3.00 seconds = 377.88 MB/sec <======
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 21182 MB in 2.00 seconds = 10603.52 MB/sec
Timing buffered disk reads: 1060 MB in 3.00 seconds = 352.91 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 1042 MB in 2.00 seconds = 520.82 MB/sec <======
Timing O_DIRECT disk reads: 1162 MB in 3.00 seconds = 387.27 MB/sec <======
======================================================================================
V M D K --- on Samsung Pro 850 515GB
======================================================================================
System information as of Thu Sep 21 16:58:12 CEST 2017
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 826 MB in 2.00 seconds = 412.75 MB/sec <======
Timing O_DIRECT disk reads: 774 MB in 3.00 seconds = 257.79 MB/sec <======
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 22082 MB in 2.00 seconds = 11055.78 MB/sec
Timing buffered disk reads: 788 MB in 3.01 seconds = 262.11 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 828 MB in 2.00 seconds = 413.88 MB/sec <======
Timing O_DIRECT disk reads: 774 MB in 3.00 seconds = 257.83 MB/sec <======
======================================================================================
V D I --- on Samsung Pro 850 515GB
======================================================================================
System information as of Thu Sep 21 16:55:24 CEST 2017
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 21468 MB in 2.00 seconds = 10747.37 MB/sec
Timing buffered disk reads: 662 MB in 3.01 seconds = 220.12 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 470 MB in 2.01 seconds = 234.21 MB/sec <======
Timing O_DIRECT disk reads: 766 MB in 3.00 seconds = 254.94 MB/sec <======
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 494 MB in 2.00 seconds = 246.45 MB/sec <======
Timing O_DIRECT disk reads: 754 MB in 3.00 seconds = 250.92 MB/sec <======
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 20872 MB in 2.00 seconds = 10448.98 MB/sec
Timing buffered disk reads: 694 MB in 3.01 seconds = 230.78 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 490 MB in 2.00 seconds = 244.46 MB/sec <======
Timing O_DIRECT disk reads: 764 MB in 3.01 seconds = 254.03 MB/sec <======
======================================================================================
V M D K --- on Samsung Pro 850 515GB
======================================================================================
System information as of Thu Sep 21 16:52:32 CEST 2017
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 20872 MB in 2.00 seconds = 10448.90 MB/sec
Timing buffered disk reads: 764 MB in 3.01 seconds = 254.11 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 842 MB in 2.00 seconds = 420.76 MB/sec <======
Timing O_DIRECT disk reads: 770 MB in 3.00 seconds = 256.56 MB/sec <======
======================================================================================
V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================
System information as of Thu Sep 21 16:29:55 CEST 2017
user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 22034 MB in 2.00 seconds = 11029.82 MB/sec
Timing buffered disk reads: 990 MB in 3.00 seconds = 329.68 MB/sec
user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 816 MB in 2.00 seconds = 407.55 MB/sec <======
Timing O_DIRECT disk reads: 1020 MB in 3.01 seconds = 339.43 MB/sec <======
Я не очень понимаю, как это интерпретировать, может быть, кто-то захочет оставить комментарий по этому поводу. Тогда я выбрал VMDK.
Давным-давно я провел один тест, конвертировал динамический vdi в динамический vhd, чтобы проверить скорость и размер файлов.
Помните, это была неизменяемая гостевая чистая установка Windows с некоторыми приложениями, помните, что для теста я конвертировал один формат в другой, так что оба должны были иметь точно такой же образ, как при клонировании.
Для диска размером 64GiB размер файла VDI был около 18GiB, а размер файла VHD около 22GiB.
Я помню, что видел эти две вещи:
Это было давно, и тест проводился на HDD, но я убедился, что оба файла были дефрагментированы и находились рядом друг с другом на быстрой части диска.
Надеюсь, кто-то сможет провести реальные тесты на SSD, но мне кажется, что VHD быстрее (и больше), чем VDI.
Небольшой совет: VHD/VHDX можно сжать непосредственно на любой Windows 7 и выше с помощью инструмента командной строки DiskPart, для VDI нужен внешний инструмент CloneVDI.
К сожалению, я не тестировал VMDK, я не знал, как его сжать без изменения его UUID (UUID диска), помните, что командные инструменты VBOX всегда изменяют его на каждом клоне, независимо от того, какой формат вы используете.