Drugi przykład odczytuje dane wsadowe za pomocą standardowego wejścia, dzięki czemu plik wsadowy nie musi być najpierw kopiowany na komputer zdalny. W tym przykładzie unika się skryptu foo.sh, ponieważ musiał on użyć zmodyfikowanej opcji --read-batch, ale można edytować plik skryptu, jeśli chcesz go użyć (po prostu upewnij się, że żadna inna opcja nie próbuje użyć standardowego dane wejściowe, takie jak opcja „--exclude-from = -”).
Ostrzeżenia:
Opcja odczytu-partii oczekuje, że drzewo docelowe, które aktualizuje, będzie identyczne z drzewem docelowym, które zostało użyte do utworzenia zestawu plików aktualizacji wsadowej. W przypadku napotkania różnicy między drzewami docelowymi aktualizacja może zostać odrzucona z ostrzeżeniem (jeśli wydaje się, że plik jest już aktualny) lub może zostać podjęta próba aktualizacji pliku, a następnie, jeśli plik nie zostanie zweryfikowany aktualizacja została odrzucona z błędem. Oznacza to, że należy ponownie uruchomić operację odczytu i odczytu, jeśli polecenie zostało przerwane. Jeśli chcesz wymusić, aby zawsze wykonywano aktualizację pakietową, niezależnie od rozmiaru i daty pliku, użyj opcji -I (podczas odczytywania partii). Jeśli wystąpi błąd, drzewo docelowe prawdopodobnie będzie w stanie częściowo zaktualizowanym. W tym wypadku,
Wersja rsync używana we wszystkich miejscach docelowych musi być co najmniej tak nowa, jak wersja użyta do wygenerowania pliku wsadowego. Rsync umrze z błędem, jeśli wersja protokołu w pliku wsadowym jest zbyt nowa, aby obsłużyć rsync do odczytu wsadowego. Zobacz także opcję --protocol, aby dowiedzieć się, jak utworzyć rsync podczas tworzenia pliku wsadowego, który może zrozumieć starszy rsync. (Należy pamiętać, że pliki wsadowe zmieniły się formalnie w wersji 2.6.3, więc mieszanie starszych wersji z nowszymi wersjami nie będzie działać).
Podczas odczytywania pliku wsadowego rsync wymusi na wartości niektórych opcji dopasowanie danych w pliku wsadowym, jeśli nie ustawiono ich na takie same jak polecenie zapisu wsadowego. Inne opcje można (i należy) zmienić. Na przykład --write-batch zmienia się na --read-batch, --files-from jest usuwany, a opcje --filter / - include / - exclude nie są potrzebne, chyba że określono jedną z opcji --delete .
Kod tworzący plik BATCH.sh przekształca wszelkie opcje filtru / włączania / wykluczania w pojedynczą listę, która jest dołączana jako dokument „tutaj” do pliku skryptu powłoki. Zaawansowany użytkownik może użyć tego do zmodyfikowania listy wykluczeń, jeśli pożądana jest zmiana w tym, co zostanie usunięte przez --delete. Normalny użytkownik może zignorować ten szczegół i po prostu użyć skryptu powłoki jako łatwego sposobu uruchomienia odpowiedniej komendy --read-batch dla partii danych.
Oryginalny tryb wsadowy w rsync był oparty na „rsync +”, ale najnowsza wersja używa nowej implementacji.
remote destination is not allowed with --read-batch
-
nazwa pliku oznacza odczyt ze standardowego wejścia, a STDIN jest również odczytywanyfoo
w przykładzie z pliku lokalnego.Możesz spróbować użyć unisona . Tworzenie listy plików powinno być znacznie szybsze, ponieważ utrzymuje pamięć podręczną plików.
źródło
Te
rsync
--batch-mode
podpory multicast. Jeśli jest to możliwe w twojej sieci, warto się temu przyjrzeć.źródło
co powiesz na zmianę systemów plików?
Jakiś czas temu zmieniłem wielotabajtowy FS z ext3 na XFS. Czas skanowania katalogów (przy ostatnim sprawdzeniu około 600 000 plików) skrócił się z 15-17 minut do mniej niż 30 sekund!
źródło
Nie jest to bezpośrednia odpowiedź, ale jeśli używasz rsync w wersji 3+, zacznie się przesyłać, zanim wygeneruje całą listę plików.
Inną opcją, wciąż niezbyt wydajną, byłoby uruchamianie ich jako zadań, więc kilka z nich działa jednocześnie.
Pomyślałem też o tej dziwności, jeśli nie masz nic przeciwko użyciu tar:
Gdzie każdy lokalny host byłby oczywiście innym serwerem (zakłada logowanie na podstawie klucza). Nigdy wcześniej nie korzystałem z powyższego.
źródło
Co powiesz na uruchamianie zadań rsync z hosta 1, hosta 2 i hosta 3? Lub uruchom zadanie, aby skopiować na host1, a następnie uruchom je na host2 i host3, aby pobrać je z hosta 1.
źródło
Lepszym rozwiązaniem byłoby utworzenie repozytorium za pomocą git i po prostu wypychanie do 3 hostów. Szybciej, nie potrzebujesz części listy plików i zużywa ona mniej zasobów.
Powodzenia,
João Miguel Neves
źródło
.git/
chociaż wypychanie do pilotów, które już miałyby większość danych, byłoby szybsze. git nie zastępuje rsync.http
,nfs
aafp
. GitHub to strona internetowa, która zajmuje się tworzeniem i utrzymywaniem repozytoriów git dla Ciebie i upublicznia je (chyba że płacisz).Szukając tej odpowiedzi sam, myślę, że musisz najpierw utworzyć partię przy użyciu rsync, a następnie wysłać ją do nich wszystkich, co sprawi, że lista plików będzie musiała zostać skrócona tylko raz, a następnie możesz po prostu w tle wszystkie trzy rsyncs, aby uruchomić je równolegle.
źródło
Innym możliwym rozwiązaniem jest po prostu równoległe uruchamianie tylu procesów rsync, co hostów, tj. Fork.
źródło