Pri povećanju veličine ili brisanju diska u VMWare za Windows virtualne strojeve, ponekad je teško razumjeti koji VMware virtualni disk odgovara određenom disku u Windows VM-u. Ako nema puno diskova i svi se razlikuju po veličini, lako je pronaći pravi. Ali što trebam učiniti ako se za VM stvori nekoliko VMDK (ili RDM) pogona iste veličine ili se stvori nekoliko virtualnih SCSI kontrolera za VM? Kako ne pogriješiti i odabrati točno pogon koji želite proširiti (ili smanjiti) Windows administratora.
U ovom ćemo članku pogledati kako preslikati Windows diskove na virtualne diskove (VMDK) na VMWare VM-ovima..
sadržaj:
- Provjera broja SCSI uređaja u sustavu Windows i VMWare
- Kako preslikati Windows pogone u VMDK datoteke pomoću UUID / SerialNumber putem PowerShell-a?
Provjera broja SCSI uređaja u sustavu Windows i VMWare
Otvorite konzolu za upravljanje diskom Disk Manager (diskmgmt.msc) u sustavu Windows (u našem primjeru Windows Server 2016). Naziv SCSI kontrolera i broj SCSI uređaja na njemu nisu prikazani na popisu pogona. Da biste odredili SCSI broj uređaja, kliknite na pogon i odaberite Nekretnine. Kao što vidite, na kartici opći u polju lokacija naznačene su informacije o priključku uređaja VMWare SCSI uređaj s virtualnim diskom.
- Položaj 160 = SCSI upravljač sabirnice 0
- ID ciljanja 1 = SCSI ID uređaja 1
Kombinirajte primljene podatke i dobijte adresu diska SCSI (0: 1).
Sada otvorite svojstva virtualnog stroja VMWare u vSphere klijentu. Pronađite pogon čiji se virtualni čvor uređaja podudara s dobivenim ID-om. U našem primjeru ovo SCSI (0: 1) Tvrdi disk 2.
Ako je mnogo virtualnih diskova s različitim SCSI kontrolerima konfigurirano u virtualnom stroju (možete dodati do 4 SCSI kontrolera sa 16 diskova u svakom VM-u), ručno je pronaći broj SCSI uređaja prilično teško. Također, imajte na umu da se brojevi SCSI kontrolera u sustavu Windows i VMWare mogu razlikovati..
Kako preslikati Windows pogone u VMDK datoteke pomoću UUID / SerialNumber putem PowerShell-a?
Drugi način za preslikavanje VMWare virtualnih diskova na diskove unutar gostujuće VM je njihova usporedba prema jedinstvenom identifikatoru diska. Od VMWare-a zove se ovaj atribut UUID (Jedinstveni ID) i u sustavu Windows - Serijski broj. Pogledajmo kako dobiti UUID i serijski broj virtualnih diskova putem PowerShell-a.
Prema zadanim postavkama, svi VMWare VM-ovi omogućeni sudisk.EnableUUID = TRUE
, to znači da bi gostujući OS trebao vidjeti virtualne identifikatore diska.Da biste dobili informacije o diskovima u sustavu Windows, možete koristiti cmdlete modula za pohranu ili WMI zahtjeve. jer u našem slučaju još uvijek postoje VM-ovi sa sustavom Windows Server 2008 R2 u kojima ne postoji modul za pohranu, a mi ćemo koristiti WMI.
Da biste dobili SCSI broj kontrolera, SCSI broj uređaja na njemu, serijski broj virtualnog diska (SerialNumber / UUID), veličinu i broj diska u sustavu Windows, pokrenite naredbu PowerShell:
$ DiskInfo = foreach ($ disk u Get-WmiObject Win32_DiskDrive) [pscustomobject] @ "DeviceID" = $ disk.DeviceID; "Opis" = $ disk.Caption; "Kapacitet (GB)" = [matematika] :: Okrugli ($ disk.size / 1GB, 0); "SerialNumber" = $ disk.SerialNumber "SCSIControllerNum" = $ disk.scsiport; "SCSIDeviceNum" = $ disk.scsitargetid; $ DiskInfo | ft
U našem primjeru utvrdili smo da Windows vidi tri pogona:
- FIZIČKIDRIVE0: SCSI priključak 0, SCSI cilj 0, serijski 6000c2939b153417dedbdce371ed497b
- FIZIČKIDRIVE1: SCSI priključak 0, SCSI cilj 1, serijski 6000c2950ee961954909259642bb03bf
- PHYSICALDRIVE1: SCSI Port 4, SCSI Target 10, Serial 6000c2995fc3c4728de8b0596bb02ce3
Pokušajmo sada dobiti brojeve SCSI kontrolera i UUID-ove diskova, koji su navedeni u postavkama VMware virtualnog stroja. Da biste dobili parametre VM, koristite 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 VirtualDiskManager-virtualDiskManager $ vmresults = @ () foreach ($ vmHardDisk u $ vmHardDisks) $ string = $ vmHardDisk.Filename $ vmHardDiskUuid = ($ vmHardidta.ckch.uchtu.Each -Object .. _ $ zamijeni ( ""), zamjena ( '-' ")) $ vmresult =" „| Select-objekt vmHardDiskDatastore, vmHardDiskVmdk, vmHardDiskName, vmHardDiskSize, vmHardDiskUuid $ vmresult.vmHardDiskDatastore = $ vmHardDisk.filename .split (']') [0] .split ('[') [1] $ vmresult.vmHardDiskVmdk = $ vmHardDisk.filename.split (']') [1] .trim () $ vmresult.vmHardDiskName = $ vmHardDisk .Name $ vmresult.vmHardDiskSize = $ vmHardDisk.CapacityGB $ vmresult.vmHardDiskUuid = $ vmHardDiskUuid $ vmresults + = $ vmresult $ vmresult | ft
Ova se skripta povezuje na vCenter poslužitelj (ili ESXi) i za navedeni VM dobit će popis diskova. Nakon pokretanja skripte, dobit ćete popis virtualnih diskova za VM. Rezultat treba sadržavati ime DataStore, put do datoteke vmdk, broj diska, njegovu veličinu i UUID.
Sada, pomoću primljenih UUID-ova, možete ručno preslikati diskove koji su vidljivi u gostujućem Windows-u pomoću VMWare virtualnih diskova.
Ako imate administratorska prava na virtualnom stroju za koji morate preslikati Windows diskove i vmdk datoteke u VMWare, možete upotrijebiti jednostavniju skriptu PowerShell-a. Skripta pristupa gostujućem Windows-u preko mreže, prikuplja informacije o lokalnim diskovima i prikazuje prepisku s VMWare diskovima.
Potpuni kôd skripte PowerShell:
Uvoz-Modul VMware.VimAutomation.Core -ErrorAction SilentlyContinue connect-viserver vcenter1 $ vmName = "MSK-sql1" $ WinHostName = "msk-sqlclu1.winitpro.ru" # dobili popis virtualnih strojeva diskova VMWare $ vmDisks = Get VM -Ime $ vmName | Get-HardDisk $ vmDatacenterView = Get-VM -Name $ vmName | Get-Datacenter | Get-View $ virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager # Administratorski račun i lozinka za pristup gostujućem OS $ kredit = if ($ kredit) $ cred else Get-Credential # Nabavite popis Windows diskova i particija via WMI $ winDisk = Get-WmiObject -Class Win32_DiskDrive -ComputerName $ WinHostName -Credential $ kredit $ diskToDriveVolume = Get-WmiObject Win32_DiskDrive -ComputerName $ WinHostName -Credential $ kredit | % $ disk = $ _ $ particije = "ASSOCIATORS OF" + "Win32_DiskDrive.DeviceID = '$ ($ disk.DeviceID)'" + "WHERE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -Query $ particije WinnerHHNKNameNestMenNameDestitKonName -Kreditni $ kredit | % $ particija = $ _ $ diskovi = "ASSOCIATORS OF" + "Win32_DiskPartition.DeviceID = '$ ($ particija.DeviceID)'" + "WHERE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -Query $ pogoni-Winner Winner Winner -Kreditni $ kredit | % New-Object -Type PSCustomObject -Property @ Disk = $ disk.DeviceID DriveLetter = $ _. DeviceID VolumeName = $ _. VolumeName # # nabavite serijski broj pogonskog predznaka ($ disk u $ winDisk) $ disk | Add-Member -MemberType NoteProperty -Name AltSerialNumber -Value $ null $ diskSerialNumber = $ disk.SerialNumber if ($ disk.Model -notchch '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 # Nabrajanje svih VM diskova, mapiranje na Windows diskove SerialNumber / UUID $ diskMaps = @ () foreach ($ vmDisk u $ vmDisks) $ vmDiskUuid = $ virtualDiskManager.queryvirtualdisnamuememememidemidemidemidemidemidemidemidemidemidemidemidemidemidemidem. , $ vmDatacenterView.MoRef) | foreach $ _. zamjeniti (","). zamijeniti ('-', ") $ windowsDisk = $ winDisk | gdje je $ _. serijski broj-eq $ vmDiskUuid if (-not $ windowsDisk) $ windowsDisk = $ winDisk | gdje je $ _. AltSerialNumber -eq $ vmDisk.ScsiCanonicalName.substring (12,24) $ curDiskMap = "" | odaberite vmDiskDatastore, vmDiskVmdk, vmDiskName, windowsDiskIndex, vmDiskUuid, windowsDeviceID, pogone, sveske $ curDiskMap.vmDiskDatastore = $ vmDisk.filename.split (']') [0]] $ 1 [m] ['] $ vmDisk.filename.split (']') [1] .trim () $ curDiskMap.vmDiskName = $ vmDisk.Name $ curDiskMap.windowsDiskIndex = if ($ windowsDisk) $ windowsDisk.Index else "POGLEDATI UTAKMICU" $ curDiskMap.vmDiskUuid = $ vmDiskUuid $ curDiskMap.windowsDeviceID = if ($ windowsDisk) $ windowsDisk.DeviceID else "FAILED TO MATCH" $ driveVolumes = $ diskToDriveVolume | gdje $ _. Disk -eq $ windowsDisk.DeviceID $ curDiskMap.drives = $ driveVolumes.DriveLetter $ curDiskMap.volumes = $ driveVolumes.VolumeName $ diskMaps + = $ curDiskMap $ diskMaps = $ diskMaps | vrsta [int] $ _. vmDiskName.split (") [2] $ diskMaps | ft
Uz to vraća informacije o slovima pogona i oznakama volumena Windows.
Sada lako možete shvatiti kojem virtualnom pogonu pogon odgovara u sustavu Windows..
Ako su virtualni diskovi u sustavu Windows povezani putem točke montiranja, izlaz ne sadrži podatke o dodijeljenom slovu pogona i oznaci volumena.