Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2017-10-29 16:30:31

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Backup i jego automatyzacja

Hej,
Do tej pory miałem w domu serwer plików Zyxel NSA310S, ale zrobiłem sobie serwer na PC + Debian 9 Stretch.

Wszystko działa tak:
- serwer działa 24h, a na nim przeróżne pierdoły
- codziennie robię backup dwóch Raspberry na serwer
- serwer służy jako NAS
Tu jest wszystko OK

Teraz chcę zrobić sobie backup tego serwera na Zyxel (leży odłogiem to niech coś ciekawego robi)

Próbuję zrobić automat do backupu, ale nie wiem jak to ogarnąć.
Dokładnie to chciałbym uzyskać:
- Serwer PC budzi Zyxela (raz na dobę np w nocy)
- Serwer PC montuje udostępnione zasoby NFS przez Zyxel
- Serwer PC robi backup
- Serwer PC odmontowuje zasoby
- Serwer PC wysyła komendę do zamknięcia systemu w Zyxel

Co mam:
1. Budzenie Zyxela przez WakeOnLan z Serwer PC

Kod:

wakeonlan xx:xx:xx:xx:xx:xx

2. Montowanie zasobów

Kod:

mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup

3. Wykonanie skryptu "backup" (skrypt znaleziony kiedyś, gdzieś w sieci i działa wyśmienicie)

Kod:

#!/bin/bash

# Katalog Docelowy (bez ostatniego /)
BACKUP_DIR=/mnt/backup

# Katalog źródłowy
SOURCE_DIR_1=/coś_tam_1
SOURCE_DIR_2=/coś_tam_2
SOURCE_DIR_3=/coś_tam_3
SOURCE_DIR_4=/coś_tam_4
SOURCE_DIR_1=/coś_tam_5

# Ilość przechowywanych kopii (1 kopia dziennie)
NUM_BACKUP=7

# Jeżeli nie ma katalogu dla kopii to go tworzymy
if [ ! -d $BACKUP_DIR ]; then
  mkdir -p $BACKUP_DIR
fi

# Wywalamy najstarszy backup
OLDEST_BACKUP=$(date -I -d "$NUM_BACKUP day ago")
if [ -n "$OLDEST_BACKUP" ]; then
  if [ -d $BACKUP_DIR/$OLDEST_BACKUP ]; then
    rm -r $BACKUP_DIR/$OLDEST_BACKUP
  fi
fi

# Pobieramy ostatni katalog backupu
LAST_BACKUP=$(date -I -d "1 day ago")
CURRENT_BACKUP=$(date -I)

rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_1 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_2 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_3 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_4 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_5 $BACKUP_DIR/$CURRENT_BACKUP

4. Odmontowanie zasobów

Kod:

umount /mnt/backup

5. Zamknięcie systemu Zyxel:
- łączę się poprzez telnet

Kod:

telnet 192.168.1.3

- loguję się jako root
- wydaję polecenie "poweroff"

Ręcznie wszystko to działa, ale jak z tego zrobić teraz automat? :)

Z góry dziękuję i pozdrawiam.
Piotrek

Offline

 

#2  2017-10-29 18:17:14

  rulezdc - Członek DUG

rulezdc
Członek DUG
Skąd: Tarnowskie Góry
Zarejestrowany: 2007-05-22

Re: Backup i jego automatyzacja

wrzuc do crona :) raz na dzien

Offline

 

#3  2017-10-29 18:18:30

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Re: Backup i jego automatyzacja

A jak CRON wykona punkt 5? :)

Offline

 

#4  2017-10-29 18:22:55

  urbinek - Użytkownik

urbinek
Użytkownik
Skąd: Sosnowiec
Zarejestrowany: 2009-10-01
Serwis

Re: Backup i jego automatyzacja

30 sekund w guglu
https://www.linuxquestions.org/questions/linux-networking-3/remote-command-execute-telnet-with-1-command-338670/

also robienie tego po telnecie to średni pomysł, lepiej ssh na kluczach


A w wolnym czasie, robię noże :)
[img]http://nginx.urbinek.eu/_photos/signature.png[/img]

Offline

 

#5  2017-10-29 18:26:42

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Backup i jego automatyzacja

[quote=pimowo]A jak CRON wykona punkt 5? :)[/quote]
Na tym Zyxelu jest SSH? - byłoby prościej.

Jeśli przez telnet, to tu masz conieco w przedmiocie możliwości z wykorzystaniem perla, albo expect:
https://stackoverflow.com/questions/15832015/how-to-run-command-on-telnet-command-prompt-in-perl-script
Jednak taka  zabawa jest X razy trudniejsza, niż przy SSH z autoryzacją kluczami.

Ostatnio edytowany przez Jacekalex (2017-10-29 18:27:52)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2017-10-29 18:28:07

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Re: Backup i jego automatyzacja

Niestety ale nie ma SSH (może ja nie potrafię tego uruchomić)

Offline

 

#7  2017-10-29 19:38:00

  jawojx - Użytkownik

jawojx
Użytkownik
Zarejestrowany: 2012-10-11

Re: Backup i jego automatyzacja

To jest przez telnet jak nie ma bezpośrednio na root-a, jak masz ustawione na roota-a to chyba wiadomo co zmienić.

Kod:

#!/bin/bash
{
sleep 3
echo nazwa_usera
sleep 3
echo hasło_usera
sleep 3
echo su
sleep 3
echo hasło_roota
sleep 3
echo poweroff
sleep 10
} | telnet IP_adres

Sprawdzić czy czas jest wystarczający, można dać więcej sekund.

