Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Komputery - oprogramowanie i sprzęt (https://forum.cdrinfo.pl/f113/)
-   -   GNU/Linux - skrypt wykonujący kopię serwera WWW (https://forum.cdrinfo.pl/f113/gnu-linux-skrypt-wykonujacy-kopie-serwera-www-94265/)

M@X 14.02.2015 09:31

GNU/Linux - skrypt wykonujący kopię serwera WWW
 
Mam nastepujacy problem - co jakis czas zmuszony jestem ze wzgledow bezpieczenstwa wykonywac kopie zapasowa serwera WWW. W tej chwili wyglada to tak:

Wybudzam komputer, wlaczam ForkLift, lacze sie przez FTP z serwerem, zaznaczam wszystko i przerzucam zawartosc na jeden z udzialow na dysku WD MyBook Live DUO.

Poniewaz jednak NAS WD jest wlaczony caly czas a w srodku siedzi jakis Linux chcialbym zautomatyzowac proces i wykluczyc z niego uzywanie komputera.

Czy zatem bylby ktos tak mily i podpowiedzial mi jak napisac skrypt ktory wykona:

1. Polaczenie przez FTP na porcie 21 z konkretnym loginem i haslem do serwera.
2. Wybierze cala zawartosc glownego katalogu tj. wszystkie pliki i foldery z zawartoscia.
3. Skopiuje je do /shares/Library/Backup.

Fajnie byloby tez gdyby generowal jakis LOG w konkretnej lokalizacji by przejrzec czy podczas pobierania nie bylo bledow. Do init.d juz sobie sam dodam :-).

andy 14.02.2015 09:45

Jeżeli masz dostęp do roota na tym serwerze to zrób to przez rsync'a.

rsync łączy się po ssh z serwerem docelowym i przy użyciu protokołu rsync robi kopie danych. Działa to zdecydowanie szybciej niż sposób wyżej, bo rsync wysyła tylko zmienione dane, natomiast w przypadku ftpa za każdym razem wysyłasz całość.

Można też*wykorzystać coś bardziej gotowego - np. rsnapshot http://www.rsnapshot.org
Tutaj jest manual http://www.rsnapshot.org/howto/1.2/r...-HOWTO.en.html

M@X 14.02.2015 09:55

Musialbym sie doktoryzowac z tego tematu, czytac co to jest rsync, a co najgorsze pewnie - doinstalowywac go do NASa, a tego chcialbym uniknac. Chce to zrobic jednym skryptem na juz istniejacych poleceniach systemowych.

andy 14.02.2015 09:57

Nie trzeba się*doktoryzować - wystarczy umiejętność czytania ze zrozumieniem.
http://www.smallnetbuilder.com/nas/n...d-my-book-live

Oprócz czystego rsynca, rsnapshota można użyć jeszcze BackupPC http://pl.wikipedia.org/wiki/BackupPC

Nie wiem tylko czy da się*go zainstalować*na tym nasie.

Bartez 16.02.2015 21:04

Jak najbardziej rsync. Cały backup na cdrinfo mamy oparty o rsynca i działa to wyśmienicie. W synology rsync jest wbudowany, więc nic nie trzeba doinstalowywać, może w WD też tak jest.

M@X 16.02.2015 21:20

:bartez:, a moglbys mi podac linijke jaka mam to uczynic? Probowalem, ale sypie bledami :-/

Berion 16.02.2015 21:23

Jaka jest ich treść?

M@X 16.02.2015 21:47

Problem lezy w wymogu opisanym przez andy'ego - nie mam dostepu do roota.

Zrobilem przez dwie komendy:

cd /shares/Library/Backup/WWW
wget --mirror --ftp-user=login --ftp-password=password --no-host-directories ftp://ftp.server.com

Jak teraz zrobic z tego skrypt i wlaczyc tworzenie loga ktory w nazwie bedzie mial date operacji?

andy 16.02.2015 21:48

Przecież*zamieściłem linka w którym jest opisane jak go skonfigurować na WD.

M@X 16.02.2015 21:49

Pisales o roocie na serwerze a nie na MBLD. To raczej, w ujeciu logicznym, dwie rozne sprawy.

andy 16.02.2015 22:04

Z rootem chodziło mi o serwer docelowy..

sciadzieda 20.02.2015 19:10

Koledzy mówią o backupie, a ty chcesz zwykłą, prostą kopię. To co innego.

Na lokalnej maszynie wykonujesz takie polecenie (i to wszystko!):

Kod:

ssh user@server 'cd ~/katalog_serwera; tar cf - .' |  tar xf -
W bieżącym katalogu maszyny lokalnej pojawią się pliki z serwera.

Omówienie:
- polecenie ssh loguje się do zdalnej maszyny
- polecenie cd zmienia katalog na ten z którego chcesz skopiować pliki
- polecenie tar cf - . (myślnik i kropka) tworzy tarballa, po to aby go szybko skopiować (tak jest najszybciej)
- polecenie tar xf - rozpakowuje tarballa na maszynie lokalnej

Aby powyższe polecenie zadziałało bez hasła (czyli ze skryptu, z crona) musisz przed jego wykonaniem umożliwić logowanie do zdalnej maszyny za pomocą kluczy publiczny-prywatny.

Na localu generujesz klucze
Kod:

ssh-keygen -t rsa
Wciskasz Enter, Enter aby utworzyć klucze bezhasłowe.

Kopiujesz klucz publiczny na zdalną maszynę:
Kod:

ssh-copy-id user@server
i już możesz wykonać pierwsze polecenie z tego posta.


I

sciadzieda 20.02.2015 19:17

Aby wykonać kopię ze swojego macbooka możesz wykonać:

Kod:

ssh user@serwer_www 'cd ~/katalog; tar cf - .' | ssh user@ten_twój_nas tar xf -'
- po uprzednim umieszczeniu na obu zdalnych maszynach twoich kluczy (oczywiście robimy to jednorazowo!).

Sposób przydatny aby ominąć jakieś firewalle, zabezpieczenia etc
Kopiowanie następuje z użyciem twojego macbooka.

---------
Możesz też w skrypcie użyć polecenia
Kod:

scp

M@X 20.02.2015 23:28

Ledwo zarejestrowany, a taki fachowiec ;-). Dzieki, przetestuje jutro!

