Kopiowanie plików przez multicast
Czasem (trenerzy czuja to wyjatkowo czesto i dotkliwie) trzeba na wiele komputerów przeslac ten sam, calkiem duzy (wiele gigabajtów) plik. Oczywiscie mozna utworzyc sobie udzial sieciowy i kopiowac kolejno, ale z punktu widzenia wydajnosci, podejscie jest dosc marne, bo dokladnie te same dane przesylane sa wiele razy.
Teoretyczne rozwiazanie problemu znane jest od dawna: komputer, na którym plik juz jest, powinien pakiet po pakiecie wyslac jego zawartosc w siec, a kto jest chetny – poslucha sobie i zbierze calosc na swoim dysku. W ten sposób, zamiast przesylac plik ilestam razy, wszystko odbywa sie jeden raz, na czym znaczaco zyskuje szybkosc calej operacji.
Poniewaz taka metoda (uzywajaca w praktyce transmisji multicast) jest bardzo kuszaca, dawno temu powstaly narzedzia pozwalajace na takie kopiowanie. Tymczasem, warto wiedziec, ze mozna to samo osiagnac przy pomocy WDS i WAIK. Wysylaniem plików zajmuje sie serwer WDS, a ich odbieraniem – uruchomiony na stacjach program wdsmcast.exe z pakietu WAIK.
Na przykladzie (za Johanem Arwidmarkiem, MVP ze Szwecji):
- Po stronie serwera WDS tworzymy przestrzen nazw dla folderu z plikami do przeslania - WDSUTIL /New-Namespace /NamespaceType:AutoCast /Server:MDT01 /FriendlyName:"Really Large Files" /Namespace:"Really Large Files" /ContentProvider:WDS /ConfigString:D:\Exported_VMs
- Po stronie klienta, uruchamiamy wdsmcast z odpowiednimi parametrami - wdsmcast.exe /verbose /transfer-file /server:MDT01 /namespace:"Really Large Files" /SourceFile:"DC01.rar" /DestinationFile:"C:\VMs\DC01.rar" /Username:TSLAB\BuildAccount /password:"P@ssw0rd"
I dziala. Poniewaz wygodniej przesyla sie jeden duzy plik zamiast wielu malych, warto komplet danych do dystrybucji spakowac wczesniej w jedno duze archiwum. Pomijajac wygode, sam fakt skompresowania, dodatkowo przyspieszy cala operacje.
Autor: Grzegorz Tworek [MVP]
Comments
Anonymous
January 01, 2003
Kopiowanie kaskadowe ma sens, ale w praktyce łatwo się w tym pogubić i trzeba się nabiegać między komputerami... ;)Anonymous
January 01, 2003
watro pliki kompresować przy użyciu imagex - zachowują wtedy uprawnienia NTFS :)technet.microsoft.com/.../cc749003(WS.10).aspxAnonymous
September 03, 2010
Inna metoda to użycie np uTorrent ;) - ładnie wystawia wskazany folder innym klientom w sieci. To tak w ramach metod alternatywnychAnonymous
September 05, 2010
Wdsmcast ma bardzo dużą jedną zaletę - czeka z opuszczeniem programu do momentu pobrania pliku, Dzieki temu można utworzyć prosty skrypt: rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 wimfltr.inf wdsmcast /transfer-file /server:192.168.66.140 /namespace:"wimtest" /username:koppejoe /password:asdf1234! /sourcefile:temp.wim /destinationfile:c:temp.wim mkdir c:mount imagex /mount c:temp.wim 1 c:mount move c:mount* c:templates imagex /unmount c:mount rmdir c:mount Który nam załatwia cała dystrybucje obrazu z wirtualkami. Co do uTorrenta - rozwiązanie dobre jeśli mamy kilka stacji w różnych sieciach, ze słabymi routerami. Ale jesli mamy do wrzucenia na 20 stacji w tej samej sieci maszyny wirtualne ważące po np. 20gb, przez sieć 1gb, to zakładając zapis na dysku strumienia 50mB/s, otrzymamy jakieś 6 z groszami minuty. Przy uTorrencie pomijając gorsze parametry zapisu - dysk musi sekwencyjnie czytać i zapisywać dane, mamy 20*20gb do przesłania przez sieć, czyli nawet wypychając w pełni gigabitową rurką mamy zdecydowanie dłuższy czas wypchnięcia paczki - w granicach 30-50 minut. Oczywiście jest trzecia droga - kopiowanie kaskadowe. Najpierw kopiujemy na jeden komputer (t6 - 2 stacje), później ten jeden i serwer kopiują na kolejny (t12-4 stacje), później te 4 kopiją na następne 4 (t18 - 8 stacji)..(t24 - 16 stacji)...(t30 - 21stacji) - przy czym ten algorytm, z powodu ciągłego zapisu i ciągłego odczytu z dysku będzie zdecydowanie szybszy od uTorrenta.