Сегодняшняя статья расскажет вам ещё об одной функции моего PowerShell-модуля для управления виртуальной инфраструктурой VMware - Vi-Module. Первая статья этой серии с описанием самого модуля находится здесь. Функция Convert-VmdkThin2EZThick. Как вы уже поняли из её названия, функция конвертирует все «тонкие» (Thin Provision) виртуальные диски виртуальной машины в диски типа Thick Provision Eager Zeroed.
Это может понадобиться по нескольким причинам. Не хочется провоцировать извечный спор о производительности, поэтому приведу абсолютно бесспорный аргумент – требования приложения. Возможно кого-то это удивит, но ещё существует достаточное количество «виртуализация-недружелюбных» приложений, не поддерживающих основные преимущества виртуализации, такие как снапшоты (Snapshots), vMotion, Thin Provisioning и т.д.
Я нашёл 3 метода для конвертирования виртуальных дисков, и каждый из них, на мой взгляд, имеет свой небольшой недостаток.
Начнём с vmkfstools, этот метод требует прямого подключения по SSH к ESXi-хосту, помимо этого вы должны знать, на каком именно хосте зарегистрирована нужная вам ВМ в данный момент.
Опция Inflate, доступная из GUI (Datastore Browser в vSphere Client) не всегда удобна, т.к. если ВМ находится в кластере SDRS Cluster, то не так-то просто найти, на каком именно Datastore находится конкретный виртуальный диск.
Ну и, наконец, командлет Set-HardDisk. Очень мощное и громоздкое оружие, которое потребует от вас массы проверок, прежде чем передать ей виртуальный диск на обработку (включена ли ВМ, есть ли Snapshot на диске, не является ли диск томом RDM и т.д.).
Ну вот мы и добрались до моей функции. Я постарался лишить её всех вышеперечисленных недостатков.
Функция принимает как параметр одну или несколько ВМ и конвертирует все их «тонкие» диски, не имеющие снапшотов, в случае, если машина выключена. Поскольку функция совершает необратимое действие, она поддерживает параметр -Confirm, который по умолчанию равен $true, т.е. требует подтверждения ваших намерений (подтверждение запрашивается один раз для каждой ВМ, не для каждого диска).
Естественно, вы можете ответить [A] Yes to All, либо вообще отменить запрос, использовав -Confirm $false. Будьте внимательны с этим параметром, ошибившись, вы сможете остановить работу скрипта, но конвертирование диска, которое уже началось остановить не удастся!
По поводу «необратимости действия»: конвертировать виртуальный диск из «толстого» обратно в «тонкий» невозможно и это ограничение продиктовано не моей функцией. Конечно существует возможность изменить Disk Type на Thin Provision во время клонирования, но это уже будет другой диск, и, строго говоря, конвертированием считаться не может.
Поскольку процесс конвертирования может занять довольно длительное время, функция отображает процесс прямо в окне PowerCLI с помощью Write-Progress с указанием имени ВМ, текущего диска, конвертируемого в данный момент и процента продвижения.
В среднем скорость конвертирования на хранилищах, находящихся на SAN и поддерживающие VAAI, примерно 200 GB/час. Диски в Independent Mode конвертируются почти в 2 раза медленнее.
Функция Convert-VmdkThin2EZThick, как и положено любой «правильной» функции PowerShell, возвращает не текст, а объекты, с которыми можно производить все стандартные операции над объектами: сортировка (|Sort-Object), фильтрация (|Where-Object), экспорт в файл (|Export-Csv) и визуализация (|Format-Table, |Format-List, |Format-Wide).
Особенно обратите внимание на такое свойство, как Result. Сам процесс конвертирования запускается как задача (Task), и её продвижение и результат можно наблюдать в vSphere/Web Client в панели Recent Tasks.
Значение «success» в функции соответствует значению «Completed» в поле Status в панели vCenter Recent Tasks. Свойство TimeMin - это время в минутах, затраченное на конвертирование каждого диска.
P.S. Идея, описанная автором в этой статье также оформлена в виде функции Find-VcVm и тоже включена в мой модуль. Надеюсь, автор не будет против.