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)

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 remoteuser@remotehost.somewhere.example.com:/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 remoteuser@remotehost.somewhere.example.com:/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

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 remoteuser@remotehost.somewhere.example.com:/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).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.