17Aug

Przewodnik dla początkujących dotyczący synchronizowania danych z Rsync

Protokół rsync może być dość prosty w użyciu do zwykłych zadań tworzenia kopii zapasowych / synchronizacji, ale niektóre z jego bardziej zaawansowanych funkcji mogą Cię zaskoczyć.W tym artykule pokażemy, że nawet najwięksi hakerzy danych i entuzjaści tworzenia kopii zapasowych mogą używać rsync jako jednego rozwiązania dla wszystkich potrzeb związanych z redundancją danych.

Ostrzeżenie: Zaawansowani geekowie

Jeśli siedzisz myśląc "Co do cholery jest rsync?" Lub "Używam tylko rsync do naprawdę prostych zadań", możesz sprawdzić nasz poprzedni artykuł na temat używania rsync do tworzenia kopii zapasowychtwoje dane w systemie Linux, które zawierają wprowadzenie do rsync, poprowadzą Cię przez proces instalacji i pokażą bardziej podstawowe funkcje. Kiedy już będziesz miał pewną wiedzę na temat korzystania z rsync( szczerze mówiąc, nie jest to zbyt skomplikowane) i czujesz się komfortowo z terminalem linuksowym, możesz przejść do tego zaawansowanego przewodnika.

Uruchamianie rsync na Windows

Najpierw pobierzmy nasze czytniki Windows na tej samej stronie co nasi guru Linux. Chociaż rsync jest zbudowany tak, by działał na systemach uniksopodobnych, nie ma powodu, aby nie był w stanie używać go równie łatwo w systemie Windows. Cygwin tworzy wspaniały Linux API, którego możemy używać do uruchamiania rsync, więc przejdź do ich strony internetowej i pobierz wersję 32-bitową lub 64-bitową, w zależności od komputera.

Instalacja jest prosta;możesz zachować wszystkie opcje w ich domyślnych wartościach, aż dojdziesz do ekranu "Wybierz paczki".

Teraz musisz wykonać te same kroki dla Vima i SSH, ale pakiety będą wyglądać nieco inaczej, kiedy je wybierzesz, oto kilka zrzutów ekranu:

Instalowanie Vima:

Instalowanie SSH:

Po uruchomieniuwybrał te trzy pakiety, klikaj dalej, aż do zakończenia instalacji. Następnie możesz otworzyć Cygwin klikając ikonę, którą instalator umieścił na twoim pulpicie.

Polecenia rsync: od prostego do zaawansowanego

Teraz, gdy użytkownicy Windowsa znajdują się na tej samej stronie, rzućmy okiem na proste polecenie rsync i pokażmy, jak użycie niektórych zaawansowanych przełączników może szybko uczynić go złożonym.

Załóżmy, że masz kilka plików, które wymagają kopii zapasowej - kto nie ma tych dni? Podłączasz przenośny dysk twardy, abyś mógł tworzyć kopie zapasowe plików komputerów i wydałeś następującą komendę:

rsync -a /home/geek/files/ /mnt/usb/files/

Lub sposób, w jaki wyglądałby na komputerze Windows z Cygwin:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Całkiem proste, iw tym momencie naprawdę nie ma potrzeby używania rsync, ponieważ możesz po prostu przeciągać i upuszczać pliki. Jeśli jednak na drugim dysku twardym znajdują się już niektóre pliki i po prostu potrzebne są zaktualizowane wersje oraz pliki utworzone od czasu ostatniej synchronizacji, to polecenie jest przydatne, ponieważ przesyła nowe dane tylko na dysk twardy. Duże pliki, a zwłaszcza przesyłanie plików przez Internet, to wielka sprawa.

Tworzenie kopii zapasowych plików na zewnętrznym dysku twardym, a następnie przechowywanie dysku twardego w tym samym miejscu, co komputer, jest bardzo złym pomysłem, sprawdźmy więc, co będzie konieczne, aby rozpocząć wysyłanie plików przez Internet do innego komputera(taki, który wypożyczyłeś, członek rodziny itd.).

rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

Powyższa komenda wysłałaby twoje pliki na inny komputer z adresem IP 10.1.1.1.Usuwałoby to zbędne pliki z miejsca docelowego, które już nie istnieją w katalogu źródłowym, wyprowadza przesyłane nazwy plików, dzięki czemu masz pojęcie o tym, co się dzieje, i tunelujesz rsync przez SSH na porcie 12345.

-a -v -e --delete przełączniki są jednymi z najbardziej podstawowych i najczęściej używanych;powinieneś już wiedzieć o nich dużo, jeśli czytasz ten samouczek. Przeanalizujmy niektóre inne przełączniki, które czasami są ignorowane, ale niezwykle przydatne:

--progress - Ten przełącznik pozwala nam zobaczyć postęp transferu każdego pliku. Jest to szczególnie przydatne podczas przesyłania dużych plików przez Internet, ale może dostarczyć niepotrzebną ilość informacji podczas przesyłania małych plików przez szybką sieć.

Komenda rsync z przełącznikiem --progress jako kopia zapasowa jest w toku:

--partial - Jest to kolejny przełącznik, który jest szczególnie przydatny podczas przesyłania dużych plików przez Internet. Jeśli rsync zostanie przerwany z dowolnego powodu w trakcie przesyłania pliku, częściowo przesłany plik zostanie zachowany w katalogu docelowym, a transfer zostanie wznowiony tam, gdzie został przerwany po ponownym uruchomieniu polecenia rsync. Przesyłając duże pliki przez Internet( na przykład kilka gigabajtów), nie ma nic gorszego niż kilka sekund przerwy w Internecie, niebieski ekran lub błąd człowieka, który spowodował przeniesienie plików i konieczność rozpoczynania od nowa.

-P - ten przełącznik łączy --progress i --partial, więc użyje go zamiast tego i sprawi, że twoja komenda rsync będzie trochę bardziej schludna.

-z lub --compress - Ten przełącznik spowoduje, że rsync skompresuje dane pliku podczas przesyłania, zmniejszając ilość danych, które należy przesłać do miejsca docelowego. W rzeczywistości jest to dość powszechny przełącznik, ale nie jest to istotne, tylko przynosi korzyści w przypadku transferów między wolnymi połączeniami i nie ma wpływu na następujące typy plików: 7z, avi, bz2, deb, g, z izo, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h lub --human-readable - Jeśli używasz przełącznika --progress, na pewno też zechcesz go użyć.Oznacza to, że jeśli nie chcesz konwertować bajtów na megabajty w locie. Przełącznik -h konwertuje wszystkie wyprowadzane liczby na format czytelny dla człowieka, dzięki czemu można właściwie określić ilość przesyłanych danych.

-n lub --dry-run - Ten przełącznik jest niezbędny, aby wiedzieć, kiedy po raz pierwszy piszesz skrypt rsync i testujesz go. Wykonuje test próbny, ale w rzeczywistości nie wprowadza żadnych zmian - przyszłe zmiany są nadal wysyłane jako normalne, więc możesz przeczytać wszystko i upewnić się, że wszystko wygląda dobrze przed przeniesieniem skryptu do produkcji.

-R lub --relative - Ten przełącznik musi być użyty, jeśli katalog docelowy jeszcze nie istnieje. Użyjemy tej opcji w dalszej części tego przewodnika, abyśmy mogli tworzyć katalogi na maszynie docelowej z sygnaturami czasowymi w nazwach folderów.

--exclude-from - Ten przełącznik służy do łączenia z listą wykluczeń, która zawiera ścieżki katalogów, których nie chcesz zarchiwizować.Potrzebny jest tylko zwykły plik tekstowy z katalogiem lub ścieżką do pliku w każdej linii.