sciadzieda 20.02.2015 23:39

Na Mac OS X nie ma chyba ssh-copy-id

Ta linijka robi to samo:

Kod:

cat ~/.ssh/id_rsa.pub | ssh user@host 'cat >> ~/.ssh/authorized_keys'
To samo czyli dopisuje do pliku authorized_keys, plik klucza publicznego: id_rsa.pub.

andy 21.02.2015 09:59

To rozwiązanie jest mniej wydajne, bo za każdym razem wysyłasz wszystkie dane.

M@X 21.02.2015 11:16

Ale uzytkownik @sciadzieda, w przeciwienstwie do ciebie, podal mi rozwiazanie o ktore prosilem czyli gotowa linie kodu, czym wyczerpal temat.

andy 21.02.2015 11:29

A ja Ci podałem linki do materiału w którym jest to samo - wystarczy tylko tam wejść i przeczytać.

- Preferuję metodę wędki a nie ryby.

Patrix 21.02.2015 12:39

andy, M@Xu ma dusze managerska, on nie chce robic, on chce gotowe ;)

sciadzieda 21.02.2015 17:36

Cytat:

Napisany przez andy (Post 1315381)
To rozwiązanie jest mniej wydajne, bo za każdym razem wysyłasz wszystkie dane.

Sprawdźmy.

Kod:

