Przenoszenie około 300 GB plików z jednego serwera na drugi

20

Mam dziś około 200 000 plików, które przesyłam na nowy serwer. Nie robiłem nic na tak dużą skalę i chciałem uzyskać porady, jak powinienem to zrobić. Przenoszę je między dwie dystrybucje Centos 6 i znajdują się one w różnych lokalizacjach w kraju. Nie mam wystarczającej ilości miejsca na dysku twardym na oryginalnym serwerze, aby spakować wszystkie katalogi i pliki do jednego ogromnego archiwum, więc mam pytanie, jak mam przenieść wszystkie te pliki? rsync? jakiś specjalny sposób korzystania z rsync? Wszelkie uwagi / sugestie, jak to zrobić, byłyby niesamowite.

Dzięki

EDYCJA: dla tych, którzy zastanawiają się, WYSOKIE sugeruję użycie a screenpodczas uruchamiania takiego dużego rsyncpolecenia. Zwłaszcza, gdy może wystąpić coś głupiego i utracisz połączenie z serwerem A, z którego uruchamiasz rsyncpolecenie. Następnie wystarczy odłączyć ekran i wznowić go później.

MasterGberry
źródło
4
Próbowałeś już rsync? Może na małym zestawie plików? Powinno być idealnym narzędziem do tego.
slhck
Prawie na pewno nie jest to najlepsze narzędzie do tego zadania, ale możesz być zainteresowany faktem, że możesz przesyłać strumieniowo tar przez połączenie ssh zamiast kompresji do pliku przed przeniesieniem pliku:tar cz | ssh [email protected] tar xz
Aesin
2
może to być nie na temat, ale (szczególnie przy pierwszym ładowaniu, a następnie używaniu rsyncdo kolejnych aktualizacji): „Nigdy nie lekceważ przepustowości wozu kombi pełnego taśm” (tj .: czy zastanawiałeś się nad umieszczeniem drugiego dysku twardego (lub podłączeniem USB2) / dysk usb3), wykonaj kopię zapasową na nim i wyślij go za pośrednictwem fedexa do zdalnej lokalizacji? Może być DUŻO szybszy niż cokolwiek innego i zaoszczędzić przepustowość do innych zastosowań.
Olivier Dulac
Nie mam żadnych limitów BW na jednego dostawcę, a drugiego nie osiągnę w tym miesiącu. Więc tak naprawdę nie mam problemu z jego marnowaniem: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Bob

Odpowiedzi:

24

Wystarczy ukształtowaniu Simona odpowiedź , rsyncjest idealnym narzędziem do pracy:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Zakładając, że masz dostęp ssh do zdalnego komputera, chciałbyś zrobić coś takiego:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Spowoduje to skopiowanie katalogu path/to/local/foodo /path/to/remote/barzdalnego serwera. Zostanie utworzony nowy podkatalog o nazwie bar/foo. Jeśli chcesz tylko skopiować zawartość katalogu, bez tworzenia katalogu o tej nazwie w celu, dodaj ukośnik:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Spowoduje to skopiowanie zawartości foo/do katalogu zdalnego bar/.

Kilka odpowiednich opcji:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
terdon
źródło
więc czy mógłbym to zrobić, rsync -hrtplu --progressgdybym chciał zobaczyć postęp w toku?
MasterGberry
@MasterGberry, właśnie. Mam uruchomiony skrypt kopii zapasowej rsync --progress --stats -hrtl --update source destination.
terdon
Wydaje mi się, że mam problemy z uruchomieniem go. rsync -hrtplu --progress --rsh='ssh -p2202'używam i nie można się połączyć. Otrzymuj błąd 255. Ale jestem w to wciągnięty. Więc wiem, że to nie zapora ogniowa ... czy muszę podać hasło również przez cmd? a może po prostu mnie o to nie poprosi?
MasterGberry
Derp, NVM. Zapomniałem o ruchu wychodzącym na mojej zaporze. Dzięki
MasterGberry,
Ważna uwaga: używając rsync, zachowaj szczególną ostrożność, używając "--delete": dużo o tym poczytaj, testuj w innych folderach (/ tmp / ...) i strzeż się zmian podczas dodawania lub nie kończących "/" na końcu katalogu źródłowego lub docelowego.
Olivier Dulac
14

To zależy od tego, jak szybko trzeba go skopiować i jaka jest dostępna przepustowość.

W przypadku słabego połączenia sieciowego rozważ przepustowość ciężarówki wypełnionej taśmami. (Przeczytaj: prześlij 2,5-calowy dysk twardy lub po prostu napisz go tam sam. 300 dysków gigabitowych powinno być łatwe do znalezienia).

Jeśli czas jest mniej krytyczny lub masz dużą przepustowość, rsync jest świetny. Jeśli wystąpi błąd, możesz po prostu kontynuować bez ponownego kopiowania wcześniejszych plików.