--include-from - Podobne do --exclude-od, ale łączy się z plikiem, który zawiera katalogi i ścieżki plików danych, które chcesz zarchiwizować.

--stats - Naprawdę nie jest ważnym przełącznikiem w żaden sposób, ale jeśli jesteś sysadminem, przydatna może być znajomość szczegółowych statystyk każdej kopii zapasowej, dzięki czemu możesz monitorować natężenie ruchu przesyłanego przez twoją sieć i takie dane..

--log-file - Umożliwia wysyłanie danych wyjściowych rsync do pliku dziennika. Zdecydowanie zalecamy to w przypadku zautomatyzowanych kopii zapasowych, w przypadku których nie ma możliwości samodzielnego przeczytania danych wyjściowych. Zawsze dawaj pliki dziennika raz w swoim wolnym czasie, aby upewnić się, że wszystko działa poprawnie. Co więcej, jest to kluczowy przełącznik, z którego może korzystać sysadmin, więc nie zastanawiasz się, w jaki sposób twoje kopie zapasowe zawiodły, kiedy opuściłeś stażystę.

Rzućmy okiem na naszą komendę rsync po dodaniu kilku dodatkowych przełączników:

rsync -avzhP --delete --stats --log-file = /home/geek/rsynclogs/ backup.log --exclude-from '/home/geek/ exclude.txt'-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

Polecenie jest nadal dość proste, ale wciąż nie stworzyliśmy porządnego rozwiązania do tworzenia kopii zapasowych. Chociaż nasze pliki znajdują się teraz w dwóch różnych fizycznych lokalizacjach, ta kopia zapasowa nie robi nic, aby uchronić nas przed jedną z głównych przyczyn utraty danych: ludzkim błędem.

Snapshot Backups

Jeśli przypadkowo usuniesz plik, wirus uszkodzi wszystkie pliki lub wystąpi coś innego, co spowoduje niepożądaną zmianę plików, a następnie uruchomisz skrypt rsync backup, dane z kopii zapasowej zostaną zastąpione niepożądanymi zmianami. Kiedy coś takiego się pojawi( nie wtedy, ale kiedy), rozwiązanie do tworzenia kopii zapasowych nie zrobiło nic, aby chronić Cię przed utratą danych.

Twórca rsync zdał sobie z tego sprawę i dodał argumenty --backup i --backup-dir, aby użytkownicy mogli uruchomić różnicowe kopie zapasowe. Pierwszy przykład na stronie rsync pokazuje skrypt, w którym pełna kopia zapasowa jest uruchamiana co siedem dni, a następnie zmiany w tych plikach są zapisywane w oddzielnych katalogach codziennie. Problem z tą metodą polega na tym, że aby odzyskać swoje pliki, musisz je skutecznie odzyskać siedem razy. Co więcej, większość maniaków uruchamia swoje kopie zapasowe kilka razy dziennie, więc z łatwością możesz mieć ponad 20 różnych katalogów kopii zapasowych w dowolnym momencie. Nie tylko odzyskiwanie plików jest teraz uciążliwe, ale nawet samo przeglądanie kopii zapasowej danych może być bardzo czasochłonne - musisz znać ostatni raz, kiedy plik został zmieniony, aby znaleźć jego ostatnią kopię zapasową.Co więcej, nieefektywne jest uruchamianie tylko tygodniowych( lub nawet rzadziej) przyrostowych kopii zapasowych.

Tworzenie kopii zapasowych Snapshot na ratunek! Kopie zapasowe migawek to nic innego jak przyrostowe kopie zapasowe, ale wykorzystują one twarde linki do zachowania struktury plików oryginalnego źródła. Na początku może być trudno owinąć głowę, więc spójrzmy na przykład.

Udawaj, że mamy uruchomiony skrypt kopii zapasowej, który co dwie godziny automatycznie tworzy kopię zapasową danych. Ilekroć rsync robi to, nazywa każdą kopię zapasową w formacie: Kopia zapasowa-miesiąc-dzień-rok-czas.