smok$ ssh leon@x
leon$ mkdir test && cd test
leon$ wget (jajko linuxa, brak 10 postów nie pozwala zamieścić linka)
leon$ tar xf linux-3.19.tar.xz
leon$ exit
smok$ mkdir testtar && cd testtar
smok$ time ssh leon@x 'cd ~/test/linux-3.19; tar cf - .' |  tar xf -
real        1m58.866s
user        0m13.801s
sys        0m5.804s
smok$ mkdir ../testrsync && cd ../testrsync
$smok time rsync -avz -q -e ssh leon@x:~/test/linux-3.19 .
real        1m26.136s
user        0m10.861s
sys        0m8.037s
$smok rm -Rf linux-3.19/samples/*
$smok time rsync -avz -q -e ssh leon@x:~/test/linux-3.19
real        0m15.260s
user        0m0.300s
sys        0m0.764s

Czyli rsync jest szybsze, choć używa więcej CPU.

Tyle że M@X za pomocą zwykłego kopiowania stworzył bardzo dobry system backupu serwera. Domyślam się, że posiada więcej niż jedną kopię, oznaczoną czasowo. Dzięki temu intuicyjnie dokona odtworzenia backupu z dowolnego dnia oraz będzie miał materiał dla analizy pozdarzeniowej.

Używając rsync musi zrozumieć, żeby nie synchronizować tego samego katalogu na maszynie backupowej - musi stworzyć strategię, logikę backupu. Strategią może być np. kopiowanie katalogu na localu i synchronizacja tejże kopii - aby mieć backup z kolejnych dni. Bo przecież np. włamanie i utrata plików nie musi być od razu zauważone.

Musiałby też M@X zautomatyzować kasowanie wybranych kopii itd itp

Wszystko zaczyna się komplikować, a skoro mielibyśmy zmuszać M@Xa do tworzenia nowego systemu backupu, to może lepiej niech użyje np.

Kod:

rdiff-backup
który to jest już rozbudowanym narzędziem backupowym, synchronizującym wedle tego samego algorytmu co rsync i posiadającym też system logowania, o co M@X prosił na początku.

Podsumowując, rsync jest tylko narzędziem do synchronizacji plików, dzięki któremu można zbudować swoje narzędzie do backupu. Nie namawiałbym do tego M@Xa, bo posiada już swój backup i potrzebuje tylko metody wydajnego kopiowania.

andy 21.02.2015 19:08

@sciadzieda

Nie twierdzę, że twój sposób jest zły jednak rsync sprawdzi się zdecydowanie lepiej. Twoja metoda jest wolna za pierwszym razem a za każdym następny ta różnica będzie się powiększać, bo rsync tylko wysyła zmienione dane.

Dwa. nikt nie zmusza go do używania samego rsync'a. Jak wcześniej napisałem może użyć "wyższych" narzędzi jak rsnapshot.
Tutaj http://www.rsnapshot.org/howto/1.2/r...tml#automation jest świetnie opisane jak fajnie działa automatyzacja - m. in. przesuwa kopie.
Dodatkowo rsync wykorzystuje twarde dowiązania, dzięki czemu w kopii n+1 masz zapisane telko zmiany a to co się nie zmieniło jest twardym odniesieniem do początkowych danych :)


W linuksie pewne rzeczy można zrobić na miliard sposobów - za to go cenię, jednak czasami pewne rozwiązania są zdecydowanie lepsze niż inne ;)

Tutaj jest 30 sekundowa instrukcja dla "managerów" (rotfl) http://www.rsnapshot.org/howto/1.2/r...second_version

Jak widać*wszystko miał na tacy...

sciadzieda 21.02.2015 23:10

Cytat:

Napisany przez andy (Post 1315426)
@
W linuksie pewne rzeczy można zrobić na miliard sposobów - za to go cenię, jednak czasami pewne rozwiązania są zdecydowanie lepsze niż inne ;)

Klocki Lego.

Ja za lepsze - dobre rozwiązanie często uznaję te zbudowane ze znanych mi klocków.

Wiem, że coś lepiej byłoby zrobić w awk czy nawet Lisp, ale niezbyt znam, więc używam seda, grepa, vima itd itp

Ostatnio jakieś wykresy robiłem i przyszedł mi do głowy język R, ale od tylu lat nigdy nie zagłębiłem się w to, więc użyłem znanych mi narzędzi (nota bene panowie z google robią z R cuda).

rsnapshot wydaje mi się starym skryptem Perlowym, którego nie warto już używać, no ale jeśli ktoś zna... to czemu nie.

rdiff-backup jest niezależnym softem w python (używa tego samego algo. co rsync, ale nie używa samego rsync) i dzięki tej dyskusji właśnie wdrożyłem go na swojej maszynie :)

M@X 21.02.2015 23:23

I to jest zdrowe podejscie :-). Jezeli caly swiat czegos uzywa, a uwazasz ze jest to slabe, to zrob po swojemu, niezgodnie z ograniczajacymi Cie standardami. Udowodnij ze dziala i olej reszte ktora meczy sie ze standardami z epoki jaskin. To lubie! :spoko:


Wszystkie czasy w strefie CET. Aktualna godzina: 15:07.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.