Алекс Ангелопулос (aka@mvps.org) — старший ИТ-консультант, специализируется на технологиях автоматизации административных задач

.

Без моментальных снимков и связанных клонов

Начнем с важной оговорки. Не следует применять описанные в статье методы, если в VMware Workstation используются моментальные снимки или связанные клоны. Виртуальные машины, запускаемые с моментального снимка или связанного клона, выполняются с виртуальных дисков, которые являются оверлеями исходной виртуальной машины. Если попытаться дефрагментировать исходную виртуальную машину или клон, уровень сложности значительно повышается, а производительность неизбежно падает. Оверлеи уже уменьшают размер пространства, занимаемого виртуальными дисками; скорее всего, место, использованное для клонированного диска, увеличится.

Обратите внимание, что методы, описанные в статье, вполне применимы для очистки полных клонов (full clone) VMware. Полный клон создается из точной копии первоначальной исходной виртуальной машины, но не привязан к ней. Если нет уверенности, является ли определенная машина VMware клоном, моментальным снимком или исходной машиной, то посмотрите сведения о машине в VMware Workstation. У клонов и моментальных снимков явно указан источник клона или моментального снимка, как показано на рисунке 1. Машина на рисунке 2 не связана и просто показывает версию VMware Workstation.

 

Детали описания клонированной виртуальной машины
Рисунок 1. Детали описания клонированной виртуальной машины

 

Детали описания несвязанной виртуальной машины
Рисунок 2. Детали описания несвязанной виртуальной машины

Определение необходимости дефрагментации виртуальных дисков

Проблемы производительности и размера виртуального диска, вызванные фрагментацией, зависят от многих факторов. Я пользуюсь двумя простыми практическими правилами.

Во-первых, если наблюдается значительное снижение производительности виртуальной машины, то машину, вероятно, следует почистить. Во-вторых, я сравниваю размер файла Virtual Machine Disk Format (VMDK), в котором содержится диск, с данными об использованном пространстве самой виртуальной машины. Это сравнение неправомерно, если пространство дисков VMware выделено заранее. Дефрагментация полезна и для дисков фиксированного размера, но размер VMDK-файла всегда будет максимально возможным для диска виртуальной машины.

Чтобы напрямую определить пространство, используемое файлом, щелкните правой кнопкой мыши на виртуальной машине в списке VMware Favorites и выберите пункт Settings из контекстного меню. В открывшемся окне Virtual Machine Settings (как показано на приведенном экране) выберите жесткий диск в столбце Device слева (на вкладке Hardware). Затем обратитесь к области Capacity в правой половине окна. Значение Current size показывает текущий размер файла на диске. Далее загрузите гостевую операционную систему и посмотрите ее данные о размере используемого пространства. Если гостевая операционная система сообщает о гораздо меньшем используемом пространстве, чем указано для VMDK-файла, то рекомендуется дефрагментировать и сжать диск.

 

Настройки виртуальной машины
Экран. Настройки виртуальной машины

Шаг 1. Очистка из гостевой операционной системы

Первый шаг — дефрагментация диска из гостевой операционной системы. Это удобный момент для общего обслуживания, в том числе обновления операционной системы и приложений. После обновления немедленно увеличиваются дефрагментация и используемое пространство. После дефрагментации закройте виртуальную машину.

Шаг 2. Используйте инструменты VMware для дефрагментации и сжатия

В VMware Workstation предусмотрены функции для подключения и сжатия виртуального диска, доступные при нажатии кнопки Utilities в окне Virtual Machine Settings, но они редко существенно влияют на размер виртуального диска. Например, у меня был VMDK-файл Windows 2000 Professional с большим излишком пространства. Гостевая операционная система Windows 2000 сообщила, что использует только 2,31 Гбайт, но размер файла на диске был 6,6 Гбайт. В результате применения инструментов графического интерфейса уменьшить требования к пространству на диске не удалось. Вместо этого я рекомендую использовать загружаемые средства командной строки VMware, vmware-vdiskmanager и vmware-mount, для радикального сжатия дисков.

Сначала получите инструменты с сайта VMware. Необходимо зарегистрироваться, а затем выполнить поиск инструмента для загрузки. В среде Windows 7 с VMware Workstation 7.1 я использовал комплект VMware Virtual Disk Development Kit (VDDK), в состав которого входят оба инструмента. Установите VDDK и обязательно запомните, в какую папку. В 32-разрядных системах Windows это обычно папка с именем вроде C:\program files\vmware\vmware virtual disk development kit\bin; в 64-разрядных системах Windows — C:\program files (x86)\vmware\vmware virtual disk development kit\bin. Теперь все готово к началу работы.

  1. Откройте командную строку из учетной записи с административными правами
  2. Введите команду
