Virtuális gépek klónozása – és Powershell

Időnként rámtör a vágy, hogy legyen 4-5 virtuálistesztgépem valami érdekes teszthez (legutóbb pl. SQL 2005 cluster költöztetése domainek között – amúgy not supported, de kíváncsi voltam, hogy hogy megy – nehezen). Ebben az unalmas rész a négy gép elkészítése úgy, hogy azok esetleg később is használhatóak legyenek (=nem nagyon gányolva).

Mivel a céges körülményeim megkövetelnek bizonyos fokú platformfüggetlenséget, VMWare Servert használok, így Linux és Windows alól is hozzáférek a gépeimhez (ha valaki tervezi, hogy lelöveti azt az embert, aki kitalálta, h webes kliense legyen a VMWare Server 2-nek, szóljon, beszállok egy ötössel). A VMWare pedig szereti átfedéssel megosztani a memóriát a gépek között, ha lehet, tehát amikor csak lehet, egyféle oprendszer azonos szintre patchelt változatát használom, tényleg működik. Innen pedig már adja magát a telepítés menete:

  1. Feltelepítem az operációs rendszert, felpatchelem, aktiválom, ha kell.
  2. Felteszem a VMWare Toolst.
  3. Engedélyezem az RDP-t.
  4. Feldobom a Sysinternals Suite-ot.
  5. Lekapcsolom a gépet.
  6. Lemásolom a virtuális gép könyvtárát
  7. Átnevezem a fájlokat, átírom a konfigokat
  8. Behúzom az új gépeket a VMWare-be, és konfigurálom őket. Két dolgot szoktam mindig megtenni: letörlöm a hozott hálókártyát, és újat adok hozzá, illetve lefuttatom a Sysinternals NewSID.exe nevű programját. Ezzel a klónozás kockázatait minimalizáltam, és nekem kényelmesebb, mint a sysprep.

Ez utóbbi kiválóan megy párhuzamosan is, két domaint és egy clustert kevesebb, mint másfél óra alatt készre konfiguráltam. Amit utálok, az a fájlok átnevezgetése, mert én 2 GB-os fájlokra szoktam felvágni a virtuális diszket, hogy legyen reális esélyem lemásolni később, meg az átnevezések mellett egyes fájlokba bele is kell túrni. Mivel alapvetően lusta vagyok, írtam egy PowerShell scriptet, ami 4 soros, és elintézi ezt a részt, az a lényeg, hogy a könyvtár neve passzoljon az új gép nevéhez.

#Az aktuális alkönyvtár nevét kivesszük regexppel a teljes útvonalból, amit a $PWD változó tartalmaz – ez lesz az új gép neve
if ($PWD -match ‘\\(?[^\\]*)$’) { $newmachine = $matches.dirname}
# A régi gép neve a virtuális gép konfig fájljához passzol általában
$oldmachine = (gci *.vmx).Basename
# átnevezem a fájlokat
gci| Rename-Item -NewName {$_.Name -replace $oldmachine, $newmachine}
# majd search-and-replace abban a pár fájlban, ahol szükséges
gci “$($newname).vm*”|% {(gc $_) -replace $oldmachine, $newmachine | sc $_}
[/c#]

Igazából csak ezért a scriptért írtam az egész postot, mindenkit biztatok arra, hogy írjon scripteket. A jó üzemeltető scripteket ír, esetleg alkalmazásokat is, de valamit csak tud. Ha Windows, akkor meg PowerShell. Szeretném külön felhívni a figyelmet arra, hogy milyen botrányosan egyszerű a fájlokban kicserélgetni tartalmat, és azt is hozzáteszem, hogy ez kis fájlokra működik, amiket gond nélkül be lehet nyalni a memóriába.

Tessék scriptelni :)

Leave a comment