Kopiowanie plików przez multicast

Kopiowanie plików przez multicast

  • Comments 4
  • Likes

Czasem (trenerzy czują to wyjątkowo często i dotkliwie) trzeba na wiele komputerów przesłać ten sam, całkiem duży (wiele gigabajtów) plik. Oczywiście można utworzyć sobie udział sieciowy i kopiować kolejno, ale z punktu widzenia wydajności, podejście jest dość marne, bo dokładnie te same dane przesyłane są wiele razy.

Teoretyczne rozwiązanie problemu znane jest od dawna: komputer, na którym plik już jest, powinien pakiet po pakiecie wysłać jego zawartość w sieć, a kto jest chętny – posłucha sobie i zbierze całość na swoim dysku. W ten sposób, zamiast przesyłać plik ileśtam razy, wszystko odbywa się jeden raz, na czym znacząco zyskuje szybkość całej operacji.

Ponieważ taka metoda (używająca w praktyce transmisji multicast) jest bardzo kusząca, dawno temu powstały narzędzia pozwalające na takie kopiowanie. Tymczasem, warto wiedzieć, że można to samo osiągnąć przy pomocy WDS i WAIK. Wysyłaniem plików zajmuje się serwer WDS, a ich odbieraniem – uruchomiony na stacjach program wdsmcast.exe z pakietu WAIK.

Na przykładzie (za Johanem Arwidmarkiem, MVP ze Szwecji):

  • Po stronie serwera WDS tworzymy przestrzeń nazw dla folderu z plikami do przesłania - 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 działa. Ponieważ wygodniej przesyła się jeden duży plik zamiast wielu małych, warto komplet danych do dystrybucji spakować wcześniej w jedno duże archiwum. Pomijając wygodę, sam fakt skompresowania, dodatkowo przyspieszy całą operację.

Autor: Grzegorz Tworek [MVP]

Comments
  • watro pliki kompresować przy użyciu imagex - zachowują wtedy uprawnienia NTFS :) technet.microsoft.com/.../cc749003(WS.10).aspx

  • Inna metoda to użycie np uTorrent ;) - ładnie wystawia wskazany folder innym klientom w sieci. To tak w ramach metod alternatywnych

  • 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:koppe\joe /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.

  • Kopiowanie kaskadowe ma sens, ale w praktyce łatwo się w tym pogubić i trzeba się nabiegać między komputerami... ;)

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment