Как часто вам приходится увеличивать логические диски внутри гостевых ОС ВМ? Довольно часто, не так ли? Вам надо сначала найти вашу ВМ в vSphere Client, потом кликнуть Edit Settings и перво-наперво увеличить виртуальный диск ВМ. После вы должны будете открыть RDP к вашей ВМ, затем открыть Disk Management, выбрать Rescan Disks из контекстного меню и только после этого ещё один правый клик на нужном вам логическом диске и вот сейчас выбрать Extend Volume …. Уфф!
Что, если я скажу вам, что всё это возможно сделать из всего одной консоли и абсолютно без GUI (без vSphere Client, без Remote Desktop, без VM console и т.д.)? И, как вы уже наверное догадались, это волшебное место - PowerCLI-консоль, «вооружённая» моим Vi-Module модулем!
На этот раз вас ждут две новые функции для работы с логическими дисками гостевых ОС VMware ВМ: Get-VMGuestPartition и Expand-VMGuestPartition.
Get-VMGuestPartition
Функция Get-VMGuestPartition чрезвычайно проста в использовании. Просто передайте через pipeline вашу/ваши ВМ в функцию и всё.
Поддерживаются как Windows, так и Linux ОС ВМ. Единственным требованием является наличие запущенных VMTools! ВМ без VMTools будут проигнорированы, даже без сообщения об ошибке.
Функция, как и положено, возвращает объекты, поэтому вы можете фильтровать и форматировать output.
Свойство Usage% генерируется функцией New-PercentageBar, включённой в модуль.
Expand-VMGuestPartition
Почему Expand-, а не как было бы логичнее, Extend-? Потому что Extend не является одобренным для использования в PowerShell глаголом.
PS C:\> Get-Verb e* | sort Verb
Expand-VMGuestPartition более сложная, интерактивная функция и имеет ещё несколько требований в добавок к VMTools! Прежде чем мы сможем начать использовать эту функцию, мы должны будем создать как минимум 2 объекта VICredentialStore - один для ESXi хоста и другой для гостевой ОС.
Командлет New-VICredentialStoreItem имеет 3 обязательных параметра. –User и -Password - это данные учётной записи для взаимодействия с ESXi хостом и гостевой ОС, а -Host - это только указатель на них, и именно его мы и будем использовать в нашей функции.
Единственным обязательным параметром для Expand-VMGuestPartition является -VM. Все остальные параметры опциональные, и могут быть переданы интерактивно в процессе работы функции! Эта функциональность обеспечивается функцией Write-Menu, включённой в модуль.
Пример
Для примера мы возьмём ВМ с двумя виртуальными дисками.
Функция любезно попросит вас выбрать из списка учётную запись для ESXi хоста, а также для гостевой ОС.
После этого функция пройдёт с вами 3 простых этапа: [Step 1..3] - выбрать виртуальный диск ВМ, [Step 2..3] - выбрать размер, до которого этот диск будет увеличен, и [Step 3..3] - выбрать логический диск для увеличения.
Интерактивные этапы
[Step 1..3]
Давайте рассмотрим эти этапы более подробно. Этап Step 1 позволяет вам выбрать виртуальный диск, который требуется увеличить. Обратите внимание, что здесь присутствует меню Exit. Этот пункт позволяет увеличить гостевой логический диск, не увеличивая виртуальный диск ВМ. Что!!? Может его уже увеличили ранее или предыдущая попытка увеличения логического диска закончилась неудачей, а диск был удачно увеличен. Всё бывает :)
После того, как вы выбрали диск, вы получите немного дополнительной информации о нём и о датасторе, на котором он находится.
[Step 2..3]
Этап Step 2 динамически строит для вас меню с размерами диска. Это меню управляется переменными внутри Begin { }. Оно полностью зависит от этих переменных, а также начального размера выбранного диска.
Вы можете изменить эти переменные по вашему усмотрению. Самая важная из них это $MaxHddSize. Она запрещает увеличение виртуального диска свыше 2 ТБ (ограничение размера логического диска для MBR дисков). Однако если вы используете GPT диски, вы можете смело увеличить эту переменную. Просто имейте ввиду, что существуют и другие ограничения: например, NTFS volume на данный момент ограничен 256 ТБ, а виртуальный диск 62 ТБ.
[Step 3..3]
И заключительный этап - это выбрать логический гостевой диск (partition) для увеличения. На данный момент нет стопроцентного способа определить соответствие виртуальных дисков ВМ логическим гостевым, и вам придётся это сделать самим(. Но есть и хорошая новость - если вы ошиблись в выборе или предоставили неверный пароль для гостевой учётной записи, или ещё что-то пошло не так, вы можете начать всё сначала, но на этот раз выбрать меню Exit на этапе Step 1.
Заключительный этап
Функция Expand-VMGuestPartition ждёт 40 секунд и вызывает функцию Get-VMGuestPartition для отражения произведённых изменений. Эта пауза нужна для того, чтобы изменения вступили в силу.
Опциональные параметры
У функции Expand-VMGuestPartition есть несколько необязательных параметров, таких как -HostCred, -GuestCred, -Confirm и -Verbose.
Функция Expand-VMGuestPartition возвращает True, если всё прошло нормально (т.е. и виртуальный и логический диски были удачно увеличены) или False, если произошла какая-либо ошибка.
Функция Expand-VMGuestPartition поддерживает только гостевые ОС Windows NT6+. Устаревшие ОС, такие как Windows XP и Windows 2003 Server не поддерживаются (ограничения обусловлены самими гостевыми ОС).
Функция Expand-VMGuestPartition использует встроенный PowerCLI командлет Invoke-VMScript и Windows утилиту DISKPART.EXE.
Для получения справки по одной из команд diskpart, например, SELECT VOLUME, запустите diskpart в интерактивном режиме и help + ваша команда.
C:\> diskpart
DISKPART> help sel vol
DISKPART> exit
Большинство команд diskpart имеют короткие алиасы, например, SELECT - это sel, VOLUME - vol, PARTITION - part и т. д. Так, например, следующая длинная команда create partition primary может быть преобразована в более короткую cre part pri.
Обе функции требуют наличия запущенных VMTools внутри гостевых ОС.
Как всегда, ссылка на оригинал статьи с ps1code.com (English). Кстати, на прошлой неделе сайт автора попал в популярный список лучших 50 сайтов о PowerShell! Так что оставайтесь на VM Guru и читайте только качественный контент.