SCSI

Ko povečate velikost ali izbrišete disk v VMWare za Windows virtualne stroje, je včasih težko razumeti, kateri navidezni disk VMware ustreza določenemu disku v Windows VM. Če diskov ni veliko in se razlikujejo po velikosti, je enostavno najti pravega. Toda kaj naj storim, če je za VM ustvarjenih več pogonov VMDK (ali RDM) iste velikosti ali pa je za VM ustvarjenih več virtualnih krmilnikov SCSI? Kako se ne zmotiti in izbrati ravno pogon, ki ga želite razširiti (ali zmanjšati) skrbnika sistema Windows.

V tem članku bomo pogledali, kako preslikati diske Windows na virtualne diske (VMDK) v VMWare VM-jih..

Vsebina:

  • Preverjanje številke SCSI naprave v sistemu Windows in VMWare
  • Kako preslikati pogone Windows v datoteke VMDK s pomočjo UUID / SerialNumber prek PowerShell?

Preverjanje številke SCSI naprave v sistemu Windows in VMWare

Odprite konzolo za upravljanje diskov Disk Manager (diskmgmt.msc) v sistemu Windows (v našem primeru Windows Server 2016). Ime krmilnika SCSI in številka SCSI naprave na njem ni prikazana na seznamu pogonov. Če želite določiti številko SCSI naprave, kliknite na pogon in izberite Lastnosti. Kot lahko vidite, na zavihku Splošno na polju Lokacija podatek o vratih naprave je naveden VMWare SCSI Disk Device Virtual disk.

  • Lokacija 160 = SCSI krmilnik vodil 0
  • ID cilja 1 = SCSI ID naprave 1

Združite prejete podatke in dobite naslov diska SCSI (0: 1).

Zdaj odprite lastnosti virtualne naprave VMWare v vSphere Client. Poiščite pogon, katerega virtualno vozlišče naprave ustreza ID-ju, ki ste ga prejeli. V našem primeru to SCSI (0: 1) Trdi disk 2.

Če je v virtualnem stroju konfiguriranih veliko diskov z različnimi krmilniki SCSI (v vsak VM lahko dodate do 4 krmilnike SCSI s 16 diski), je ročno iskanje številke SCSI naprave precej težavno. Upoštevajte tudi, da se lahko številke krmilnikov SCSI v sistemu Windows in VMWare razlikujejo..

Kako preslikati pogone Windows v datoteke VMDK s pomočjo UUID / SerialNumber prek PowerShell?

Drug način za preslikavo virtualnih diskov VMWare na diske znotraj gostujoče VM je primerjava le-teh po njihovem edinstvenem identifikatorju diska. VMWare se imenuje ta atribut Uuid (Edinstven ID) in v sistemu Windows - Serijska številka. Poglejmo, kako do PowerShell-a dobite UUID in SerialNumber navideznih diskov.

Privzeto so vsi VMWare VM-ji omogočeni disk.EnableUUID = TRUE, to pomeni, da bi morala gosta OS videti identifikatorje virtualnega diska.

Če želite dobiti informacije o diskih v operacijskem sistemu Windows, lahko uporabite cmdlete modula za shranjevanje ali zahteve WMI. Ker v našem primeru še vedno obstajajo VM-ji z ​​Windows Server 2008 R2, v katerih ni modula za shranjevanje, uporabili bomo WMI.

Če želite dobiti številko SCSI krmilnika, številko SCSI naprave na njem, serijsko številko navideznega diska (SerialNumber / UUID), velikost in številko diska v sistemu Windows, zaženite ukaz PowerShell:

$ DiskInfo = foreach ($ disk v Get-WmiObject Win32_DiskDrive) [pscustomobject] @ "DeviceID" = $ disk.DeviceID; "Napis" = $ disk.Naročnik; "Zmogljivost (GB)" = [matematika] :: Okrogla ($ disk.size / 1GB, 0); "SerialNumber" = $ disk.SerialNumber "SCSIControllerNum" = $ disk.scsiport; "SCSIDeviceNum" = $ disk.scsitargetid;  $ DiskInfo | ft

V našem primeru smo ugotovili, da Windows vidi tri pogone:

  • FIZIČNODRIVE0: vrata SCSI 0, SCSI Target 0, serijska 6000c2939b153417dedbdce371ed497b
  • FIZIČNODRIVE1: vrata SCSI 0, SCSI Target 1, serijska 6000c2950ee961954909259642bb03bf
  • FIZIČNODRIVE1: vrata SCSI 4, SCSI Target 10, serijska 6000c2995fc3c4728de8b0596bb02ce3

Zdaj poskušajmo dobiti številke SCSI krmilnikov in UUID diskov, ki so določene v nastavitvah virtualnega stroja VMware. Če želite dobiti parametre VM, uporabite PowerCLI.