[Edytuj] Zapomniałem dodać, że możesz uruchomić rsync kilka razy, jeśli twoje dane zostaną wykorzystane podczas kopiowania.

Przykład:
1) Dane w użyciu. Rsync -> Wszystkie dane zostaną skopiowane. To może zająć troche czasu.
2) Uruchom ponownie rsync, tylko zmienione pliki zostaną skopiowane. To powinno być szybkie.

Możesz to zrobić kilka razy, dopóki nie zostaną wprowadzone żadne zmiany, lub możesz to zrobić w inteligentny / bezpieczny sposób, czyniąc dane tylko do odczytu podczas kopiowania. (np. jeśli jest na używanym wspólnym zestawie, który współużytkuje tylko do odczytu. Lub zsynchronizuj dane, to w nocy ustaw udział tylko do odczytu, gdy uruchomisz go po raz drugi).

Hennes
źródło
1
Żaden serwer nie powinien mieszkać w miejscu, w którym przepustowość nie jest w stanie obsłużyć 300G w rozsądnym czasie ...
Dan
1
To zależy od tego, co jest „rozsądne”. Powiedz, że najsłabszy link to 100 Mbit (nie dbam o to, czy jest to limit wysyłania z biura, czy pobieranie z drugiej strony). To z grubsza pozwala na 10 MB / s. (div przez 10 wydaje się rozsądny, wiem, że możesz uzyskać nieco więcej, jeśli wszystko pójdzie idealnie. Np. nikt inny nie używa linii do niczego). 10 MB / s ~~ 600 MB / min ~~ 36000 MB / godzinę ~~ 36 GB / godzinę ~~ 300 GB to 8h20min. Można to zrobić z dnia na dzień. To także powoduje wiele założeń. Np. Jeśli przesyłanie trwa tylko 2 Mb (mamy biura o takiej prędkości), zajmuje to 50 razy więcej (415 godzin lub 17,3 dni).
Hennes
Yikes! Tak, 8-10 jest rozsądne, ale rzeczywiście poczyniłem szereg założeń.
Dan
2
@ Dan Jeśli wymagane jest, aby serwer był uruchomiony i obsługiwał żądania, nasycenie przepustowości łącza jest prawdopodobnie złym pomysłem. Aby to uwzględnić, musiałbyś sztucznie zmniejszyć prędkość transferu.
Bob
6

Wybrałbym rsync! Używam go do tworzenia kopii zapasowych mojego serwera na serwerze zewnętrznym i działa dobrze. Zwykle jest kilka MB do skopiowania, ale w niektóre dni zwiększa się do 20-30 GB i zawsze działało bez problemu.

Szymon
źródło
0

rsync przez NFS przy użyciu połączenia Gigabit zajmie prawie około 10 godzin. Lepiej będzie skopiować dane na dysk twardy i przenieść je między serwerami. Jeśli chcesz wykonać kopię dysku w trybie jeden do jednego, użyj dd lub czegoś podobnego, aby utworzyć surowy obraz dysku. Korzystanie z ssh (scp) powoduje ogromne obciążenie. Testowany empirycznie na połączeniu Gigabit. rsync jest dobry w tworzeniu przyrostowej synchronizacji między dwoma serwerami używanymi w HA lub w trybie kopii zapasowej. Zgaduję.

Paweł
źródło
Język i styl tej odpowiedzi wymagają ulepszenia.
FSMaxB
Rsync jest szczególnie świetny, jeśli pliki mogą się zmieniać podczas kopiowania. Po prostu uruchom go kilka razy. Za pierwszym razem wszystkie dane zostaną skopiowane. Drugi raz tylko to, co zostało zmienione podczas pierwszej (długiej) kopii. Trzeci raz miałby miejsce w nocy lub z akcjami tylko do odczytu.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.poza tym, że jest w całym kraju, więc zajęłoby to dłużej.
Rob
@ FSMaxB: Zrobię to później, dzięki.
Paweł
@Rob: Przeczytałem to;) Że serwery znajdują się w dwóch różnych lokalizacjach. Musisz więc obliczyć, co będzie dla Ciebie lepsze. Podróż po całym kraju (sprawdzanie kosztów paliwa itp.) Lub korzystanie z połączenia sieciowego. Co będzie bardziej korzystne.
Paweł
0

po raz pierwszy użyj NFS i tar / untar (NFS jest najszybszym protokołem w tym przypadku, tar, aby zaoszczędzić przepustowość sieci przez większe wykorzystanie procesora)

tar cf - * | ( cd /target; tar xfp -)

następnym razem / s użyj rsync

strumień
źródło
Jeśli masz wystarczającą moc procesora, możesz to poprawić, dodając gzip do pętli. Bez NFS możesz używać netcat. (Lub nawet oba: tar -cf - * | gzip | nc -p 4567i nc -l 4567 | gunzip | tar xf -.
Hennes
dzięki Hennes, to był mój pomysł, ale zapomniałem gzip w fajkach
odrzutowiec