SCSI

Pri zväčšovaní veľkosti alebo odstraňovaní disku vo virtuálnych počítačoch VMWare pre Windows je niekedy ťažké pochopiť, ktorý virtuálny disk VMware zodpovedá konkrétnemu disku v systéme Windows VM. Ak nie je veľa diskov a všetky sa líšia veľkosťou, je ľahké nájsť ten pravý. Čo by som však mal urobiť, ak sa pre VM vytvorí niekoľko jednotiek VMDK (alebo RDM) rovnakej veľkosti alebo ak sa pre VM vytvorí niekoľko virtuálnych radičov SCSI? Ako neurobiť chybu a zvoliť presne jednotku, ktorú chcete rozšíriť (alebo zmenšiť) správcu systému Windows.

V tomto článku sa zameriame na to, ako namapovať disky Windows na virtuálne disky (VMDK) na VMWare VM..

obsah:

  • Kontrola čísla zariadenia SCSI vo Windows a VMWare
  • Ako mapovať jednotky Windows na súbory VMDK pomocou UUID / SerialNumber pomocou PowerShell?

Kontrola čísla zariadenia SCSI vo Windows a VMWare

V systéme Windows otvorte konzolu na správu diskov (diskmgmt.msc) (v našom príklade Windows Server 2016). Názov radiča SCSI a číslo zariadenia SCSI na ňom nie sú zobrazené v zozname jednotiek. Ak chcete zistiť číslo SCSI zariadenia, kliknite na jednotku a vyberte položku vlastnosti. Ako vidíte, na karte všeobecný v teréne umiestnenia sú uvedené informácie o portu zariadenia VMWare Virtual disk SCSI Disk Device.

  • Umiestnenie 160 = radič zbernice SCSI 0
  • Cieľové ID 1 = SCSI ID zariadenia 1

Skombinujte prijaté údaje a získajte adresu disku SCSI (0: 1).

Teraz otvorte vlastnosti virtuálneho počítača VMWare v klientovi vSphere. Nájdite jednotku, ktorej uzol virtuálneho zariadenia sa zhoduje s ID, ktoré ste dostali. V našom príklade to SCSI (0: 1) Pevný disk 2.

Ak je vo virtuálnom stroji nakonfigurovaných veľa virtuálnych diskov s rôznymi radičmi SCSI (môžete pridať až 4 radiče SCSI so 16 diskami v každom virtuálnom stroji), manuálne nájdenie čísla zariadenia SCSI je pomerne ťažké. Pamätajte tiež na to, že čísla radičov SCSI sa môžu vo Windows a VMWare líšiť..

Ako mapovať jednotky Windows na súbory VMDK pomocou UUID / SerialNumber pomocou PowerShell?

Ďalším spôsobom, ako mapovať virtuálne disky VMWare na disky vnútri hosťujúceho VM, je ich porovnanie podľa ich jedinečného identifikátora disku. Z VMWare sa tento atribút nazýva UUID (Unique ID) a na Windows - Sériové číslo. Pozrime sa, ako získať virtuálne disky UUID a SerialNumber pomocou PowerShell.

Štandardne majú všetky VM VMWare túto voľbu povolenú disk.EnableUUID = PRAVDA, to znamená, že hosťujúci OS by mal vidieť identifikátory virtuálnych diskov.

Na získanie informácií o diskoch vo Windows môžete použiť rutiny úložného modulu alebo požiadavky WMI. pretože v našom prípade stále existujú virtuálne počítače so systémom Windows Server 2008 R2, v ktorých nie je nainštalovaný žiadny modul úložiska, použijeme rozhranie WMI.

Ak chcete získať číslo SCSI radiča, číslo SCSI zariadenia na ňom, sériové číslo virtuálneho disku (SerialNumber / UUID), veľkosť a číslo disku v systéme Windows, spustite príkaz PowerShell:

$ DiskInfo = foreach ($ disk v Get-WmiObject Win32_DiskDrive) [pscustomobject] @ "DeviceID" = $ disk.DeviceID; "Titulok" = $ disk.Caption; "Kapacita (GB)" = [math] :: Round ($ disk.size / 1GB, 0); "SerialNumber" = $ disk.SerialNumber "SCSIControllerNum" = $ disk.scsiport; "SCSIDeviceNum" = $ disk.scsitargetid;  $ DiskInfo | ft

V našom príklade sme zistili, že systém Windows vidí tri jednotky:

  • PHYSICALDRIVE0: SCSI Port 0, SCSI Target 0, Serial 6000c2939b153417dedbdce371ed497b
  • PHYSICALDRIVE1: SCSI Port 0, SCSI Target 1, Serial 6000c2950ee961954909259642bb03bf
  • PHYSICALDRIVE1: SCSI Port 4, SCSI Target 10, Serial 6000c2995fc3c4728de8b0596bb02ce3

