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 (4)

  1. Kopiowanie kaskadowe ma sens, ale w praktyce łatwo się w tym pogubić i trzeba się nabiegać między komputerami… 😉

  2. Anonymous says:

    watro pliki kompresować przy użyciu imagex – zachowują wtedy uprawnienia NTFS 🙂

    technet.microsoft.com/…/cc749003(WS.10).aspx

  3. ToMeK says:

    Inna metoda to użycie np uTorrent 😉 – ładnie wystawia wskazany folder innym klientom w sieci. To tak w ramach metod alternatywnych

  4. peki says:

    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.

Skip to main content