SCSI

Когато увеличавате размера или изтривате диск във VMWare за виртуални машини на Windows, понякога е трудно да разберете кой виртуален диск на VMware съответства на определен диск във виртуалната машина на Windows. Ако няма много дискове и всички се различават по размер, е лесно да намерите подходящия. Но какво да направя, ако за VM са създадени няколко VMDK (или RDM) дискове със същия размер или са създадени няколко виртуални SCSI контролери за VM? Как да не направите грешка и да изберете точно устройството, което искате да разширите (или намалите) администратора на Windows.

В тази статия ще разгледаме как да картографираме дисковете на Windows към виртуални дискове (VMDK) на VMWare VM..

Съдържание:

  • Проверка на номера на SCSI устройството в Windows и VMWare
  • Как да картографирате дисковете на Windows към VMDK файлове от UUID / SerialNumber чрез PowerShell?

Проверка на номера на SCSI устройството в Windows и VMWare

Отворете конзолата за управление на дискове Disk Manager (diskmgmt.msc) в Windows (в нашия пример, Windows Server 2016). Името на SCSI контролера и номерът на SCSI устройството върху него не се показват в списъка с дискове. За да определите SCSI номера на дадено устройство, щракнете върху устройството и изберете Имоти. Както можете да видите, в раздела общ в полето местоположение информация за порта на устройството е посочена VMWare SCSI дисково устройство за виртуален диск.

  • Местоположение 160 = SCSI шинен контролер 0
  • Насочен идентификатор 1 = SCSI идентификатор на устройство 1

Комбинирайте получените данни и вземете адреса на диска SCSI (0: 1).

Сега отворете свойствата на виртуалната машина VMWare в vSphere Client. Намерете устройството, чийто виртуален устройствен възел съответства на получения идентификатор. В нашия пример това SCSI (0: 1) Твърд диск 2.

Ако във виртуалната машина са конфигурирани много виртуални дискове с различни SCSI контролери (можете да добавите до 4 SCSI контролери с 16 диска във всяка VM), ръчното намиране на номера на SCSI устройството е доста трудно. Също така имайте предвид, че номерата на SCSI контролерите в Windows и VMWare могат да се различават..

Как да картографирате дисковете на Windows към VMDK файлове от UUID / SerialNumber чрез PowerShell?

Друг начин за картографиране на VMWare виртуални дискове към дисковете вътре в гост VM е да ги сравните по техния уникален идентификатор на диск. От VMWare се нарича този атрибут UUID (Уникален идентификатор) и на Windows - Сериен номер. Нека да видим как да получите UUID и SerialNumber на виртуални дискове през PowerShell.

По подразбиране всички VMWare VM имат опцията активирана disk.EnableUUID = ИСТИНСКИ, това означава, че гостната ОС трябва да вижда идентификатори на виртуални дискове.

За да получите информация за дисковете в Windows, можете да използвате командлети за модул за съхранение или WMI заявки. защото в нашия случай все още има виртуални машини с Windows Server 2008 R2, в които няма модул за съхранение, ще използваме WMI.

За да получите SCSI номера на контролера, SCSI номера на устройството на него, серийния номер на виртуалния диск (SerialNumber / UUID), размера и номера на диска в Windows, изпълнете командата PowerShell:

$ DiskInfo = foreach ($ диск в Get-WmiObject Win32_DiskDrive) [pscustomobject] @ "DeviceID" = $ disk.DeviceID; "Надпис" = $ disk.Caption; "Капацитет (GB)" = [математика] :: Кръг ($ disk.size / 1GB, 0); "SerialNumber" = $ disk.SerialNumber "SCSIControllerNum" = $ disk.scsiport; "SCSIDeviceNum" = $ disk.scsitargetid;  $ DiskInfo | ft

В нашия пример установихме, че Windows вижда три диска:

  • PHYSICALDRIVE0: SCSI порт 0, SCSI Target 0, сериен 6000c2939b153417dedbdce371ed497b
  • PHYSICALDRIVE1: SCSI порт 0, SCSI Target 1, сериен 6000c2950ee961954909259642bb03bf
  • PHYSICALDRIVE1: SCSI Port 4, SCSI Target 10, Serial 6000c2995fc3c4728de8b0596bb02ce3

Сега нека се опитаме да вземем номера на SCSI контролери и UUID дискове, които са посочени в настройките на виртуалната машина на VMware. За да получите VM параметри, използвайте PowerCLI.

Импортиране-модул VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "msk-sql1" $ vmHardDisks = Get-VM -Name $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM -Name $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager $ vmresults = @ () foreach ($ vmHardDisk в $ vmHardDisks) $ string = $ vmHardDisk.Filename $ vmHardDiskUuid = ($ vmHardDida.ckch.ech.Each -Object $ _. Замяна (","). Замяна ('-', ")) $ vmresult =" "| Select-Object vmHardDiskDatastore, vmHardDiskVmdk, vmHardDiskName, vmHardDiskSize, vmHardDiskDiskDu $ .split (']') [0] .split ('[') [1] $ vmresult.vmHardDiskVmdk = $ vmHardDisk.filename.split (']') [1] .trim () $ vmresult.vmHardDiskName = $ vmHardDisk .Name $ vmresult.vmHardDiskSize = $ vmHardDisk.CapacityGB $ $ vmresult.vmHardDiskUuid = $ vmHardDiskUuid $ vmresults + = $ vmresult $ vmresulta | ft 

Този скрипт ще се свърже към vCenter сървъра (или ESXi) и за посочения VM ще получи списък с дискове. След стартиране на скрипта ще получите списък с виртуални дискове за VM. Резултатът трябва да съдържа името на DataStore, пътя към файла vmdk, номера на диска, неговия размер и UUID.

Сега, чрез получените UUIDs, можете ръчно да картографирате дисковете, които са видими в гост Windows с виртуални дискове VMWare.

Ако имате права на администратор във виртуална машина, за която трябва да картографирате дискове на Windows и vmdk файлове във VMWare, можете да използвате по-прост скрипт на PowerShell. Скриптът осъществява достъп до гостния Windows по мрежата, събира информация за локални дискове и показва кореспонденцията с дисковете VMWare.

Пълен код на скрипт PowerShell:

Импортиране-модул VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "msk-sql1" $ WinHostName = "msk-sqlclu1.winitpro.ru" # Вземете списък с VMWare дискове $ vmDMisks = Получете-Получете-Получете $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM -Name $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager # Администраторски акаунт и парола за достъп до гостната операционна система $ $ = = ($ кредитен) $ кредит Get-Credential # Получете списък на дискове и дялове на Windows чрез WMI $ winDisk = Get-WmiObject -Class Win32_DiskDrive -ComputerName $ WinHostName -Credential $ Credit $ diskToDriveVolume = Get-WmiObject Win32_DiskDrive -ComputerName $ WinHostName -Credential $ Credit | % $ disk = $ _ $ partitions = "АССОЦИАТОРИ НА" + "Win32_DiskDrive.DeviceID = '$ ($ disk.DeviceID)'" + "WHERE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -Query $ partitions WinCHameN -Проверителни $ кредити | % $ partition = $ _ $ drives = "АССОЦИАТОРИ НА" + "Win32_DiskPartition.DeviceID = '$ ($ partition.DeviceID)'" + "WHERE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -Query $ disves -Comery $ Drives -ComNerName -Проверителни $ кредити | % New-Object -Type PSCustomObject -Property @ Disk = $ disk.DeviceID DriveLetter = $ _. DeviceID VolumeName = $ _. VolumeName # получете серийния номер на предсказателя на устройството ($ диск в $ winDisk) $ диск | Add-Member -MemberType NoteProperty -Name AltSerialNumber -Value $ null $ diskSerialNumber = $ disk.SerialNumber if ($ disk.Model -notmatch 'VMware Virtual disk SCSI Disk Device') if ($ diskSerialNumber -match '^ \ S 12  $ ') $ diskSerialNumber = ($ diskSerialNumber | foreach [байт []] $ байт = $ _. ToCharArray (); $ байтове | foreach $ _. ToString (' x2 ')) -присъединете се " $ disk.AltSerialNumber = $ diskSerialNumber # Изброяване на всички VM дискове, картографиране на дискове с Windows чрез SerialNumber / UUID $ diskMaps = @ () foreach ($ vmDisk в $ vmDisks) $ vmDiskUuid = $ virtualDiskManager.queryvirtualdisnamuidememidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidid. , $ vmDatacenterView.MoRef) | foreach $ _. substitute (","). substitute ('-', ") $ windowsDisk = $ winDisk | където $ _. SerialNumber -eq $ vmDiskUuid if (-not $ windowsDisk) $ windowsDisk = $ winDisk | където $ _. AltSerialNumber -eq $ vmDisk.ScsiCanonicalName.substring (12,24) $ curDiskMap = "" | изберете vmDiskDatastore, vmDiskVmdk, vmDiskName, windowsDiskIndex, vmDiskUuid, windowsDeviceID, дискове, обеми $ curDiskMap.vmDiskDatastore = $ vmDisk.filename.split (']') [0]] $ 1 [m] $ vmDisk.filename.split (']') [1] .trim () $ curDiskMap.vmDiskName = $ vmDisk.Name $ curDiskMap.windowsDiskIndex = if ($ windowsDisk) $ windowsDisk.Index else "FAILED TO MATCH"  $ curDiskMap.vmDiskUuid = $ vmDiskUuid $ curDiskMap.windowsDeviceID = if ($ windowsDisk) $ windowsDisk.DeviceID else "FAILED TO MATCH" $ driveVolumes = $ diskToDriveVolume | където $ _. Диск -eq $ windowsDisk.DeviceID $ curDiskMap.drives = $ driveVolumes.DriveLetter $ curDiskMap.volumes = $ driveVolumes.VolumeName $ diskMaps + = $ curDiskMap $ diskMaps = $ diskMaps | сортиране [int] $ _. vmDiskName.split (") [2] $ diskMaps | ft 

Освен това връща информация за буквите на устройството и етикетите за обем на Windows.

Сега можете лесно да разберете на кое виртуално устройство отговаря устройството в Windows..

Ако виртуалните дискове в Windows са свързани чрез точка на монтиране, изходът няма да съдържа информация за зададената буква на устройството и етикета на звука.