Rutynowo muszę skopiować zawartość folderu w sieciowym systemie plików na komputer lokalny. W folderze zdalnym znajduje się wiele plików (1000), które są względnie małe, ale ze względu na obciążenie sieci zwykłe kopiowanie cp remote_folder/* ~/local_folder/
zajmuje bardzo dużo czasu (10 minut).
Uważam, że dzieje się tak, ponieważ pliki są kopiowane sekwencyjnie - każdy plik czeka na zakończenie poprzedniego, zanim rozpocznie się kopiowanie.
Jaki jest najprostszy sposób na zwiększenie prędkości tej kopii? (Zakładam, że należy wykonać kopię równolegle.)
Spakowanie plików przed kopiowaniem niekoniecznie przyspieszy, ponieważ wszystkie mogą być zapisane na różnych dyskach na różnych serwerach.
Odpowiedzi:
Dopóki ograniczysz uruchamiane polecenia kopiowania, prawdopodobnie możesz użyć skryptu takiego jak ten opublikowany przez Scrutinizer
źródło
&
końcucp
polecenia pozwala nawhile
kontynuowanie pętli i uruchomienie następnego polecenia cp bez czekania.xargs
Polecenie przekazuje pliki w grupach 4 (MAX_PARALLEL) dowhile
pętli.cp
. Oczywiście możesz przyspieszyć obliczenia poprzez wielowątkowość. Ale nie sądzę, że to samo dotyczy kopiowania danych na dysku twardym.Jeśli masz zainstalowany GNU Parallel http://www.gnu.org/software/parallel/, możesz to zrobić:
Możesz zainstalować GNU Parallel po prostu przez:
Obejrzyj filmy wprowadzające do GNU Parallel, aby dowiedzieć się więcej: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
źródło
Jednym ze sposobów byłoby użycie rsync, który skopiuje tylko zmiany - nowe pliki i zmienione części innych plików.
http://linux.die.net/man/1/rsync
Uruchomienie dowolnej formy równoległej operacji kopiowania prawdopodobnie spowoduje zalanie sieci, a operacja kopiowania po prostu zatrzyma się lub wystąpią wąskie gardła na dysku źródłowym lub docelowym.
źródło
Szczerze mówiąc, najlepszym narzędziem jest gsutil Google. Obsługuje kopie równoległe z rekurencją katalogu. Większość innych metod, które widziałem, nie obsługuje rekursji katalogów. W swoich dokumentach nie wspominają o lokalnym systemie plików o kopiach lokalnego systemu plików, ale działa to jak urok.
Jest to kolejny plik binarny do zainstalowania, ale prawdopodobnie taki, który mógłbyś już uruchomić, biorąc pod uwagę wszystkie obecnie przyjęte usługi chmurowe.
źródło
Równoległe rsync przy użyciu find:
w korporacyjnej sieci LAN pojedynczy rsync wykonuje około 800 Mb / s; przy 6-8 zadaniach jestem w stanie uzyskać ponad 2,5 Gb / s (kosztem dużego obciążenia). Ograniczone przez dyski.
źródło
Jest wiele rzeczy, które należy rozważyć w zależności od posiadanej topologii. Ale zanim zaczniesz myśleć o złożonych rozwiązaniach, możesz po prostu spróbować podzielić zadanie na dwa zadania i sprawdzić, czy potrzebny czas znacznie się skróci:
Następnym razem spróbuj:
(możesz zamienić [al] * na coś, co pasuje do około połowy plików - może [0-4] * - w zależności od zawartości folderu)
Jeśli czas nie poprawi się radykalnie, ważniejsze może być sprawdzenie, czy konieczne jest skopiowanie wszystkich plików (jaki jest stosunek zmienionych plików do wszystkich plików?)
źródło