Uvoz-modul 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: -Object $ _. Zamenjaj (","). Zamenjaj ('-', ")) $ vmresult =" "| Izberi-objekt vmHardDiskDatastore, vmHardDiskVmdk, vmHardDiskName, vmHardDiskSize, vmHardDiskDiskDuD $ vmardHard $ vmardHard $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmardHis $ vmresHard .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 

Ta skript se bo povezal s strežnikom vCenter (ali ESXi) in za navedeni VM bo prejel seznam diskov. Po zagonu skripta dobite seznam virtualnih diskov za VM. Rezultat mora vsebovati ime DataStore, pot do datoteke vmdk, številko diska, njegovo velikost in UUID.

Zdaj lahko s prejetimi UUID-ji ročno preslikate diske, ki so vidni v gostujočem Windows-u, z virtualnimi diski VMWare.

Če imate skrbniške pravice v virtualnem stroju, za katerega morate preslikati diske Windows in datoteke vmdk v VMWare, lahko uporabite enostavnejši skript PowerShell. Skript dostopa do gostujočega sistema Windows po omrežju, zbira podatke o lokalnih diskih in prikazuje korespondenco z diski VMWare.

Celotna koda skripte PowerShell:

Uvoz-modul VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "msk-sql1" $ WinHostName = "msk-sqlclu1.winitpro.ru" # Pridobite seznam diskov VMWare $ vmDMasN = Get-Get-Get-Get-Get-Get-Get-Get-Get-Get-Get-Get- $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM -Name $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager # Skrbniški račun in geslo za dostop do gostujočega OS $ kredita = if ($ kredit) $ cred else Get-Credential # Pridobite seznam diskov in particij sistema Windows via WMI $ winDisk = Get-WmiObject -Class Win32_DiskDrive -ComputerName $ WinHostName -Credential $ cred $ diskToDriveVolume = Get-WmiObject Win32_DiskDrive -ComputerName $ WinHostName -Predelbeni $ kredit | % $ disk = $ _ $ particije = "ASSOCIATORS OF" + "Win32_DiskDrive.DeviceID = '$ ($ disk.DeviceID)'" + "WHERE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -Query $ particije WinnerHHEmeNestNameNameNamestitve -Poverilna $ dobropis | % $ particija = $ _ $ pogoni = "ASSOCIATORS OF" + "Win32_DiskPartition.DeviceID = '$ ($ partition.DeviceID)'" + "WHERE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -Query $ Drives -ComNerName -Poverilna $ dobropis | % New-Object -Type PSCustomObject -Property @ Disk = $ disk.DeviceID DriveLetter = $ _. DeviceID VolumeName = $ _. VolumeName # dobite serijsko številko predvajanja pogona ($ 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 # Poštevanje vseh diskov VM, preslikava na diske Windows s SerialNumber / UUID $ diskMaps = @ () foreach ($ vmDisk v $ vmDisks) $ vmDiskUuid = $ virtualDiskManager.queryvirtualdisnamuememememidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidemidem. , $ vmDatacenterView.MoRef) | foreach $ _. substituti (","). substituti ('-', ") $ windowsDisk = $ winDisk | kjer $ _. SerialNumber -eq $ vmDiskUuid if (-not $ windowsDisk) $ windowsDisk = $ winDisk | kjer je $ _. AltSerialNumber -eq $ vmDisk.ScsiCanonicalName.substring (12,24) $ curDiskMap = "" | izberite vmDiskDatastore, vmDiskVmdk, vmDiskName, windowsDiskIndex, vmDiskUuid, windowsDeviceID, pogoni, zvezki $ curDiskMap.vmDiskDatastore = $ vmDisk.filename.split (']') [0]] $ []] ['] $ vmDisk.filename.split (']') [1] .trim () $ curDiskMap.vmDiskName = $ vmDisk.Name $ curDiskMap.windowsDiskIndex = if ($ windowsDisk) $ windowsDisk.Index drugo "NAPAKA  $ curDiskMap.vmDiskUuid = $ vmDiskUuid $ curDiskMap.windowsDeviceID = if ($ windowsDisk) $ windowsDisk.DeviceID else "FAILED TO MATCH" $ driveVolumes = $ diskToDriveVolume | kjer je $ _. disk -eq $ windowsDisk.DeviceID $ curDiskMap.drives = $ driveVolumes.DriveLetter $ curDiskMap.volumes = $ driveVolumes.VolumeName $ diskMaps + = $ curDiskMap $ diskMaps = $ diskMaps | vrsta [int] $ _. vmDiskName.split (") [2] $ diskMaps | ft 

Dodatno vrne informacije o črkah pogona in nalepkah glasnosti Windows.

Zdaj lahko preprosto ugotovite, kateremu navideznemu pogonu pogon ustreza Windows..

Če so navidezni diski v operacijskem sistemu Windows povezani prek točke pritrditve, izhod ne bo vseboval informacij o dodeljeni črki pogona in oznaki glasnosti.