Tak więc, na koniec typowego dnia, mamy listę folderów w naszym katalogu docelowym w następujący sposób:

Podczas przechodzenia przez którąś z tych katalogów, każdy plik z katalogu źródłowego byłby dokładnie taki jak był w tym czasie. W żadnym z dwóch katalogów nie byłoby jednak duplikatów.rsync realizuje to za pomocą hardlinkingu poprzez argument --link-dest = DIR.

Oczywiście, aby mieć te ładnie i starannie spisane nazwy katalogów, będziemy musieli nieco poprawić nasz skrypt rsync. Rzućmy okiem na to, co trzeba zrobić, aby wykonać takie rozwiązanie do tworzenia kopii zapasowych, a następnie wyjaśnimy ten skrypt bardziej szczegółowo:

#!/bin/ bash

#copy old time.txt do time2.txt

yes |cp ~ /backup/ time.txt ~ /backup/ time2.txt

#wpisz stary plik time.txt z nowym czasem

echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt

#zmienić plik dziennika

echo "" & gt;~ /backup/ rsync -data + "% F-% I% p" `.log

# polecenie synchrony

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ /backup/ rsync -data + "% F-% I% p" `.log --exclude-from '~ / exclude.txt' --link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `data +"% F-% I% p "` /

# nie zapomnij scp pliku dziennika i umieścić go wkopia zapasowa

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`. log

Tobyłby typowym skryptem rsync z migawką.Na wypadek, gdybyśmy gdzieś cię zgubili, rozłóżmy to kawałek po kawałku:

Pierwsza linia naszego skryptu kopiuje zawartość time.txt do time2.txt. Tak potok ma potwierdzić, że chcemy nadpisać plik. Następnie bierzemy aktualny czas i umieszczamy go w time.txt. Pliki te przydadzą się później.

Następna linia tworzy plik dziennika rsync, nazywając go rsync-date.log( gdzie data jest faktyczną datą i czasem).

Teraz złożone polecenie rsync, o którym ostrzegaliśmy:

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Justprzełączniki, o których mówiliśmy wcześniej;przewiń w górę, jeśli potrzebujesz przypomnienia.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Są to uprawnienia dla katalogu docelowego. Ponieważ robimy ten katalog w środku naszego skryptu rsync, musimy określić uprawnienia, aby nasz użytkownik mógł zapisywać do niego pliki.

Używanie komend daty i kota

Przejrzymy każde użycie poleceń date i cat wewnątrz polecenia rsync, w kolejności, w jakiej występują.Uwaga: zdajemy sobie sprawę, że istnieją inne sposoby realizacji tej funkcji, szczególnie przy użyciu zmiennych deklarujących, ale do celów tego przewodnika postanowiliśmy użyć tej metody.

Plik dziennika jest określony jako:

~ /backup/ rsync -data + "% F-% I% p" `.log

Alternatywnie mogliśmy podać:

~ /backup/ rsync-`cat ~ /backup/ time.txt`.log

Tak czy inaczej, komenda --log-file powinna być w stanie znaleźć wcześniej utworzony datowany plik dziennika i zapisać do niego.

Plik docelowy łącza jest określony jako:

