Muszę przenieść ogromną liczbę plików mp3 między dwoma serwisami (Ubuntu). Przez ogromny mam na myśli około miliona plików, które mają średnio 300 KB. Próbowałem, scp
ale zajęłoby to około tygodnia. (około 500 KB / s) Jeśli przesyłam pojedynczy plik przez HTTP, otrzymuję 9-10 MB / s, ale nie wiem, jak przenieść je wszystkie.
Czy istnieje sposób na szybkie przesłanie ich wszystkich?
linux
performance
file-transfer
nicudotro
źródło
źródło
Odpowiedzi:
Poleciłbym smołę. Gdy drzewa plików są już podobne, rsync działa bardzo dobrze. Ponieważ jednak rsync wykona wiele przejść analiz dla każdego pliku, a następnie skopiuje zmiany, jest znacznie wolniejszy niż tar dla początkowej kopii. To polecenie prawdopodobnie zrobi to, co chcesz. Skopiuje pliki między komputerami, a także zachowa zarówno uprawnienia, jak i prawa użytkownika / grupy.
Zgodnie z komentarzem Mackintosha poniżej, jest to polecenie, którego można użyć dla rsync
źródło
~
znaczenia jest aktywny tylko wtedy, gdy SSH używa terminala. Nie dzieje się tak w przypadku podania polecenia zdalnego (chyba że podasz-t
opcję). Twoja obawa jest nieważna.Zewnętrzny dysk twardy i dostawa kurierem tego samego dnia.
źródło
Użyłbym rsync.
Jeśli masz je wyeksportowane przez HTTP z dostępnymi listami katalogów, możesz użyć argumentu wget i --mirror.
Już widzisz, że HTTP jest szybszy niż SCP, ponieważ SCP szyfruje wszystko (a tym samym wąskie gardło na procesorze). HTTP i rsync będą działać szybciej, ponieważ nie szyfrują.
Oto kilka dokumentów na temat konfigurowania rsync na Ubuntu: https://help.ubuntu.com/community/rsync
Te dokumenty mówią o tunelowaniu rsync przez SSH, ale jeśli przenosisz dane w prywatnej sieci LAN, nie potrzebujesz SSH. (Zakładam, że jesteś w prywatnej sieci LAN. Jeśli uzyskujesz 9-10 MB / s przez Internet, chcę wiedzieć, jakie masz połączenia!)
Oto kilka innych bardzo podstawowych dokumentów, które pozwolą ci skonfigurować względnie niezabezpieczony serwer rsync (bez zależności od SSH): http://transamrit.net/docs/rsync/
źródło
--include
i,--exclude
aby uzyskać więcej szczegółów.Bez długich dyskusji używaj netcat, sieciowego szwajcarskiego noża. Bez obciążeń protokołu, kopiujesz bezpośrednio do gniazda sieciowego. Przykład
źródło
pv
) i sprawdzaniem integralności przezsha512sum
, ale po lekkim odwróceniu cały strumień jest zły, ponieważ nie ma możliwości jego odzyskania. To, czego naprawdę potrzebujemy, to lekki protokół, taki jak torrent strumieniowy dla tych bezpiecznych środowisk, gdy potrzebujemy niskiego obciążenia - coś, co sprawdzi integralność na poziomie porcji (np. 4 MB) i może ponownie wysłać porcję, gdy ktoś zawiedzie. TCP crc nie jest wystarczająco wydajny.Z dużą ilością plików, jeśli korzystasz z rsync, spróbowałbym uzyskać wersję 3 lub nowszą na obu końcach . Powodem jest to, że mniejsza wersja wyliczy każdy plik przed rozpoczęciem przesyłania. Nowa funkcja nosi nazwę przyrostowej rekurencji .
źródło
rsync, podobnie jak inni już polecili. Jeśli obciążenie procesora związane z szyfrowaniem stanowi wąskie gardło, użyj innego algorytmu mniej obciążającego procesor, takiego jak blowfish. Np. Coś takiego
rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path
źródło
Przenosząc wczoraj 80 TB danych (miliony małych plików), przejście z
rsync
natar
okazało się znacznie szybsze , ponieważ przestaliśmy próbowaći
tar
zamiast tego przełączyłem się na ...Ponieważ te serwery są w tej samej sieci LAN, miejsce docelowe jest zamontowane w systemie plików NFS w systemie źródłowym, który wykonuje wypychanie. Nie,
atime
spraw, by było jeszcze szybciej, postanowiliśmy nie zachowywać plików:Poniższa grafika przedstawia różnicę dokonanej zmiany z rsync na tar. To był pomysł mojego szefa, a mój kolega wykonał go i napisał świetny artykuł na swoim blogu . Po prostu lubię ładne zdjęcia . :)
źródło
tar cf - directory | ttcp -t dest_machine
z ftp.arl.mil/mike/ttcp.htmlPodczas kopiowania dużej liczby plików odkryłem, że narzędzia takie jak tar i rsync są bardziej nieefektywne, niż muszą być ze względu na narzut związany z otwieraniem i zamykaniem wielu plików. Napisałem narzędzie open source o nazwie szybki archiwizator, które jest szybsze niż tar dla tych scenariuszy: https://github.com/replicon/fast-archiver ; działa szybciej, wykonując wiele jednoczesnych operacji na plikach.
Oto przykład szybkiego archiwizatora vs. tar na kopii zapasowej ponad dwóch milionów plików; szybkie archiwizowanie zajmuje 27 minut, a tar trwa 1 godzinę 23 minuty.
Aby przesyłać pliki między serwerami, możesz użyć szybkiego archiwizatora z ssh, w następujący sposób:
źródło
Używam również metody smołowania poprzez
netcat
, ale wolę używaćsocat
- dużo więcej mocy, aby zoptymalizować dla twojej sytuacji - na przykład, poprawiając ms. (Także śmiej się, jeśli chcesz, alesocat
łatwiej mi zapamiętać argumenty, ponieważ są one spójne). Dla mnie jest to ostatnio bardzo częste, ponieważ przenosiłem rzeczy na nowe serwery:Aliasy są opcjonalne.
źródło
Inną alternatywą jest Unison . W tym przypadku może być nieco bardziej wydajny niż Rsync i nieco łatwiej jest skonfigurować odbiornik.
źródło
Wygląda na to, że w górnej odpowiedzi może być kilka literówek. To może działać lepiej:
źródło
wget --mirror
jak sugerował Evan Anderson lub dowolny inny klient HTTP. Uważaj, aby nie mieć żadnych nieprzyjemnych dowiązań symbolicznych lub mylących plików indeksu. Jeśli wszystko, co masz, to pliki MP3, powinieneś być bezpieczny.Zauważyłem, że inni ludzie zalecają używanie netcat . Na podstawie moich doświadczeń z tym mogę powiedzieć, że jest powolny w porównaniu z innymi rozwiązaniami.
źródło
Dzięki cudownej odpowiedzi Scott Pack (wcześniej nie wiedziałem, jak to zrobić z ssh), mogę zaoferować to ulepszenie (jeśli
bash
jest to twoja powłoka). Spowoduje to dodanie kompresji równoległej, wskaźnika postępu i sprawdzenie integralności w łączu sieciowym:pv
jest ładnym programem do przeglądania postępu dla twojego potoku ipigz
jest równoległym programem gzip, który domyślnie wykorzystuje tyle wątków, ile ma procesor (wierzę, że maksymalnie 8). Można dostosować poziom kompresji, aby lepiej dopasować stosunek CPU do sieci przepustowość i zamieniać go zpxz -9e
apxz -d
jeśli masz dużo więcej niż przepustowość procesora. Musisz tylko sprawdzić, czy obie sumy są zgodne po zakończeniu.Ta opcja jest przydatna w przypadku bardzo dużych ilości danych, a także sieci o dużych opóźnieniach, ale nie jest bardzo pomocna, jeśli łącze jest niestabilne i spada. W takich przypadkach rsync jest prawdopodobnie najlepszym wyborem, ponieważ można go wznowić.
Przykładowe dane wyjściowe:
W przypadku urządzeń blokowych:
Oczywiście, upewnij się, że mają ten sam rozmiar lub limit z count =, skip =, seek = itd.
Kiedy
dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
kopiuję systemy plików w ten sposób, często najpierw zeruję większość nieużywanego miejsca, co przyspiesza xfer.źródło
Nie sądzę, że będziesz mieć coś lepszego niż scp, chyba że zainstalujesz szybsze karty sieciowe. Jeśli robisz to przez Internet, to nie pomoże.
Poleciłbym użycie rsync . Może nie być szybszy, ale przynajmniej jeśli zawiedzie (lub zamkniesz go, ponieważ trwa to zbyt długo), możesz wznowić od miejsca, w którym przerwałeś następnym razem.
Jeśli możesz podłączyć 2 maszyny bezpośrednio za pomocą gigabitowego Ethernetu, prawdopodobnie będzie to najszybsze.
źródło
Przy prędkości 100 Mb / s teoretyczna przepustowość wynosi 12,5 MB / s, więc przy 10 MB / s radzisz sobie całkiem nieźle.
Chciałbym również powtórzyć sugestię wykonania rsync, prawdopodobnie przez ssh. Coś jak:
Przy prędkości 100 Mb / s procesory powinny być w stanie obsłużyć szyfrowanie / deszyfrowanie bez znaczącego wpływu na szybkość przesyłania danych. A jeśli przerwiesz przepływ danych, powinieneś być w stanie wznowić od miejsca, w którym przerwałeś. Uwaga: z „milionami” plików uruchomienie potrwa chwilę, zanim cokolwiek faktycznie przeniesie.
źródło
Zetknąłem się z tym wyjątkiem, że przesyłałem dzienniki Oracle.
Oto podział
scp
rsync
FTP / HTTP
Użyłem FTP z wielkim sukcesem (gdzie wielki sukces odpowiada ~ 700 Mb / s w sieci Gb). Jeśli otrzymujesz 10 MB (co odpowiada 80 Mb / s), prawdopodobnie coś jest nie tak.
Co możesz nam powiedzieć o źródle i miejscu docelowym danych? Czy to pojedynczy dysk na pojedynczy dysk? RAID na USB?
Wiem, że to pytanie ma już odpowiedź, ale jeśli twoja sieć działa tak wolno na kablu krosowym Gb / s, coś absolutnie wymaga naprawy.
źródło
Nie wspomniałeś, czy te dwa komputery są w tej samej sieci LAN, czy też bezpieczny kanał (tj. Korzystający z SSH) jest obowiązkowy, ale innym narzędziem, którego możesz użyć, jest netcat .
Chciałbym użyć następujących na maszynie odbierającej:
Następnie po stronie wysyłającej:
Ma następujące zalety:
gzip -1
Zapewnia lekką kompresję bez nasycania CPU więc to sprawia, że dobry kompromis, dając trochę kompresji przy zachowaniu maksymalnej przepustowości. (Prawdopodobnie nie jest to tak korzystne dla danych MP3, ale nie boli.)na przykład,
Uwagi:
tar
zamiast,cpio
jeśli wolisz.gzip -1
siebie, a nie do uniknięcia nasycenia procesora. (Lub przynajmniej ustaw CompressionLevel na 1.)źródło
Prosty scp z odpowiednimi opcjami z łatwością osiągnie 9-10 MB / s przez LAN:
Z tymi opcjami jest prawdopodobne, że przepustowość stała się 4x lub 5x szybsza niż brak opcji (domyślnie)
źródło
Jeśli masz serwer ftp po stronie src, możesz użyć ncftpget ze strony ncftp . Działa prefekt z małymi plikami, ponieważ używa tar wewnętrznie.
Jedno porównanie pokazuje to: przenoszenie 1,9 GB małych plików (33926 plików)
źródło
Możesz także spróbować użyć polecenia BBCP, aby wykonać przelew. To buforowany równoległy ssh, który naprawdę krzyczy. Zwykle możemy uzyskać 90% + szybkość linii, pod warunkiem, że będziemy mogli zasilać rurę.
Zwykle bardzo się staramy, aby uniknąć konieczności przenoszenia się. Korzystamy z pul ZFS, do których zawsze możemy po prostu „dodać” więcej miejsca na dysku. Ale czasami ... musisz po prostu przenieść rzeczy. Jeśli mamy „żywy” system plików, którego kopiowanie może potrwać kilka godzin (lub dni), nawet gdy przechodzimy do pełnego wybuchu .. wykonujemy procedurę wysyłania dwuetapowego ZFS:
Wysyłamy również zrzuty ZFS również przez BBCP ... Maksymalizuje to wykorzystanie naszej sieci i minimalizuje czas przesyłania.
BBCP jest dostępny bezpłatnie, możesz google go i jest to prosta kompilacja. Po prostu skopiuj go do swojego / usr / local / bin na komputerach src i docelowych, a będzie to w zasadzie działać.
źródło
Wydaje mi się, że moja odpowiedź jest nieco spóźniona, ale mam dobre doświadczenia z używaniem mc (Midnight Commander) na jednym serwerze do łączenia się przez SFTP z drugim serwerem.
Opcja połączenia przez FTP znajduje się w menu „Lewy” i „Prawy”, wprowadzając następujący adres:
lub
Możesz nawigować i wykonywać operacje na plikach prawie jak na lokalnym systemie plików.
Ma wbudowaną opcję kopiowania w tle, ale wolę używać polecenia screen i odłączać się od ekranu podczas kopiowania mc (myślę, że wtedy też działa szybciej).
źródło
Do @scottpack odpowiedź opcji rSync
Aby wyświetlić postęp przesyłania, użyj opcji „--progess” jako opcji po opcji -avW w poleceniu, jak pokazano poniżej.
źródło
Oto szybki test porównawczy niektórych technik,
Liczba plików: 9632, Całkowity rozmiar: 814 MiB, Średni rozmiar: 84 KiB
Komenda tar / netcat była następująca:
źródło
rsync lub możesz spakować go do tar, aby wszystko było w jednym pliku, a następnie scp. Jeśli brakuje ci miejsca na dysku, możesz przesłać tar bezpośrednio nad ssh podczas jego tworzenia.
źródło
Jeśli wysyłasz pliki MP3 i inne skompresowane pliki, niewiele zyskasz na żadnym rozwiązaniu, które próbuje dalej kompresować te pliki. Rozwiązaniem byłoby stworzenie wielu połączeń między dwoma serwerami, a tym samym większy nacisk na przepustowość między dwoma systemami. Po osiągnięciu maksymalnego poziomu nie można wiele zyskać bez ulepszania sprzętu. (Na przykład szybsze karty sieciowe między tymi serwerami.)
źródło
Wypróbowałem kilka narzędzi do kopiowania pliku 1 GB Wynik jest poniżej: HTTP najszybszy, z najwolniejszym wget -c nc sekunda w linii scp i kilka razy się nie udało. Nie ma możliwości wznowienia działania rsync używa ssh jako backendu, więc ten sam wynik. Podsumowując, wybrałbym http z wget -bqc i dałbym mu trochę czasu. Mam nadzieję, że to pomaga
źródło
Musiałem skopiować dysk BackupPC na inną maszynę.
Użyłem rsync.
Maszyna miała 256 MB pamięci.
Procedura, którą zastosowałem była następująca:
rsync
bez-H
(zajęło 9 godzin)cpool
katalog i zacząłem z tympc
katalogiem; Przerwałem transfer.rsync
z-H
flagą, a wszystkie pliki twarde połączone wpc
katalogu zostały poprawnie przeniesione (procedura znalazła wszystkie rzeczywiste pliki w,cpool
a następnie połączone zpc
katalogiem) (zajęło 3 godziny).Na koniec mogłem sprawdzić,
df -m
czy nie wydano żadnej dodatkowej przestrzeni.W ten sposób omijam problem z pamięcią i rsync. Cały czas mogę zweryfikować wydajność za pomocą top i top, a na koniec przesłałem 165 GB danych.
źródło