Najszybszy sposób na skopiowanie folderu zawierającego wiele plików przez SSH

13

Jaki jest najlepszy sposób na duplikowanie plików na serwerze przez ssh?

W moim przypadku: mówię o powielaniu sklepu magento. (15000 plików ~ 50 MB)

cp -a source destination

Zajmuje godziny ... (w moim przypadku serwer to 2.4 Xeon, 2 GB pamięci RAM)

powiększenie
źródło

Odpowiedzi:

19

Jednym słowem: rsync.

Pamiętaj, że jeśli masz wolne łącze lub serwer jest mocno obciążony, narzędzie używane do kopiowania nie będzie wąskim gardłem, a jakikolwiek sposób kopiowania i tak będzie powolny.

Powinno to zapewnić podstawowe użycie do kopiowania między komputerem lokalnym a serwerem zdalnym: http://oreilly.com/pub/h/38

Aby skopiować z komputera lokalnego na zdalny serwer (oczywiście musisz zastąpić ścieżki, nazwę użytkownika i adres hosta):

rsync -avz -e ssh /path/on/local/computer [email protected]:/path/on/server
  • -a archiwum
  • -v gadatliwy
  • -z Kompresja
  • -e ssh „użyj tunelu SSH”

Aby skopiować w drugim kierunku, przełącznik ścieżek (pierwszy jest z a drugie z ):

rsync -avz -e ssh [email protected]:/path/on/server /path/on/local/computer

Ale rsync jest użyteczny nawet do kopiowania rzeczy na tym samym serwerze:

rsync -av /path-to/copy/from /path_to/copy/to
Piskvor opuścił budynek
źródło
2
Zwróć uwagę, że @Piskvor nie uwzględnił -zopcji kopiowania lokalnego, ponieważ powoduje to niepotrzebny narzut. IMHO, powinieneś używać tylko -zpodczas używania rsync przez wolne łącze sieciowe. Jeśli kopiujesz duże ilości danych ponad 100Base-T, możesz być w porządku bez -z. Dzięki szybkiemu połączeniu sieciowemu kompresja może ustalić procesor i zagłodzić inne procesy.
tomlogic 16.01.12
@tomlogic: Dobra uwaga - innymi słowy, nie używaj -zdo kopiowania lub kopiowania w sieci LAN na jednym komputerze; testuj z lub bez -zkopiowania przez Internet (jedno lub drugie może być szybsze, w zależności od wielu rzeczy).
Piskvor opuścił budynek
1
Pominąłbym również kompresję, jeśli wiesz, że Twoje pliki są już skompresowane, na przykład synchronizację drzewa folderów pełnego plików JPEG, ponieważ nie ma nic do zyskania.
przerwa na linii
Uwaga: -e sshjest teraz domyślny dla hostów zdalnych, więc nie jest konieczne jawne przekazywanie opcji.
Piskvor opuścił budynek
3

Inne słowo: scp

scp /path/on/local/computer [email protected]:/path/on/server

W przypadku pojedynczych transakcji scp jest przydatny. Jeśli jest dużo plików, dobrym pomysłem jest rsync. Jeśli połączenie zostanie przerwane, rsync może rozpocząć od miejsca, w którym zostało przerwane.

Wiedziałem, że rsync ma kompresję ( -z), i właśnie dowiedziałem się, że scp również ( -C).

tomlogic
źródło
Cóż, IIRC oba używają algorytmów kompresji SSH, przynajmniej dla operacji sieciowych.
Piskvor opuścił budynek
0

W twoim ustawieniu rsync prawdopodobnie wystarcza ... ale na przykład, jeśli jest wiele małych plików, może być szybsze tarowanie plików najpierw niż przesyłanie następnie przez rsync. Dzieje się tak, ponieważ przenoszenie właściciela, znaczników czasu i uprawnień jest czasem cięższe niż sam plik, jeśli plik jest mały. Tar połączy wszystkie te informacje w jednym pliku, a rsync skopiuje większe bloki.

Lub jeszcze lepiej, jeśli nie są potrzebne żadne zabezpieczenia, użyj tar i nc:

Na miejscu przygotuj demona odbierającego, rozpakuj i rozpakuj:

nc -l -p 12345 | pigz -d | tar xvf - 

W źródle, tar wszystko, kompresję równoległą i wysłać do miejsca docelowego:

tar cvf - ./ | pigz | nc host 12345
higuita
źródło