Teraz sa pokúsime získať počet radičov SCSI a UUID diskov, ktoré sú špecifikované v nastaveniach virtuálneho počítača VMware. Na získanie parametrov VM použite PowerCLI.

Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "msk-sql1" $ vmHardDisks = Get-VM --Name $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM - $ $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager $ vmresults = @ () foreach ($ vmHardDisk v $ vmHardDisks) $ string = $ vmHardDisk.Filename $ vmHardDiskUuid = ($ vmHardDisk.Eachuidack.Eachuidack.ackaidack.Eachuidack.ack) -Objekt $ _. Nahradiť (","). Nahradiť ('-', ")) $ vmresult =" "| Select-Object vmHardDiskDatastore, vmHardDiskVmdk, vmHardDiskName, vmHardDiskSize, vmHardDiskUuid $ vmdisk $ dhm vDhm vDhm vDhm vDhm vdhm .split (']') [0] .split ('[') [1] $ vmresult.vmHardDiskVmdk = $ vmHardDisk.filename.split (']') [1] .trim () $ vmresult.vmHardDiskName = $ vmHardDisk .Name $ vmresult.vmHardDiskSize = $ vmHardDisk.CapacityGB $ vmresult.vmHardDiskUuid = $ vmHardDiskUuid $ vmresults + = $ vmresult $ vmresults | ft 

Tento skript sa pripojí k serveru vCenter (alebo ESXi) a pre zadaný virtuálny počítač dostane zoznam diskov. Po spustení skriptu získate zoznam virtuálnych diskov pre VM. Výsledok by mal obsahovať názov DataStore, cestu k súboru vmdk, číslo disku, jeho veľkosť a UUID..

Teraz pomocou prijatých UUID môžete manuálne mapovať disky, ktoré sú viditeľné v hosťovskom systéme Windows, na virtuálne disky VMWare..

Ak máte práva správcu vo virtuálnom počítači, pre ktorý potrebujete namapovať disky Windows a súbory vmdk vo VMWare, môžete použiť jednoduchší skript PowerShell. Skript pristupuje k hosťujúcemu systému Windows cez sieť, zhromažďuje informácie o miestnych diskoch a zobrazuje korešpondenciu s diskami VMWare..

Celý skriptový kód PowerShell:

Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "msk-sql1" $ WinHostName = "msk-sqlclu1.winitpro.ru" # Získať zoznam diskov VMWare $ vmDisks = Get-VM -Name $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM - $ $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager # Účet správcu a heslo pre prístup k hosťujúcemu OS $ cred = if ($ cred) $ cred else Get-Credential # Získať zoznam diskov a oddielov Windows via WMI $ winDisk = Get-WmiObject -Class Win32_DiskDrive -ComputerName $ WinHostName -Credential $ cred $ diskToDriveVolume = Get-WmiObject Win32_DiskDrive -ComputerName $ WinHostName -Credential $redit | % $ disk = $ _ $ partitions = "ASSOCIATORS OF" + "Win32_DiskDrive.DeviceID = '$ ($ disk.DeviceID)'" + "KDE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -Query $ partitions -ComputerName $ WinHName - kredit $ $ | % $ partition = $ _ $ drives = "ASSOCIATORS OF" + "Win32_DiskPartition.DeviceID = '$ ($ partition.DeviceID)'" + "KDE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -Query $ drive -computerName $ WinHostName - kredit $ $ | % New-Object -Type PSCustomObject -Property @ Disk = $ disk.DeviceID DriveLetter = $ _. DeviceID VolumeName = $ _. VolumeName # # získajte sériové číslo jednotky foreach ($ disk v $ winDisk) $ disk | 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 [byte []] $ bytes = $ _. ToCharArray (); $ bytes | foreach $ _. ToString (' x2 ')) -join " $ disk.AltSerialNumber = $ diskSerialNumber # Vyčíslenie všetkých diskov VM, mapovanie na disky Windows pomocou SerialNumber / UUID $ diskMaps = @ () foreach ($ vmDisk v $ vmDisks) $ vmDiskUuid = $ virtualDiskManager.queryvirtualdiskuuid. $ $. , $ vmDatacenterView.MoRef) | foreach $ _. nahradiť (","). nahradiť ('-', ") $ windowsDisk = $ winDisk | kde $ _. SerialNumber -eq $ vmDiskUuid if (- nie $ windowsDisk) $ windowsDisk = $ winDisk | kde $ _. AltSerialNumber -eq $ vmDisk.ScsiCanonicalName.substring (12,24) $ curDiskMap = "" | vyberte vmDiskDatastore, vmDiskVmdk, vmDiskName, windowsDiskIndex, vmDiskUuid, windowsDeviceID, jednotky, zväzky $ curDiskMap.vmDiskDatastore = $ vmDisk.filename.split (']') [0] .split ('['] [1] [m] $ 1 $ 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 | kde $ _. Disk -eq $ windowsDisk.DeviceID $ curDiskMap.drives = $ driveVolumes.DriveLetter $ curDiskMap.volumes = $ driveVolumes.VolumeName $ diskMaps + = $ curDiskMap $ diskMaps = $ diskMaps | radiť [int] $ _. vmDiskName.split (") [2] $ diskMaps | ft 

Ďalej vracia informácie o písmenách jednotiek a menovkách zväzkov Windows.

Teraz môžete ľahko zistiť, ktorá virtuálna jednotka zodpovedá jednotke vo Windows..

Ak sú virtuálne disky vo Windows pripojené prostredníctvom bodu pripojenia, výstup nebude obsahovať informácie o priradenom písmene jednotky a menovke zväzku.