Что сделал - 5

Скрипт поиска несмонтированных виртуальных дисков Hyper-V

Обычная история — создаются какие-то тестовые виртуальные машины и вскоре удаляются, или делаются какие-то копии дисков, зачастую в большой спешке, а потом всё это забывается и неизвестно где лежит, и за годы накапливается куча хлама, которую верные сервера надёжно хранят, а люди удивляются — куда же подевалось всё место на дисках?

Алгоритм работы: берутся все виртуальные машины всех хостов, для каждой выводится список дисков (.vhd и .vhdx), если там вместо диска снапшот, то ищется родительский диск (там другое свойство), и результаты заносятся в один массив. Затем ищутся файлы с теми же расширениями на локальных дисках серверов, результаты заносятся в другой массив. Потом массивы сравниваются — отбрасываются значения первого массива, т. е., смонтированные диски, а потом сортируются по уникальным значениям — дело в том, что если хосты принадлежат кластеру и подключены к одной дисковой полке, то и результаты у них будут практически одинаковые. Ну, а дальше из этого делается красивая табличка, подсчитывается общий итог, генерируются команды на удаление и всё высылается на почту. Выглядит это примерно так:

# Команды на удаление
del "D:\VM\disk_c.vhdx" -Force -Confirm:$false
del "L:\vm\vmws-sccm\sccm2.vhdx" -Force -Confirm:$false
del "L:\vm\vmws-dns\Virtual Hard Disks\vmws-dns.vhdx" -Force -Confirm:$false
del "L:\back\vmls-web\vmls-web_Disk0.vhdx" -Force -Confirm:$false
del "L:\vm\vmws-sccm\sccm_c.vhdx" -Force -Confirm:$false

Пока я писал скрипт и скрипел мозгами, как получше реализовать ту или иную операцию, обнаружил прекрасную вещь. Классический подход работы с несколькими удалёнными машинами — когда комп-инициатор, на котором работает скрипт, сам их последовательно опрашивает, то есть, в единицу времени обрабатывается только один удалённый хост. Работает это всё медленно и печально. Но есть способ получше:

$hosts = "hv01","hv02","hv03","hv04","hv05"
$allvhds = Invoke-Command -computername $hosts -command {
dir ((gcim Win32_LogicalDisk -filter "drivetype=3").DeviceID -replace "$","\") -Include *.vhd,*.vhdx -Recurse -ErrorAction SilentlyContinue
}

Здесь инициатор просто даёт команду всем удалённым хостам, а потом просто ждёт, когда они завершат работу, и результаты падают в массив по мере их поступления. Работает во столько раз быстрее, сколько хостов участвует. Там есть нюансы — стандартно может работать до 32 потоков одновременно, но это настраивается, да и редко нужно.

Результат работы скрипта — нашлось 49 бесхозных дисков общим объёмом немногим менее 4 терабайт.

Скрипт создания папки на файловом ресурсе

Так как структура довольно сложная и каждый раз муторно руками создавать группы, делать вложенность их друг в друга, да и напортачить легко, поэтому тут автоматизация прямо-таки напрашивается. Работает так: вводишь путь к новой папке, а скрипт сам ищет уровень этой папки, родительский каталог и его группы, и выдаёт данные на проверку. Проверяешь, и если всё в порядке, одобряешь и дальше всё делается само — создаётся сама папка, группы, вложенность и раздаются права. Красота невероятная.

Конвертация виртуальных дисков VMWare (.vmdk) в Hyper-V (.vhdx)

Последний месяц плотно занимался перетаскиванием виртуальных машин со старой VMWare ESXi 5.5 на модный молодёжный Hyper-V 2016. Есть прекрасная программа под названием Microsoft Virtual Machine Converter, которая хорошо выполняет эту функцию. Но иногда виртуальные машины были уже выгружены в виде набора файлов, и нужно было просто переконвертировать диск. Оказалось, что этот конвертер имеет в своём составе модуль для Powershell, и всё заверте…

# импортировать модуль
Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'
# конвертировать
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath C:\temp\disk.vmdk -DestinationLiteralPath 'C:\temp' -VhdType DynamicHardDisk -VhdFormat Vhdx

И последняя на сегодня забавная история.

Прошивка дисковой полки HP P2000 G3 FC

Великая и ужасная компания Хьюлет-Паккард выпускает (или выпускала) широко известные в узких кругах дисковые полки P2000. После того, как я перенёс все виртуальные машины со старой VMWare, эта полка освободилась, и там нужно было в одном контроллере заменить сбойную флеш-карту и всячески её обновить. С обновлением возникли проблемы, потому что без наличия сервисного контракта Хьюлет-Паккард скачать свежую прошивку со своего сайта не даёт.

Начал поиск в интернетах — и обнаружилось, что эта полка — перемаркированная DotHill AssuredSAN 3000 series, и компания Дотхилл, её выпускавшая, впоследствии была поглощена компанией Сигейт, у которой эти прошивки свободно доступны на сайте. Я скачал прошивку с сайта Сигейта, и она без проблем установилась и работает.

Больше того — у Сигейта есть прошивка новее, чем последняя версия на Хьюлет-Паккарде, но я не стал бежать впереди паровоза и прошил то, что числилось последним на родном сайте.

Всем хорошего дня, не переключайтесь, продолжим после короткой рекламы.