Впоследнее время в своих статьях я рассказывал читателям о том, как с помощью утилиты Diskpart очищать от данных жесткие диски, как разбивать их на тома, присваивать томам буквенные обозначения накопителей и как форматировать эти накопители. Все это полезные сведения, но надо сказать, что профессионалам в сфере ИТ все чаще приходится работать не только с реальными жесткими дисками, но и с виртуальными. При эксплуатации средств виртуализации Microsoft стандартом является файловый формат виртуального жесткого диска Virtual Hard Disk (VHD).

Виртуальные диски используют не только виртуальные машины: в формате VHD сохраняет свои резервные файлы разработанная специалистами Microsoft функция Complete PC Backup. Более того, VHD — это прекрасный стандарт для упаковки группы файлов и папок в один-единственный файл; получается что-то вроде файла .zip, но, в отличие от файлов этого типа, виртуальные жесткие диски позволяют хранить атрибуты NTFS и разрешения доступа.

Когда новый файловый формат получает широкое распространение, я начинаю повсюду искать средства диагностики и инструменты настройки, которые «понимают» этот файловый формат. Для систем Windows 7 Enterprise, Windows 7 Ultimate и Server 2008 R2 таким инструментом является Diskpart. С его помощью можно создавать VHD «с чистого листа» или анализировать существующие VHD и присваивать им буквенные обозначения накопителей, чтобы программа Windows Explorer могла работать с этими дисками, как если бы они были физическими жесткими дисками.

Начнем изучение Diskpart и VHD с вопроса о том, как создать виртуальный жесткий диск. Если пользоваться программой Diskpart, команда для создания нового VHD в самом простом представлении выглядит следующим образом:

create vdisk file= maximum=

Так, для создания VHD размером 200 Мбайт с именем e:test.vhd нужно ввести с клавиатуры

create vdisk file="e:test.vhd" maximum=200

Эта команда немедленно создаст 200‑мегабайтный файл, структурированный в формате VHD. Обратите внимание на то, что для задания размера VHD используется формула maximum=, а не size=. Этот синтаксис меня очень раздражает: никак не могу совладать с привычкой вводить формулу size=. Но, с другой стороны, надо признать, что у разработчиков было веское основание отдать предпочтение параметру maximum= (я имею в виду расширяемые VHD).

Нет никаких возражений против того, чтобы немедленно выделить для файла test.vhd 200 Мбайт дискового пространства, поскольку 200 Мбайт — это не так уж и много. Но если VHD имеет более внушительные размеры, то, может быть, и не стоит поручать утилите Diskpart немедленно выделять этому диску все запрашиваемое пространство (по причинам, которые я изложу ниже). Вместо того чтобы немедленно выделить все пространство на жестком диске, какое этому VHD может когда-либо потребоваться, стоит выделить на реальном жестком диске лишь небольшое пространство, а увеличивать емкость VHD позднее, когда в этом возникнет необходимость. Чтобы зарезервировать такую возможность, нужно в команде Create Vdisk добавить формулу type=expandable:

create vdisk file=e:test2. vhd maximum=200 type=expandable

Если использовать эту команду вместо первой из приведенных, Diskpart выполнит свою задачу намного быстрее и создаст VHD, который будет первоначально занимать на жестком диске порядка 2500 байт. Теперь смысл команды maximum=200 стал понятнее. Кстати, создавая VHD фиксированного размера, можно указать в команде Create Vdisk параметр type=fixed, хотя я и затрудняюсь представить, по какой причине может возникнуть желание печатать лишние символы.

Так какие же виртуальные диски предпочтительнее — фиксированного размера или расширяемые? На работу с фиксированными VHD может уходить меньше времени, ибо выделение пространства для таких дисков осуществляется только один раз — во время их создания. В случае расширяемых VHD пространство не выделяется «авансом», поэтому, когда возникает потребность в дополнительном пространстве, приложению, записывающему данные в VHD, нередко приходится ждать, пока операционная система не выкроит новое пространство для расширяемого VHD. В результате производительность системы снижается, возможно и до неприемлемого уровня. А теперь предположим, что нам нужно передать по каналам Интернета или записать на USB-накопитель VHD емкостью в 20 Гбайт. Эту задачу гораздо легче выполнить, если наш VHD на 20 Гбайт является расширяемым и пока реально занимает на диске не более 1 Гбайт. С другой стороны, VHD с фиксированным размером будет всегда требовать 20 Гбайт дискового пространства, вне зависимости от того, какое место на диске записанные на нем данные занимают реально. Расширяемые VHD имеют еще одно преимущество: их можно сжать до минимально возможных размеров. Сокращать размеры фиксированных VHD утилита Diskpart не в состоянии.

Марк Минаси (mark@minasi.com) — редактор Windows IT Pro, MCSE и автор книги Mastering Windows Server 2003 (издательство Sybex)