Następujące polecenie działa zgodnie z oczekiwaniami ...
cp -ur /home/abc/* /mnt/windowsabc/
Czy rsync ma nad tym jakąś przewagę? Czy jest lepszy sposób na synchronizację folderu kopii zapasowej co 24 godziny?
Następujące polecenie działa zgodnie z oczekiwaniami ...
cp -ur /home/abc/* /mnt/windowsabc/
Czy rsync ma nad tym jakąś przewagę? Czy jest lepszy sposób na synchronizację folderu kopii zapasowej co 24 godziny?
Odpowiedzi:
rsync niekoniecznie jest bardziej wydajne ze względu na bardziej szczegółową inwentaryzację plików i bloków, które wykonuje. Algorytm jest fantastyczny w tym, co robi, ale musisz zrozumieć swój problem, aby wiedzieć, czy naprawdę będzie to najlepszy wybór.
W bardzo dużym systemie plików (powiedzmy, wielu tysiącach lub milionach plików), gdzie pliki są zwykle dodawane, ale nie aktualizowane, opcja „cp -u” będzie prawdopodobnie bardziej wydajna. cp podejmuje decyzję o kopiowaniu wyłącznie na podstawie metadanych i może po prostu zabrać się do kopiowania.
Zauważ, że możesz chcieć trochę buforować, np. Używając tar zamiast zwykłego cp, w zależności od rozmiaru plików, wydajności sieci, innej aktywności dysku itp. Bardzo przydatny jest następujący pomysł:
tar cf - . | tar xCf directory -
Same metadane mogą faktycznie stać się znaczącym narzutem w bardzo dużych (klastrowych) systemach plików, ale rsync i cp będą miały ten problem.
Wydaje się, że rsync jest często preferowanym narzędziem (iw aplikacjach ogólnego przeznaczenia jest moim domyślnym wyborem), ale prawdopodobnie jest wiele osób, które na ślepo używają rsync bez zastanowienia.
Napisane polecenie utworzy nowe katalogi i pliki z aktualną datą i sygnaturą czasową oraz z Tobą jako właścicielem. Jeśli jesteś jedynym użytkownikiem swojego systemu i robisz to codziennie, może to nie mieć większego znaczenia. Ale jeśli zachowanie tych atrybutów jest dla Ciebie ważne, możesz zmodyfikować swoje polecenie za pomocą
cp -pur /home/abc/* /mnt/windowsabc/
-P zachowa własność, znaczniki czasu i tryb pliku. Może to być bardzo ważne w zależności od tego, co tworzysz kopię zapasową.
Alternatywnym poleceniem z rsync byłoby
rsync -avh /home/abc/* /mnt/windowsabc
W przypadku rsync -a oznacza "archiwum", które zachowuje wszystkie wymienione powyżej atrybuty. -v oznacza "gadatliwy", co po prostu pokazuje, co robi z każdym uruchomionym plikiem. -z jest tutaj pomijane dla kopii lokalnych, ale służy do kompresji, która pomoże, jeśli tworzysz kopię zapasową przez sieć. Wreszcie -h mówi rsync, aby raportował rozmiary w formatach czytelnych dla człowieka, takich jak MB, GB itp.
Z ciekawości uruchomiłem jedną kopię, aby przygotować system i uniknąć uprzedzeń w stosunku do pierwszego uruchomienia, a następnie odmierzyłem czas w testowym uruchomieniu 1 GB plików z wewnętrznego dysku SSD na dysk twardy podłączony przez USB. Te po prostu skopiowano do pustych katalogów docelowych.
cp -pur : 19.5 seconds
rsync -ah : 19.6 seconds
rsync -azh : 61.5 seconds
Oba polecenia wydają się być mniej więcej takie same, chociaż kompresowanie i rozpakowywanie oczywiście obciąża system, w którym przepustowość nie stanowi wąskiego gardła.
Szczególnie, jeśli używasz systemu plików typu „kopiuj przy zapisie”, takiego jak BTRFS lub ZFS, rsync
jest znacznie lepszy.
Używam BTRFS i mam to w moim ~/.bashrc
:
alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
Ważną flagą dla CoW FS, takich jak BTRFS, jest --inplace
to, że kopiuje tylko zmienioną część plików, nie tworzy nowych dla małych zmian między i-węzłami plików itp. Zobacz to .
--inplace
opcji instrukcji : The option implies --partial
. Więc myślę, że --partial
nie jest to wymagane, przynajmniej w obecnej wersji.
Należy pamiętać, że podczas wewnętrznego przesyłania plików na maszynę, tj. Bez przesyłania sieciowego, użycie opcji -z może mieć ogromną różnicę w czasie transferu.
Transfer w ramach tej samej maszyny
Case 1: With -z flag:
TAR took: 9.48345208168
Encryption took: 2.79352903366
CP took = 5.07273387909
Rsync took = 30.5113282204
Case 2: Without the -z flag:
TAR took: 10.7535531521
Encryption took: 3.0386879921
CP took = 4.85565590858
Rsync took = 4.94515299797
W przypadku kopii lokalnej jedyną zaletą rsync jest to, że unika kopiowania, jeśli plik już istnieje w katalogu docelowym. Definicja „już istnieje” to (a) ta sama nazwa pliku (b) ten sam rozmiar (c) ten sam znacznik czasu. (Może ten sam właściciel / grupa; nie jestem pewien ...)
„Algorytm rsync” świetnie nadaje się do przyrostowych aktualizacji pliku przez powolne łącze sieciowe, ale nie da wiele za kopię lokalną, ponieważ musi odczytać istniejący (częściowy) plik, aby wykonać obliczenia „diff”.
Jeśli więc często używasz tego rodzaju poleceń, a zestaw zmienionych plików jest niewielki w stosunku do całkowitej liczby plików, powinieneś zauważyć, że rsync jest szybszy niż cp. (Również rsync ma --delete
opcję, która może Ci się przydać).
Nie chodzi o to, co jest bardziej wydajne.
Polecenia „rsync” i „cp” nie są równoważne i służą do różnych celów.
1- rsync może zachować czas tworzenia istniejących plików. (używając opcji -a)
2- rsync uruchomi proces wieloprocesowy i przesyła przy użyciu lokalnych gniazd lub gniazd sieciowych. (tj. rozwidla się na wiele procesów).
3- Wieloprocesowość i wątkowanie zwiększą przepustowość podczas kopiowania dużej liczby małych plików, a nawet wielu większych plików.
Podsumowując, rsync jest przeznaczony do dużych danych, a cp do mniejszego kopiowania lokalnego. (Od MB do małego zakresu GB). Kiedy zaczynasz korzystać z wielu GB lub zakresu TB, skorzystaj z rsync. I oczywiście kopie sieciowe, rsync do końca.
-a
porównania.
jeśli używasz cp, nie zapisuje istniejących plików podczas kopiowania folderów o tej samej nazwie. Powiedzmy, że masz te foldery:
/myFolder
someTextFile.txt
/someOtherFolder
/myFolder
wellHelloThere.txt
Następnie kopiujesz jeden na drugim:
cp /someOtherFolder/myFolder /myFolder
wynik:
/myFolder
wellHelloThere.txt
Przynajmniej tak się dzieje na macOS i chciałem zachować pliki różnic, więc użyłem rsync.