pushd

чтобы сделать папку VDDK текущим каталогом (исходный текст фрагмента A в листинге). Таким образом, инструменты VMware (а самое главное, вспомогательные DLL-библиотеки) находятся в начале пути поиска команды. Владельцам 64-разрядной Windows настоятельно рекомендуется выполнить этот шаг, как описано, даже если вам известен более удобный способ. Если поиск выполняется в первую очередь по другим путям, часто происходят сбои инструмента подключения виртуальных дисков VMware, vmware-mount.

3. Дефрагментируйте файл виртуального диска с помощью инструментария VMware. В командной строке выполните команду

vmware-vdiskmanager

с параметром -d (дефрагментация) и указанием полного пути к файлу виртуального диска. Исходный текст фрагмента B в листинге показывает эту команду для файла VMDK с местоположением E:\win2k pro\w2kprodisk1.vmdk.

4. На данном этапе нужно сопоставить файл как диск с использованием команды vmware-mount. Необходимо указать неиспользованный символ диска и путь к файлу VMDK. Исходный текст фрагмента C в листинге сопоставляет диск Z файлу W2kProDisk1.vmdk.

5. Чтобы подготовить диск к сжатию, используйте команду

vmware-vdiskmanager

с параметром -p (подготовить) и символом диска, к которому подключен файл VMDK, а не путем к файлу VMDK. Неправильный выбор символа диска — вторая причина проблем при первой попытке сжатия диска; это единственный шаг, который зависит от символа диска. Исходный текст фрагмента D в листинге представляет верную процедуру для файла, подключенного как диск Z. На экран выводится постоянно обновляемый индикатор очистки диска (в процентах). Очищается не диск в целом, а пустое место в файле.

6. Затем отключите диск с помощью команды

vmware-mount -d

как показано в исходном тексте фрагмента E листинга. В этой команде параметр «d" означает "снять».

7. Наконец сожмите файл VMDK с использованием команды

vmware-vdiskmanager -k

как показано в исходном тексте фрагмента F в листинге. Здесь «k" — мнемоническое сокращение слова "shrink» (сократить); другой вариант — буква «s".

На этом операция завершается. Эффективность данного метода может быть чрезвычайно высокой. Упомянутый ранее файл диска Windows 2000 (занимавший 6,65 Гбайт в то время как гостевая операционная система использовала только 2,3 Гбайт пространства) был сжат до всего лишь 2,32 Гбайт. Этот процесс можно повторить для каждой гостевой операционной системы, занимающей слишком много места.

Шаг 3. Дефрагментация хост-диска

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

Автоматизация сжатия диска

Проще всего выполнять обслуживание гостевой операционной системы вручную по мере необходимости, но операции дефрагментации и сжатия диска VMware легко автоматизировать. Они все равно запускаются из командной строки.

Пакетный файл ShrinkVmdk.cmd можно загрузить, чтобы автоматизировать шаг 2 описанного выше процесса. В этом файле предполагается, что диск Z не используется; если это не так, то следует изменить строку

set tmpdrive=Z:

в начале пакетного файла, чтобы указать незанятый символ диска.

После установки VDDK можно открыть окно командной строки с расширенными полномочиями и выполнить сценарий с полным путем к VMDK-файлу, который нужно дефрагментировать. С использованием пакетного файла можно дефрагментировать тестовый файл виртуального диска, применив команду

shrinkvmdk "E:\Win2k Pro\W2kProDisk1.vmdk»

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

Листинг. ShrinkVmdk.cmd

# Начало фрагмента A
: : ПРЕДУПРЕЖДЕНИЕ — следующие две строки представляют собой ОДНУ строку, разделенную для удобства публикации.
pushd «C:\Program Files (x86)\VMware\
VMware Virtual Disk Development Kit\bin»
# Конец фрагмента A
# Начало фрагмента B
vmware-vdiskmanager -d «e:\Win2k Pro\W2kProDisk1.vmdk»
# Конец фрагмента B
# Начало фрагмента C
vmware-mount Z: «e:\Win2k Pro\W2kProDisk1.vmdk»
# Конец фрагмента C
# Начало фрагмента D
: : Подготовка с использованием символа диска, а не пути.
vmware-vdiskmanager -p Z:
# Конец фрагмента D
# Начало фрагмента E
vmware-mount -d Z:
# Конец фрагмента E
# Начало фрагмента F
: : Теперь сжимаем файл VMDK.
vmware-vdiskmanager -k «e:\Win2k Pro\W2kProDisk1.vmdk»
# Конец фрагмента F