При замене СХД понадобилось отключить датасторы (хранилища) от хостов в VMware. Хостов 8, хранилищ 30. Делать это руками не хотелось. Пришлось изучать PowerCLI.
Если кому необходимо теории, то можно почитать тут
Решил я все скриптом
- #########################################################################################################
- #
- # Скрипт отключает датасторы у выбранных хостов. Делает Unmount, потом Detach
- # Переменная $hosts — список хостов
- # Переменная $storage — список отключаемых датасторов/хранилищ.
- #
- #########################################################################################################
- # Подключаем оснастку, если ее нет
- if ( (Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null )
- {
- add-pssnapin VMware.*
- }
- else
- {
- Write-Host «Snap in already added.»
- }
- #################################################
- # Убираем ругань на самоподписанный сертификат
- Set-powercliconfiguration -InvalidCertificateAction Ignore -Confirm:$false | out-null
- #################################################
- #vCenter Server
- $vCenter = «bs-vc»
- #I Если не подключены к vCentr, то подключаемся
- if ($global:DefaultVIServers.Count -lt 1)
- {
- Connect-VIServer $vCenter
- }
- # получаем список ESX-серверов
- #$hosts = (Get-Content D:\PowerCLI\1unmountdatastoresservers.txt)
- # Список всех хостов
- # $hosts = Get-VMhost
- # Выборочный список хостов
- $hosts = «bs-esx07», «bs-esx08»
- # Список Datastores, которые требуется отключить
- #$storage = (Get-Content D:\PowerCLI\storage.txt)
- $storage = «SAS_ThinClient_A_1», «SAS_ThinClient_A_2», «SAS_ThinClient_B_1», «SAS_ThinClient_B_2»
- # Проверяем на каждом хосте
- foreach($esx in $hosts)
- {
- Write-host «Servers: » $esx
- # Подключаемся к хосту для выполнения команды esxcli
- $esxcli = Get-ESXCLI -VMHost $esx
- #Hosts Datastores
- $hostds=Get-Datastore -VMhost $esx
- #Проверяем наличие нужных датасторов на хосте
- foreach ($st in $storage)
- {
- foreach($hds in $hostds)
- {
- #Write-Host «Проверяемый датастор: » $hds
- if ($st -eq $hds)
- {
- Write-Host
- Write-Host «Server: » $esx «have mapped datastores » $hds
- Write-Host
- # Проверяем включен ли SIOC, если да, то отключаем.
- $SIOC = Get-Datastore -Name $hds
- if ($SIOC.StorageIOControlEnabled -eq $True)
- {
- Set-Datastore $hds -StorageIOControlEnabled $false
- # Ждем, когда завершится отключение SIOC
- Start-Sleep -s 10
- }
- $lun = $esxcli.storage.vmfs.extent.list() | Where-Object {$_.VolumeName -eq $hds}
- $device_id=$lun.DeviceName
- #Unmount Datastore
- Write-Host «Unmount datastore » $hds » from » $esx
- $esxcli.storage.filesystem.unmount($true,$hds)
- #Detach Datastore
- Write-Host «Detach datastore » $hds » from » $esx
- $esxcli.storage.core.device.set($device_id,»IsOffline»,$null,»off»)
- }
- }
- }# Конец проверки наличие нужных датасторов на хосте
- } # Конец проверки на каждом хосте
Скрипт прокоментирован, поэтому я думаю проблем быть не должно. После применения скрипта необходимо сделать
Большую помощь при разборе команд esxcli мне оказал Колесников Матвей. За что большое ему спасибо.
Сам скрипт можно скачать по ссылке
P.S. Продолжение смотрите здесь