Muszę skopiować duże drzewo katalogów, około 1,8 TB. Wszystko jest lokalne. Z przyzwyczajenia korzystałbym rsync
, jednak zastanawiam się, czy ma to sens i czy raczej powinienem użyć cp
.
Martwię się o uprawnienia i identyfikator uid / gid, ponieważ muszą one zostać zachowane w kopii (wiem, że rsync to robi). A także rzeczy takie jak dowiązania symboliczne.
Miejsce docelowe jest puste, więc nie muszę się martwić o warunkową aktualizację niektórych plików. To wszystko dysk lokalny, więc nie muszę się martwić o ssh ani sieć.
Powodem, dla którego chciałbym się oderwać od rsync, jest to, że rsync może zrobić więcej, niż potrzebuję. Pliki sum kontrolnych rsync. Nie potrzebuję tego i martwię się, że może to potrwać dłużej niż CP.
Więc co o tym myślisz, rsync
albo cp
?
Odpowiedzi:
Użyłbym rsync, ponieważ oznacza to, że jeśli zostanie przerwane z jakiegokolwiek powodu, możesz go łatwo zrestartować przy bardzo niskim koszcie. Ponieważ jest rsync, może nawet częściowo zrestartować duży plik. Jak wspominają inni, może łatwo wykluczyć pliki. Najprostszym sposobem na zachowanie większości rzeczy jest użycie
-a
flagi - „archiwum”. Więc:Chociaż identyfikatory UID / GID i dowiązania symboliczne są przechowywane przez
-a
(patrz-lpgo
), twoje pytanie sugeruje, że możesz potrzebować pełnej kopii informacji o systemie plików; i-a
nie obejmuje twardych dowiązań, rozszerzonych atrybutów lub list ACL (w systemie Linux) ani powyższych ani widelców zasobów (w systemie OS X). Zatem, aby uzyskać solidną kopię systemu plików, musisz uwzględnić te flagi:Domyślne cp uruchomi się ponownie, chociaż
-u
flaga zostanie „skopiowana tylko wtedy, gdy plik SOURCE jest nowszy niż plik docelowy lub gdy brakuje pliku docelowego” . A-a
flaga (archiwum) będzie rekurencyjna, nie będzie kopiować plików, jeśli będziesz musiał zrestartować i zachować uprawnienia. Więc:źródło
Podczas kopiowania do lokalnego systemu plików zawsze używam następujących opcji rsync:
Oto moje rozumowanie:
Widziałem 17% szybsze transfery przy użyciu powyższych ustawień rsync za pomocą następującego polecenia tar, jak sugeruje inna odpowiedź:
źródło
rsync: --no-compress: unknown option
Wystąpił następujący błąd: @Ellis Percival.rm -rf /src/
.Kiedy muszę skopiować dużą ilość danych, zwykle używam kombinacji tar i rsync. Pierwszym krokiem jest tarowanie go, coś takiego:
Zwykle przy dużej liczbie plików, niektóre z nich nie będą w stanie obsłużyć tar z jakiegokolwiek powodu. A może proces zostanie przerwany lub jeśli jest to migracja systemu plików, możesz chcieć wykonać wstępną kopię przed faktycznym krokiem migracji. W każdym razie po początkowej kopii wykonuję krok rsync, aby zsynchronizować wszystko:
Pamiętaj, że końcowy ukośnik
/src/
jest ważny.źródło
pv
w środku, aby móc obserwować postęp, szacując rozmiar wszystkich używanych danychdf
. Użyłem również--numeric-owner
, ponieważ dysk źródłowy był z innego systemu i nie chciałemtar
bałaganić właścicieli:tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp
rsync
Oto rsync, którego używam, wolę cp dla prostych poleceń, a nie to.
CPIO
Oto sposób, który jest jeszcze bezpieczniejszy, CPIO. Jest tak szybki jak smoła, może trochę szybciej.
smoła
Jest to również dobre i trwa w przypadku błędów odczytu.
Pamiętaj, że wszystkie są tylko dla lokalnych kopii.
źródło
Cokolwiek wolisz. Po prostu nie zapomnij o
-a
przełączniku, kiedy zdecydujesz się użyćcp
.Jeśli naprawdę potrzebujesz odpowiedzi: użyłbym rsync, ponieważ jest on znacznie bardziej elastyczny. Potrzebujesz zamknąć przed zakończeniem kopiowania? Po prostu ctrl-c i wznów jak tylko wrócisz. Chcesz wykluczyć niektóre pliki? Po prostu użyj
--exclude-from
. Chcesz zmienić własność lub uprawnienia? rsync zrobi to za ciebie.źródło
rsync
Komenda zawsze oblicza sumy kontrolne na każdy bajt to transferów.Opcja wiersza poleceń
--checksum
dotyczy tylko tego, czy sumy kontrolne plików są używane do określenia, które pliki mają zostać przesłane, tj .:Strona ta mówi również:
Tak więc
rsync
zawsze oblicza sumę kontrolną całego pliku po stronie odbierającej, nawet gdy-c/ --checksum
opcja jest wyłączona.źródło
rsync -aPhW --protocol=28
pomaga przyspieszyć te duże kopie dzięki RSYNC. Zawsze używam rsync, ponieważ myśl o byciu w połowie 90GiB i łamanie go odstrasza mnie od CPźródło
rsync jest świetny, ale ma problemy z naprawdę dużymi drzewami katalogów, ponieważ przechowuje drzewa w pamięci. Chciałem tylko sprawdzić, czy naprawią ten problem, gdy znajdę ten wątek.
Znalazłem też:
http://matthew.mceachen.us/geek/gigasync/
Możesz także ręcznie rozbić drzewo i uruchomić wiele rsyncs.
źródło
Ten wątek był bardzo przydatny, a ponieważ było tak wiele opcji, aby osiągnąć wynik, postanowiłem przetestować kilka z nich. Wierzę, że moje wyniki mogą być pomocne dla innych, którzy mają pojęcie o tym, co działało szybciej.
Aby przenieść 532 GB danych rozproszonych między 1753200 plików , mieliśmy te czasy:
rsync
zajęło 232 minutytar
zajęło 206 minutcpio
zajęło 225 minutrsync + parallel
zajęło 209 minutW moim przypadku wolałem używać
rsync + parallel
. Mam nadzieję, że te informacje pomogą większej liczbie osób zdecydować się na te alternatywy.Pełny test porównawczy został opublikowany tutaj
źródło
cp
? To jest tytuł pytania!cp
jest niepewny, tj .: kiedy się psuje, musisz zacząć od nowa, w ten sposób faworyzuję opcje, które można wznowić, ergorsync
jest moim ulubionym :)Kiedy robię lokalną kopię katalogu lokalnego, mam doświadczenie, że „cp -van src dest” jest o 20% szybszy niż rsync. Jeśli chodzi o możliwość ponownego uruchomienia, to właśnie to robi „-n”. Wystarczy tylko częściowo skopiować skopiowany plik. Nie bolesne, chyba że jest to ISO lub coś takiego.
źródło
ARJ TO TAKIE STARE SZKOŁA !! Naprawdę wątpię, aby ARJ i / lub rsync dały wydajność.
Zdecydowanie zawsze używam cpio:
Jest to prawie szybkie niż CP, zdecydowanie szybsze niż smoła i bez robienia czegokolwiek.
źródło
cpio
.cpio
niestety ma górny limit 8 GB na pliki.find
polecenia, które zostało wymienione, ma w nim rurkę:find . -print | cpio -pdm /target/folder
Zdecydowanie chcesz wypróbować rclone . To jest szalone szybko:
Jest to lokalna kopia zi na dysk SSD LITEONIT LCS-256 (256 GB).
Możesz dodać
--ignore-checksum
przy pierwszym uruchomieniu, aby był jeszcze szybszy.źródło
Oba będą działać dobrze.
źródło
tar
wykonałby to zadanie, ale nie wznowiłby przerywania, tak jak rsync.źródło
Co się stanie, jeśli użyjesz ARJ?
gdzie
-jm -m1
są poziomy kompresji i-je
sprawia, że jest to plik wykonywalny. Teraz masz zamknięty pakiet plików.Następnie w celu wyodrębnienia do mapy docelowej
gdzie zostanie utworzona mapa źródłowa (gdzie
-y
zawsze jest akceptacja, nadpisywanie, pomijanie itp.)Następnie można scp ftp plik pakietu do obszaru docelowego i wykonać go, jeśli to możliwe.
źródło
Istnieje kilka przyspieszeń, które można zastosować do
rsync
:Uniknąć
-z
--compress
Kompresja / : spowoduje obciążenie tylko procesora, ponieważ transfer nie odbywa się przez sieć, ale przez pamięć RAM.--append-verify
: wznowić przerwany transfer. To brzmi jak dobry pomysł, ale ma niebezpieczny przypadek awarii: każdy plik docelowy o tym samym rozmiarze (lub większym) niż źródło zostanie Zignorowany. Ponadto sumuje na koniec cały plik, co oznacza brak znaczącego przyspieszenia--no-whole-file
podczas dodawania niebezpiecznego przypadku awarii.Posługiwać się
-S
/--sparse
: zamienia sekwencje zer na rzadkie bloki--partial
lub-P
który jest--partial --progress
: zapisz częściowo przesłane pliki do przyszłego wznowienia. Uwaga: pliki nie będą miały nazwy tymczasowej, więc upewnij się, że nic innego nie oczekuje na użycie miejsca docelowego, dopóki cała kopia nie zostanie ukończona.--no-whole-file
więc wszystko, co musi zostać wysłane ponownie, wykorzystuje transfer delta. Odczytywanie połowy częściowo przesłanego pliku jest często znacznie szybsze niż ponowne zapisywanie.--inplace
aby uniknąć kopiowania plików (ale tylko wtedy, gdy nic nie czyta miejsca docelowego, dopóki cały transfer nie zostanie zakończony)źródło