- link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`

Oznacza to, że komenda --link-dest otrzymuje katalog poprzedniej kopii zapasowej. Jeśli uruchamiamy kopie zapasowe co dwie godziny, a jest godzina 16:00, kiedy uruchomiliśmy ten skrypt, to polecenie --link-dest szuka katalogu utworzonego o godzinie 14:00 i przenosi tylko te dane, które uległy zmianie od tego czasu( Jeśli w ogóle).

Aby powtórzyć, dlatego plik time.txt jest kopiowany do time2.txt na początku skryptu, więc polecenie --link-dest może odwoływać się do niego później.

Katalog docelowy jest określony jako:

[email protected]: /home/geek2/files/ `date +"% F-% I% p "`

To polecenie po prostu umieszcza pliki źródłowe w katalogu, który ma tytuł bieżącej daty i godziny.

Na koniec upewniamy się, że kopia pliku dziennika znajduje się wewnątrz kopii zapasowej.

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/` cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`. log

Używamyzabezpiecz kopię na porcie 12345, aby pobrać dziennik rsync i umieścić go w odpowiednim katalogu. Aby wybrać poprawny plik dziennika i upewnić się, że trafia on we właściwym miejscu, plik time.txt musi zostać odwołany za pomocą polecenia cat. Jeśli zastanawiasz się, dlaczego zdecydowaliśmy się na cat time.txt zamiast po prostu użyć polecenia date, to dlatego, że podczas uruchamiania komendy rsync mogło upłynąć dużo czasu, więc aby mieć pewność, że mamy odpowiedni czas, po prostu szukamy kota.dokument tekstowy, który stworzyliśmy wcześniej.

Automation

Użyj Cron w systemie Linux lub Task Scheduler w systemie Windows, aby zautomatyzować skrypt rsync. Jedną rzeczą, na którą musisz uważać, jest upewnienie się, że kończysz wszystkie aktualnie uruchomione procesy rsync przed kontynuowaniem nowego. Harmonogram zadań wydaje się automatycznie zamykać wszystkie działające instancje, ale w przypadku Linuksa musisz być trochę bardziej kreatywny.

Większość dystrybucji Linuksa może używać polecenia pkill, więc pamiętaj o dodaniu następujących elementów na początku skryptu rsync:

pkill -9 rsync

Szyfrowanie

Nie, jeszcze nie skończyliśmy. W końcu mamy fantastyczne( i darmowe!) Rozwiązanie do tworzenia kopii zapasowych, ale wszystkie nasze pliki są nadal podatne na kradzież.Mam nadzieję, że tworzysz kopie zapasowe swoich plików w miejscu odległym o setki mil. Bez względu na to, jak bezpieczne jest to odległe miejsce, kradzież i hakowanie zawsze mogą być problemami.

W naszych przykładach tunelowaliśmy cały ruch rsync przez SSH, co oznacza, że ​​wszystkie nasze pliki są szyfrowane podczas przesyłania do miejsca docelowego. Musimy jednak upewnić się, że miejsce docelowe jest równie bezpieczne. Należy pamiętać, że rsync szyfruje tylko twoje dane podczas przesyłania, ale pliki są szeroko otwarte po dotarciu do miejsca docelowego.

Jedną z najlepszych funkcji rsync jest to, że przesyła ona tylko zmiany w każdym pliku. Jeśli wszystkie twoje pliki są zaszyfrowane i wprowadzono jedną niewielką zmianę, cały plik będzie musiał zostać ponownie przesłany w wyniku szyfrowania całkowicie losowego losowania wszystkich danych po każdej zmianie.

Z tego powodu najlepiej / najłatwiej jest użyć pewnego rodzaju szyfrowania dysku, takiego jak BitLocker dla Windows lub dm-crypt dla systemu Linux. W ten sposób twoje dane są chronione w przypadku kradzieży, ale pliki mogą być przesyłane za pomocą rsync, a twoje szyfrowanie nie przeszkadza w jego działaniu. Dostępne są inne opcje, które działają podobnie do rsync lub nawet implementują jakąś formę, na przykład Duplicity, ale brakuje im niektórych funkcji, które ma do zaoferowania rsync.

Po skonfigurowaniu kopii zapasowych migawek w lokalizacji poza siedzibą i zaszyfrowaniu źródłowych i docelowych dysków twardych, proszę poklepać się za masteringiem rsync i wdrożyć najbardziej niezawodne rozwiązanie do tworzenia kopii zapasowych danych.