Ostatnio edytowany przez jawojx (2017-10-29 19:45:39)

Offline

 

#8  2017-10-29 19:49:59

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Re: Backup i jego automatyzacja

Zrobiłem dwa skrypty, wyglądają tak:

/zyxel_start

Kod:

#!/bin/bash

wakeonlan XX:XX:XX:XX:XX:XX

zyxel_stop

Kod:

#!/usr/bin/expect

spawn telnet 192.168.1.3
expect {*NSA310S login:}
send "root\r"
expect {*Password:}
send "ABCD\r"
expect {*~ #}
send "poweroff\r"
sleep 5

i wszystko działa :)

To teraz pytanie...  jak to wszystko złożyć w jedną wielką, działającą całość? :)

Ostatnio edytowany przez pimowo (2017-10-29 19:50:48)

Offline

 

#9  2017-10-29 21:04:43

  jawojx - Użytkownik

jawojx
Użytkownik
Zarejestrowany: 2012-10-11

Re: Backup i jego automatyzacja

To teraz pytanie...  jak to wszystko złożyć w jedną wielką, działającą całość? :)[/quote]
Tak:

Kod:

#!/bin/bash

pierwszy(){


}

dugi(){


}

# kolejność jaka jest potrzebna
(pierwszy)
(drugi)

lub tak

Kod:

#!/bin/bash
/gdzie/pierwszy
#jak jest w np. /usr/bin/ 
drugi

Offline

 

#10  2017-10-29 21:17:21

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Re: Backup i jego automatyzacja

@jawojx nie bardzo rozumiem co masz na myśli...

Nie wiem czy mam to wszystko zrobić jako jeden skrypt czy uruchamiać je po kolei.
1. uruchamiam Zyxela

Kod:

/skrypty/zyxel_start

2. montuje zasoby

Kod:

mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup

3. robię backup

Kod:

/skrypty/backup

4. odmontowuje zasoby

Kod:

umount /mnt/backup

5. wyłączamm Zyxela

Kod:

/skrypty/zyxel_stop

Potrzebne są jakieś opóźnienia bo Zyxel chwilę się uruchamia lub w jakiś sposób trzeba sprawdzić, że on jest gotowy.

Offline

 

#11  2017-10-29 21:22:21

  jawojx - Użytkownik

jawojx
Użytkownik
Zarejestrowany: 2012-10-11

Re: Backup i jego automatyzacja

No możesz wszystko z osobna podawać w cron-ie, ale łatwiej to zrobić w jednym pliku, chyba. I o tym to było, by zapisać jako jeden skrypt. Myślałem że o to pytałeś.

To teraz pytanie...  jak to wszystko złożyć w jedną wielką, działającą całość? :)[/quote]

Ostatnio edytowany przez jawojx (2017-10-29 21:24:39)

Offline

 

#12  2017-10-29 22:54:51

  pimowo - Użytkownik

pimowo
Użytkownik
Zarejestrowany: 2013-02-24

Re: Backup i jego automatyzacja

OK, zrobiłem coś takiego:

Kod:

#!/bin/bash

# Włączenie zdalnego serwera
wakeonlan XX:XX:XX:XX:XX:XX

# Odczekaj chwile aby zdalny serwer mógłby się uruchomić
sleep 60

# Montujemy zasoby zdalnego serwera
mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup

# Katalog docelowy (bez ostatniego /)
BACKUP_DIR=/mnt/backup

# Katalog źródłowy
SOURCE_DIR_1=/coś_tam_1
SOURCE_DIR_2=/coś_tam_2
SOURCE_DIR_3=/coś_tam_3
SOURCE_DIR_4=/coś_tam_4
SOURCE_DIR_1=/coś_tam_5

# Ilość przechowywanych kopii (1 kopia dziennie)
NUM_BACKUP=7

# Jeżeli nie ma katalogu dla kopii to go tworzymy
if [ ! -d $BACKUP_DIR ]; then
  mkdir -p $BACKUP_DIR
fi

# Wywalamy najstarszy backup
OLDEST_BACKUP=$(date -I -d "$NUM_BACKUP day ago")
if [ -n "$OLDEST_BACKUP" ]; then
  if [ -d $BACKUP_DIR/$OLDEST_BACKUP ]; then
    rm -r $BACKUP_DIR/$OLDEST_BACKUP
  fi
fi

# Pobieramy ostatni katalog backupu
LAST_BACKUP=$(date -I -d "1 day ago")
CURRENT_BACKUP=$(date -I)

rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_1 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_2 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_3 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_4 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_5 $BACKUP_DIR/$CURRENT_BACKUP

# Wszystko zrobione, wiec należy odmontować zasoby zdalnego serwera
umount /mnt/backup

# Potwierdzenie wykonania backupu na konsole
echo "Backup wykonany, pa :)"

# Wyłączenie zdalnego serwera
/skrypty/zyxel_stop

Proszę się nie śmiać bo jaki programista taki skrypt, ale wygląda na to, że to działa :P

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00014 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00151 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.45.187' WHERE u.id=1
0.00144 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.45.187', 1732389298)
0.00029 SELECT * FROM punbb_online WHERE logged<1732388998
0.00068 SELECT topic_id FROM punbb_posts WHERE id=315080
0.00006 SELECT id FROM punbb_posts WHERE topic_id=30009 ORDER BY posted
0.00029 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30009 AND t.moved_to IS NULL
0.00030 SELECT search_for, replace_with FROM punbb_censoring
0.00096 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30009 ORDER BY p.id LIMIT 0,25
0.00085 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30009
Total query time: 0.00657 s