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