kopiowanie plików na maszynę wirtualną

Hyper-v w poczatkowych zalozeniach odcinal guesty od hosta. Jest to podyktowane kwestiami bezpieczenstwa poprzez ograniczenie mozliwosci wymiany informacji pomiedzy hostem i guestem. Nietrudno sobie wyobrazic scenariusz, w którym zakazony host móglby zarazic wszystkie guesty.

Taka izolacja ma swoje wady - o ile bezpieczenstwo jest wieksze, o tyle pewne scenariusze staja sie zlozone i niewygodne. Przykladem takiego zastosowania sa laboratoria, charakteryzujace sie m.in. tym,  ze czesto trzeba przerzucac pliki pomiedzy hostem a guestem. W koncu nie ma dedykowanej wersji Hv dla klientów - w Windows 8.x jest takie samo Hv jak na serwerze.

Wraz z Windows NT6.3 ulegly zmianie komponenty integracyjne Hv [dzialaja dla guestów równiez w starszych wersjach]. W nowym Hv, czy tez raczej w nowej wersji dodatku integracyjnego, pojawila sie usluga o nazwie "guest services", która jest standarwowo wylaczona. Po jej wlaczeniu pojawia sie mozliwosc kopiowania plików bezposrednio do maszyny wirtualnej. Usluge mozna wlaczyc z poziomu PS poleceniem  Enable-VMIntegrationService. Wlaczenie uslugi dla wszystkich maszyn:

 get-vm|enable-vmintegrationservice -name "Guest Service Interface"

 a dla klikaczy:

kopiowane wykonuje sie poleceniem Copy-VMFile. jego skladnia jest nieco bardziej skomplikowana niz tracyjnego 'copy':

Copy-VMFile "<vm name>" -SourcePath "$pwd\<filename>" -DestinationPath "c:\temp\<filename>" -CreateFullPath -FileSource host

'createFullPath' gwarantuje zalozenie katalogu jesli ten istnieje. parametr 'filesource' na ta chwile przyjmuje tylko ta jedna wartosc - bedzie rozszerzony w przyszlosci. np. kopiowanie jest tylko jednokierunkowe - z hosta na guesta /:

polecenie obsluguje przekierowanie - pipelining, dzieki czemu latwo mozna sobie wyobrazic hurtowe kopiowanie - np. jakiejs poprawki - na wszystkie hosty:

get-vm|{

enable-vmintegrationservice -name "Guest Service Interface"

copy-vmfile -sourcepath "c:\hotfix\hotfixabc.exe" -destinationpath "c:\hotfix\hotifxabc.exe" -createfullpath -filesource host

disable-vmintegrationservice -name "Guest Service Interface"

}

Na serwerach silnie niezalecane jest utrzymywanie tej uslugi wlaczonej, i kazda taka operacja powinna wygladac wlasnie w ten sposób - wlaczenie, wykorzystanie, wylaczenie.

Usluga dziala na poziomie szyny VMBus, dzieki czemu nie obciaza komponentów sieciowych i nie wymaga nawet skofigurowanego adresu IP - co jest niezmiernie istotne przy scenariuszach deploymentowych.

Na codeplex jest juz narzedzie dla tych, którzy caly czas opieraja sie PowerShell [nie róbcie tego! (: ]

eN.

autor:nExoR