2007 10 Serwer kopii zapasowych [Administracja]

background image

praktyka

Serwer kopii zapasowych

46

październik 2007

praktyka

Serwer kopii zapasowych

47

www.lpmagazine.org

lin

ux

@

so

ftw

ar

e.

co

m

.p

l

D

ookoła nas, czyli w szkołach, bankach, urzę-
dach, stacjach benzynowych czy samocho-
dach znajdują się dziesiątki i setki urzą-
dzeń, zbierających i przetwarzających nie-

zliczone ilości danych, a w tym nasz domowy komputer
i laptop, na którym pracujemy. Dane są gromadzone na
różnego rodzaju nośnikach, w tym również na dyskach
twardych. Ich utrata może wiązać się z koniecznością
powtórzenia jakiejś operacji, np. napisania od nowa
podania o urlop, albo w ostateczności, będą poważne
kłopoty, a nawet bankructwo firmy, gdy utracimy pro-
jekt, nad którym spędziliśmy 4 miesiące lub kluczowe
dane naszej firmy.

Czy dane zapisane na dysku twardym naszego lapto-

pa są w 100 % bezpieczne? Statystyki awaryjności pokazu-
ją, że niestety nie. W przypadku urządzeń przenośnych,
mimo użycia bardzo odpornych na urazy podzespołów,
dane na dyskach twardych są wyjątkowo zagrożone. Cią-
głe przenoszenie, wstrząsy, upadek, kradzież urządze-
nia lub przypadkowe skasowanie może pozbawić nas je-
dynej kopii danych. Warto już dziś pomyśleć o tym, by re-
gularnie tworzyć kopie zapasowe newralgicznych danych,

w myśl powiedzenia: lepsza nieaktualna kopia niż jej
całkowity brak. Pozwoli to wyjść obronną ręką z opresji,
jeśli nastąpi jedna z wyżej wymienionych sytuacji.

Spośród wielu dostępnych programów do archiwiza-

cji, tych płatnych i bezpłatnych, możemy coś wybrać dla
siebie. Jednak wiele z nich będzie nam proponować archi-
wizację w oparciu o dedykowane serwery, urządzenia
taśmowe, którymi nie dysponujemy lub stosy płyt CD/
DVD, w których możemy się łatwo pogubić. Potrzebujemy
czegoś łatwego w obsłudze, co po jednorazowej konfiguracji
nie będzie nas absorbować podczas normalnej pracy i bę-
dzie się wykonywać automatycznie oraz wykorzysta to
czym dysponujemy, np. domowy komputer z dużym
dyskiem twardym lub serwer z macierzą dyskową RAID.
Dysponując odrobiną Linuksowej wiedzy tajemnej może-
my samodzielnie napisać skrypty, które codziennie będą
czuwać nad wykonaniem kopii zapasowej, gdy my tymcza-
sem, będziemy mogli przeznaczyć zyskany czas na pracę
lub odpoczynek.

W niniejszym artykule pragnę zaprezentować Państwu

przykładowe skrypty archiwizujące napisane w języku
powłoki bash, które pokażą, jak szybko i prosto można na-

Serwer kopii

zapasowych

W XXI wieku komputer staje się podstawowym narzędziem człowieka, bez którego nie można
wyobrazić sobie istnienia we współczesnym społeczeństwie. Co raz więcej gospodarstw domowych,
około połowa, może poszczycić się przynajmniej jednym komputerem stacjonarnym lub laptopem,
a jedna trzecia ma dostęp do Internetu, nie mówiąc już o współczesnych firmach.

Sławomir Skrzyniarz

background image

praktyka

Serwer kopii zapasowych

46

październik 2007

praktyka

Serwer kopii zapasowych

47

www.lpmagazine.org

pisać wygodne narządzie, automatyzujące
proces archiwizacji – od wykonania pierw-
szej kopii zapasowej, aż po usunięcie nie-
aktualnych już archiwów.

Ogólna zasada

funkcjonowania

systemu tworzenia kopii

zapasowej

System archiwizacji będzie się składał
z laptopa z Linuksem, na którym są prze-
chowywane krytyczne, z punktu widzenia
bezpieczeństwa dane oraz komputera kla-
sy PC, lub serwera z dużym dyskiem – oczy-
wiście działającego pod kontrolą systemu
Linux. Całość będzie połączona ze sobą za
pomocą kabla sieciowego RJ-45 (komputer
– komputer) lub dowolnej przewodowej lub
bezprzewodowej sieci wewnętrznej, Inter-
netu. Oczywiście połączenie może być zrea-
lizowane z wykorzystaniem dowolnego
medium, jedynie z zastrzeżeniem, że urzą-
dzenia muszą mieć przydzielone IP i będą
mogły nawiązywać połączenia TCP. Połą-
czenie pomiędzy serwerem a laptopem bę-
dzie zrealizowane przez szyfrowany tunel
ssh.

Wszystkie, powyżej przedstawione, zało-

żenia można oczywiście zmienić, wprowa-
dzając korekty do skryptów i jednocześnie
dostosowując cały system archiwizacji do
własnych potrzeb.

Skrypty wchodzące

w skład systemu kopii

zapasowych

W skład systemu archiwizacji wchodzą trzy
skrypty; pierwszy to kopia_zapasowa.sh i bę-
dzie umieszczony na laptopie, na którym
są dane, przeznaczone do archiwizacji.
Przy jego pomocy skonfigurujemy tunel
szyfrowania, przez który będzie odbywać
się transmisja danych oraz wykonamy co-
dzienną kopię różnicową naszych plików.
W tym przykładzie założono, że kopia
zapasowa będzie wykonywana raz dzien-
nie, a osiągniemy to, uruchamiając skrypt
z poziomu demona zadań okresowych cron,
co określony czas, np. co 10 minut. Jeżeli
okaże się, że serwer jest niedostępny, bo
trwa archiwizowanie danych lub istnieje
archiwum na dany dzień, to skrypt zakoń-
czy działanie ze stosownym komunikatem
opisującym przyczynę.

Drugi skrypt nazywa się czysciciel.sh

i będzie wykorzystywany na serwerze do
usuwania zbyt starych kopii zapasowych,
zapobiegając jednocześnie przepełnieniu
dysku.

Trzeci skrypt to ssh-add.sh, a będzie uru-

chamiany podczas każdego logowania do
środowiska graficznego na laptopie i będzie
czuwał nad tym, by klucz szyfrujący RSA był
gotowy do użycia.

Konfiguracja serwera

archiwizacji

Wymagane oprogramowanie

Konfigurację serwera należy rozpocząć od
zainstalowania serwera openssh, a można to
zrobić w Mandrivie, za pomocą polecenia

urpmi openssh-server

lub zainstalować

pakiet openssh-server, za pomocą dowolnego
menadżera pakietów, dostępnego w syste-
mie, np. apt-get, yum. Ponadto na obu ma-
szynach przyda się pakiet openssh-clients,
zawierający m.in. program ssh, ssh-add, ssh-
agent
i scp oraz openssh, zawierający ssh-
keygen
. Skrypt archiwizujący opiera swoje
działanie na programie rsync, tak więc nale-
ży zainstalować pakiet o tej właśnie nazwie.
Jeżeli będziemy korzystać z dynamicznego
przydzielania adresów IP, przyda się rów-
nież pakiet dhcp-server.

Przygotowanie miejsca

na archiwa

Przed przystąpieniem do wykonania pierw-
szej kopii zapasowej, należy założyć kon-
to nowemu użytkownikowi, np. za pomo-
cą polecenia

adduser slawek

i nadać hasła

passwd slawek

. Następny krok to założenie,

w jego katalogu domowym lub na innym
dysku, katalogu do przechowywania archi-
wizacji, np.

mkdir /mnt/backup/laptop

,

którego właścicielem będzie ów użytkow-
nik

chown slawek:slawek /mnt/backup/

laptop

. Jeżeli na potrzeby archiwizacji

przeznaczymy osobny dysk i będzie z nie-
go korzystało niewielu użytkowników, to
warto włączyć w nim zaawansowane oszczę-
dzanie energii, które pozwoli wyłączyć-
talerze dysku podczas bezczynności, zmniej
szając tym samym poziom zużycia ener-
gii i emitowanego hałasu oraz ilość wy-
dzielanego ciepła. Do zmiany ustawień
oszczędzania energii posłużyć może prog-
ram hdparm. Jednak, aby ustawić wyłącza-
nie się dysku, np. po dwudziestu minutach,
to należy wydać polecenie

hdparm -S 240

/dev/hdc

, gdzie 240 jest to liczba, ozna-

czająca wielokrotność 5 sekund, a

/dev/

hdc

to nazwa dysku, przeznaczonego do

przetrzymywania kopii zapasowych. Usta-
wienie powinno działać przy każdym uru-
chomieniu systemu, a żeby tak było, to na-
leży dodać polecenie na końcu pliku: /etc/

rc.d/rc lub do innego skryptu, uruchamianego
podczas startu systemu. Przy dobieraniu
czasu bezczynności, po którym wyłączą się
talerze, należy wziąć pod uwagę to, że zbyt
częste uruchamianie i zatrzymywanie tale-
rzy może doprowadzić do szybszego zuży-
cia dysku, a sam proces uruchamiania, w nie-
których przypadkach może opóźnić proces
zapisu i odczytu nawet o 30 sekund.

Konfiguracja serwera openssh

W większości przypadków domyślna konfi-
guracja serwera openssh będzie działać prawi-
dłowo i nie trzeba nic zmieniać. Należy jednak
sprawdzić, czy w pliku /etc/ssh/sshd_config
parametr

PubkeyAuthentication

ustawiony

jest na

yes

. Jeżeli konfiguracja wymaga zmia-

ny, to po jej wprowadzeniu należy zrestar-
tować serwer sshd przez wywołanie polecenia

/etc/init.d/sshd restart

.

Konfiguracja serwera dhcpd

Jeżeli w sieci, w której działa serwer archi-
wizacji, nie ma serwera dhcp, przydziela-
jącego dynamicznie adresy IP, a nasz lap-
topkorzysta z innych sieci, w których ta
usługa jest dostępna, to warto ją włączyć na
najbliższym routerze w naszej sieci albo,
w przypadku braku routera, na serwerze
archiwizacji. Pozwoli to wyeliminować pro-
blem ręcznej konfiguracji naszej karty
sieciowej przy każdej próbie podłączenia do
sieci, a także ograniczy dodatkowe czyn-
ności, związane z procesem archiwizacji,
jedynie do podpięcia kabla sieciowego do
naszego notebooka.

Konfiguracja bramy ogniowej

na serwerze

Każdy komputer, serwer, desktop lub laptop
powinien mieć włączoną bramę ogniową,
zwiększając ty samym bezpieczeństwo ser-
wera oraz całej sieci. W naszym przypadku
serwer będzie świadczył usługę ssh oraz dhcp,
w związku z czym ruch skierowany do por-
tów 22, za pomocą protokołu tcp i portu 67
na udp, powinien być przepuszczany, aby
wszystko działało prawidłowo. Dodatkowo
należy włączyć opcję odpowiadania na pakie-
ty ping, gdyż za pomocą pingowania spraw-
dzana jest dostępność serwera archiwizacji
w skrypcie

kopia_zapasowa.sh.

Konfiguracja skryptu czysciciel.sh

Skrypt

czysciciel.sh

należy skopiować do ka-

talogu zdefiniowanego w pliku

kopia_zapa-

sowa.sh

w zmiennej

$katalog_zdalny

, np.

/mnt/backup/laptop i zmienić właściciela pli-
ku na takiego samego jak katalog, w którym

background image

48

październik 2007

praktyka

Serwer kopii zapasowych

49

www.lpmagazine.org

praktyka

Serwer kopii zapasowych

#!/bin/bash
# Program do wykonywania kopii zapasowej danych
# z laptopa
# na PC (serwer kopii zapasowej)
# Autor: Sławomir Skrzyniarz <diodak@gmail.com>
# Licencja: GPL v2
#
# Ustawienia programu

wersja_programu='0.5' # Wersja programu
serwer='10.1.1.5' # adres serwera kopii zapasowej
uzytkownik='slawek' # użytkownik na serwerze kopii
zapasowej
ilosc_prob=5 # Ilość pakietów (pingów) wysłanych w celu
sprawdzenia, czy serwer kopii zapasowej jest dostępny
do_skasowania='/home/*/.kadu/kadu.conf.xml.backup.* /
home/*/.thumbnails/large/* /home/*/.thumbnails/normal/
* /home/*/.mozilla/firefox/*/Cache/* /home/*/.opera/
cache4/* /home/*/.opera/cacheOp/* /home/*/.opera/
thumbnails/* /home/*/.gqview/thumbnails/*'

# Katalogi do opróżnienia przed wykonaniem kopii
# zapasowej
# do_archiwizacji='/etc /home'
# Katalogi podlegające archiwizacji oddzielone spacją

katalog_zdalny='/mnt/backup/laptop'

# Katalog w którym będą składowane kopie zapasowe
# na serwerze

pliki_wykluczone='*~ *.tmp' # Pliki, które nie zostaną
zarchiwizowane
ile_kopii=14 # Z ilu dni zostawić kopię
max_rozmiar=22000000000 # Maksymalny rozmiar kopii
zapasowej w bajtach (musi być o około 20% mniejsza niż
przydzielona pojemność dyskowa)
moj_home=$(cat /etc/passwd|grep $(whoami)|awk -
F ':' '{print $6}') # Katalog domowy użytkownika
uruchamiającego niniejszy skrypt - nie zmieniać

# Właściwy program

if [[ $(whoami) != 'root' ]] ; then
echo 'Uruchom skrypt z uprawnieniami
administratora'; exit
fi
inicjacja() {
read -p 'Czy chcesz logować się z jednorazowym
podawaniem hasła do klucza RSA (t/n): ' decyzja
case $decyzja in
't')
echo 'Podaj hasło zabezpieczające nowego
klucza [Enter]'
ssh-keygen

# Generacja unikalnego klucza szyfrowania

echo 'Podaj hasło potrzebne do zalogowania
na serwerze kopii zapasowej'
pliktemp=$(mktemp /tmp/backup.XXXXXXXX)

# Generacja losowej nazwy

scp $uzytkownik@$serwer:/home/$uzytkownik/.
ssh/authorized_keys $pliktemp

# kopiowanie między dwoma komputerami przez tunel ssh

if [[ $(cat $pliktemp|grep
$(whoami)'@'$(hostname)) != '' ]] ; then
echo 'Funkcja została włączona już wcześniej.'
else
cat $moj_home/.ssh/id_rsa.pub >> $pliktemp
echo 'Podaj ponownie hasło potrzebne do
zalogowania na serwerze kopii zapasowej'
scp $pliktemp $uzytkownik@$serwer:/home/
$uzytkownik/.ssh/authorized_keys
fi
/bin/rm $pliktemp; echo ''
;;
'n'|*)
echo -e 'Za każdym razem będziesz musiał/-a podać
hasło przy wykonywaniu kopii zapasowej.\nUniemożliwi to
zastosowanie tego skryptu jako demona systemowego.'
;;
esac
}
spr_serwer() {

# funkcja sprawdza dostępność komputera przechowującego
archiwizacje

spr_serwer() { # funkcja sprawdza dostępność
komputera przechowującego archiwizacje
echo ‘Sprawdzanie dostępności serwera kopii
zapasowej...’
routing=$(/sbin/ip route show|grep default|awk -F ‘
‘ ‘{print $2}’)
if [[ $routing == ‘via’ ]] ; then
if ( ping -c $ilosc_prob -q $serwer >
/dev/null); then
stan_serwera=’0’ # Serwer dostępny
else stan_serwera=’1’; fi
else stan_serwera=’1’; fi
return $stan_serwera
}

# Serwer dostepny

else stan_serwera='1'; fi
return $stan_serwera
}
czysc_tmpy() { # funkcja czyszcząca dysk z plików
tymczasowych
echo "Kasowanie niepotrzebnych plików..."
licznik_kasowania=0
for kasuj in $do_skasowania; do
if [ -f $kasuj ]; then
echo 'Kasowanie: '$kasuj
/bin/rm $kasuj
let licznik_kasowania=+1
fi
done
if [ $licznik_kasowania -gt 0 ]; then
echo -e 'Status: Skasowano\n'
else
echo -e 'Status: Nie ma plików do skasowania\n'
fi
}

Listing 1a.

Źródło pliku kopia_zapasowa.sh

background image

48

październik 2007

praktyka

Serwer kopii zapasowych

49

www.lpmagazine.org

praktyka

Serwer kopii zapasowych

export-ustawien() {

# Tworzy plik czysciciel.cfg na serwerze

dzis=$(date +%Y-%m-%d)

# Data dzisiejsza np. 2007.09.09

ostatnio=$(cat /var/log/kopia_ostatnio)

if [[ $ostatnio != $dzis ]] || [[ $1 == 'nazadanie'

]] ; then
pliktemp=$(mktemp /tmp/backup.XXXXXXXX)
echo -e "

# Plik konfiguracyjny czyściciela - nie edytować

ręcznie\n# Plik generowany przez skrypt kopia_
zapasowa.sh\n# Data generacji $(date)\ndo_
archiwizacji='$do_archiwizacji'

# Co było archiwizowane\nkatalog_zdalny=$katalog_zdalny
# Katalog w którym będą składowane kopie zapasowe
# na serwerze backupu\nile_kopii=$ile_kopii
# Z ilu dni zostawić kopię\nmax_rozmiar=$max_rozmiar
# Maksymalny rozmiar kopii zapasowej (musi być
# o około 20% mniejszy niż przydzielona pojemność
# dysku\n">$pliktemp

chmod 700 $pliktemp
echo -n 'Kopiowanie pliku konfiguracyjnego
czyściciela...'
scp $pliktemp $uzytkownik@$serwer:$katalog_
zdalny/czysciciel.cfg # -q bez komunikatów o postepie
kopiowania /bin/rm $pliktemp; echo ' [ OK ]'
fi
}
kopia() {
dzis=$(date +%Y-%m-%d)

# Data dzisiejsza np. 2007.09.09

for zasob in $do_archiwizacji; do
ostatnio=$(ssh slawek@10.1.1.5 "if [ -d $katalog_
zdalny''$zasob'-'$dzis ]; then echo $dzis; fi")
if [[ $ostatnio != $dzis ]] || [[ $1 ==
'nazadanie' ]] ; then
echo -n "Tworzenie kopii zapasowej katalogu: $zasob "
rsync --rsh=ssh --force --ignore-errors -l
--delete --delete-excluded --exclude=
"$pliki_wykluczone" --backup --backup-dir=$katalog_
zdalny$zasob-$(date +%Y-%m-%d) -a $zasob
$uzytkownik'@'$serwer:$katalog_zdalny$zasob-aktualne -vz
echo '[ OK ]'
date +%Y-%m-%d>/var/log/kopia_ostatnio
else
echo "Kopia $zasob na dzień $(date +%Y-%m-%d)
została już wykonana"
fi
done
}

case $1 in
'init')
echo 'Kopia zapasowa wersja '$wersja_programu
if ( spr_serwer ); then # OK
echo -e 'Status: Serwer osiągalny.
Można wykonać inicjację.\n'
inicjacja
else
echo -e 'Status: Serwer nie osiągalny.
Nie można wykonać inicjacji.\n'
fi
;;
'kopia')
echo 'Kopia zapasowa wersja '$wersja_programu
if [ ! -f /var/run/kopia-zapasowa ] ; then
echo $(date)>/var/run/kopia-zapasowa
chmod 700 /var/run/kopia-zapasowa
if ( spr_serwer ); then # OK
echo -e 'Status: Serwer osiągalny.
Można wykonać kopię zapasową.\n'
if [[ $(ssh-add -l|grep $(whoami)) ]]; then
czysc_tmpy
export-ustawien
kopia $2
else
echo 'Klucz autoryzacyjny niedostępny.
Wprowadź hasło.'
fi
else
echo -e 'Status: Serwer nie osiągalny.
Nie można wykonać inicjacji.\n'
fi
/bin/rm /var/run/kopia-zapasowa
else
echo 'Program jest już uruchomiony.'
fi
;;
'pomoc'|'--help'|'help'|*)
echo 'Składnia kopia_zapasowa.sh parametr1
[parametr2]'
echo 'Parametr 1:'
echo ' init - włącz logowanie bez hasła
na serwer kopii zapasowej'
echo ' kopia - wykonaj kopię zapasową'
echo ' pomoc - niniejsza pomoc'
echo 'Parametr 2:'
echo ' nazadanie - wymusza wykonanie kopii więcej
niż raz dziennie za każdym uruchomieniem skryptu'
;;
esac

skrypt będzie się znajdować, za pomocą
polecenia

chown slawek:slawek /mnt/

backup/laptop/czysciel.sh

oraz nadać

pełne uprawnienia użytkownikowi

chmod

700 /mnt/backup/laptop/czysciel.sh

.

Plik konfiguracyjny zostanie utworzony

przy pierwszym uruchomieniu skryptu kopia_
zapasowa.sh
na laptopie.

Konfiguracja crona

Umożliwienie okresowego usuwania starych
kopii zapasowych będzie możliwe po doda-

niu następującego wpisu

5 * * * * root

nice -n 19 /mnt/backup/laptop/czysciel.
sh

, na końcu pliku /etc/crontab lub za po-

mocą programu crontab. Skrypt czysciciel.sh
będzie uruchamiał się co godzinę, 5 minut
po każdej pełnej godzinie. Jeżeli będziemy

Listing 1b.

Źródło pliku kopia_zapasowa.sh

background image

50

październik 2007

praktyka

Serwer kopii zapasowych

51

www.lpmagazine.org

praktyka

Serwer kopii zapasowych

wykorzystywać zaawansowane oszczędza-
nie energii w dysku, to warto ten proces wy-
konywać zdecydowanie rzadziej, np. raz
dziennie. Na stronie http://pl.docs.pld-linux.
org/uslugi_cron.html
można znaleźć bardzo
przystępnie napisany podręcznik demona
zadań okresowych cron, który ułatwi usta-
wienie pożądanej częstotliwości uruchamia-
nia zadań.

Konfiguracja klienta

Wymagane oprogramowanie

Na laptopie, poza pakietem openssh i openssh-
clients,
będzie potrzebny również skrypt key-
chain
oraz screen, dostępny w postaci pakietu
instalacyjnego; praktycznie w każdej dystry-
bucji. Posłuży nam do automatyzacji procesu
pobierania hasła zabezpieczającego do klucza
szyfrującego, który wykorzystujemy do logo-

wania na serwerze kopii zapasowej – za po-
mocą ssh.

Konfiguracja ssh

W pliku /etc/ssh/ssh_config należy spraw-
dzić, czy parametr

ForwardAgent

jest usta-

wiony na

yes

. Ustawienie będzie dostęp-

ne, zaraz po zapisaniu w pliku w edyto-
rze tekstu.

Konfiguracja menedżera

haseł

Skrypt, wykonujący kopię zapasową, musi
dysponować hasłem zabezpieczającym do
klucza uwierzytelniającego RSA, by móc
go odszyfrować. Bez postaci odszyfrowanej
wykonanie kopii zapasowej nie będzie moż-
liwe. Natomiast, aby zautomatyzować cały
proces należy utworzyć skrypt uruchomie-
niowy środowiska KDE o nazwie start_ssh-
add_jako_root.sh
, w którym powinien znaleźć
się wpis:

#!/bin/bash
konsole -T 'Autoryzacja
dla programu kopia_zapasowa.sh'
-e /bin/bash
-c '/usr/bin/xhost
+127.0.0.1;
echo Podaj hasło
administratora;su - -c
"killall ssh-add.sh; screen
-a /usr/local/bin/ssh-add.sh"'

Plik należy umieścić w swoim katalogu do-
mowym w podkatalogu .kde/env. Skrypt bę-
dzie od teraz uruchamiał się przy każdym
logowaniu i prosił o podanie hasła adminis-
tratora oraz hasła zabezpieczającego do klu-
cza RSA.

Konfiguracja crona

Jeżeli chcemy umożliwić okresowe tworzenie
się kopii zapasowej należy dodać następujący
wpis:

0-59/10 * * * * root nice -n 19

/etc/cron.10min/kopia.zapasowa na końcu
pliku /etc/crontab

. Skrypt kopia_zapasowa.sh

będzie uruchamiać się co 10 minut, za pomocą
skryptu

/etc/cron.10min/kopia.zapasowa

,

zawierającego następujące wpisy:

#!/bin/bash
date >>/var/log/kopialog
su - -c '/home/slawek/Dokumenty/
Artykuły/kopia_zapasowa.sh kopia>>/
var/log/kopialog'

Raporty generowane przez skrypt będą od tej
pory zapisywane w pliku /var/log/kopialog.

Konfiguracja klienta

Konfiguracja skryptu kopia_zapasowa.sh znaj-
duje się w nim, a na początku są zadekla-
rowane zmienne powłoki, które pozwalają
na łatwe dostosowanie skryptu do włas-
nych potrzeb, bez wprowadzania zmian
w całym skrypcie. Przed pierwszym uru-
chomieniem należy zalogować się jako ro-
ot
, a potem skopiować niniejszy skrypt do
katalogu /usr/local/bin, nadać mu prawa
wykonywania

chmod 755 /usr/local/

bin/kopia_zapasowa.sh

i zmienić właści-

ciela na root

chown root:root /usr/local/

bin/kopia_zapasowa.sh

, a następnie otwo-

rzyć, np. za pomocą polecenia

mcedit /usr/

local/bin/kopia_zapasowa.sh

, a na koniec

wprowadzić swoje ustawienia zgodnie ze
wskazówkami zawartymi w komentarzach.
Po ustawieniu wszystkiego należy zapisać
zmiany, naciskając F2, i przygotować klucze
RSA do automatycznego logowania za po-
mocą polecenia

/usr/local/bin/kopia_

zapasowa.sh init

. W momencie wykony-

wania polecenia serwer archiwizacji po-
winien być włączony, a sieć podłączo-
na, natomiast laptop musi mieć przy-
dzielony adres IP. Gdy padnie pytanie
o ścieżkę do klucza to należy nacis-
nąć [Enter]. Następnym krokiem jest wpro
wadzenie hasła zabezpieczającego, ale
podczas wpisywania hasła (Enter pass-
phrase
) nie będzie widoczne. Hasło powin-
no być tak dobrane, aby stanowiło kom-
promis pomiędzy prostotą i bezpieczeń-
stwem, a będzie podawane przy każdym
uruchomieniu środowiska graficznego. Da-
lej nastąpi skopiowanie publicznej części
klucza szyfrującego RSA na serwer. Skrypt
zapyta nas dwukrotnie o hasło naszego
konto na serwerze archiwizacji i na tym
zakończy się proces. Jeśli wszystko poszło
prawidłowo, podczas próby logowania
z konta root na serwer za pomocą polecenia

ssh slawek@10.1.1.5

powinien pojawić

się monit o hasło do klucza szyfrującego,
a nie hasło na konto na serwerze, jak to
było do tej pory.

Konfiguracja skryptu

ssh-add.sh

Plik należy skopiować do katalogu /usr/
local/bin/
i nadać mu uprawnienia jak dla
kopia_zapasowa.sh. Skrypt będzie wywoływa-
ny przy każdym logowaniu. Za każdym ra-
zem będzie raz pytał o hasło administratora,
a następnie z prawami administratora uru-
chomi ssh-agenta i zapyta o hasło zabezpie-
czające do klucza prywatnego RSA. Potem
przejdzie w tło i będzie czuwać nad tym, by

Podstawowym kryterium oceny maksymal-
nej ilości kopii zapasowych, będzie zajmo-
wana przez nie objętość dyskowa. Na po-
czątku należy sprawdzić maksymalną obję-
tość naszych danych. Po kilku dniach wy-
konywania kopii zapasowych należy także
sprawdzić ile procent dziennie danych
ulega modyfikacji i wtedy obliczyć, czy wys-
tarczy nam miejsca na wymaganą ilość
kopii oraz czy potrzebny będzie nowy dysk.
Rozpatrzmy to na przykładzie.

Mamy laptop z dyskiem 80 GB, a nasz

system zajmuje 10 GB, natomiast dane 40
GB, czyli zostało jeszcze 30 GB wolnego,
więc należy przyjąć, że nasze dane będą
w niedalekiej przyszłości zajmować całą, do
tego przeznaczoną objętość, czyli w sumie
będą miały 70 GB. Domyślnie chcemy mieć
kopie zapasowe z ostatnich 14 dni. Po
pierwszych kilku dniach normalnej pracy
zaobserwowaliśmy, że objętość katalogów
różnicowych – z datami jest w stosunku 0,02
do katalogu *-aktualne, czyli 2 % danych
ulega zmianie. Teraz wystarczy wszystko
zsumować, aby dowiedzieć się, ile potrzeba
nam miejsca. Na dysku będzie potrzebne 70
GB na katalog aktualnie zawierający pełną
kopię, plus 14 dziennych kopii różnicowych
po 2 % z 70 GB oraz 20 % z 70 GB na
nieprzewidziany przyrost zmodyfikowanych
danych. W sumie wychodzi, że będzie nam
potrzeba około 120 GB miejsca na serwerze
na wszystkie kopie zapasowe.

Jak dobrać maksymalną ilość

kopii zapasowych?

background image

50

październik 2007

praktyka

Serwer kopii zapasowych

51

www.lpmagazine.org

praktyka

Serwer kopii zapasowych

w przypadku usunięcia klucza, spytać o hasło
i ponownie wprowadzić odszyfrowaną pos-
tać klucza do pamięci. Usunięcie hasła bę-
dzie zdarzać się często, gdy będziemy na
długo pozostawiali komputer w stanie
wstrzymania lub uśpienia. Zabezpieczy nas
w przypadku kradzieży, gdy zaszyfrowany
klucz stanie się bezużyteczny. Nasze dane
składowane na serwerze będą również bez-
pieczne, gdyż złodziej nie zdoła zalogować
się i ich pobrać lub usunąć, bo nie będzie
znał hasła do klucza.

Omówienie skryptów

Kopia_zapasowa.sh

W Listingu 1 zaprezentowano źródło pliku
kopia_zapasowa.sh wraz z przykładowymi
ustawieniami zgodnymi z Rysunkiem 1.
Skrypt korzysta z funkcji, pozwalając wy-
korzystać wielokrotnie te same fragmenty
kodu i równocześnie maksymalnie zredu-
kować długość skryptu. Funkcja

inicja-

cja()

służy do wygenerowania klucza

szyfrującego RSA do obsługi połączeń ssh
oraz umieszczenia jego publicznej części
na serwerze kopii zapasowej, w celu ogra-
niczenia ilości monitów o hasło, podczas
wykonywania kopii zapasowej, do jed-
nego, przy starcie, środowiska graficzne-
go KDE. Funkcja

spr_serwer()

sprawdza,

czy nasz laptop ma dostęp do serwera ko-
pii zapasowych, a

czysc_tmpy()

usuwa

pliki tymczasowe, zdefiniowane w zmien-
nej

$do_skasowania

przed przystąpieniem

do wykonania kopii zapasowej. Natomiast

export-ustawien()

kopiuje część ustawień

z pliku

kopia_zapasowa.sh

na serwer do pli-

ku czysciciel.cfg, wymaganego przez skrypt
czysciciel.sh.

kopia()

i jest to najważniejsza

część skryptu odpowiedzialna za wykona-
nie kopii zapasowej. Skrypt obsługuje dwa
parametry wejściowe. Za pomocą pierw-
szego możemy wywołać funkcję

inicja-

cja()

, podając init jako wartość parametru

oraz wykonać kopię dla kopia lub skorzy-
stać z krótkiej pomocy dla pomoc. Jeżeli ko-
pia została wykonana już danego dnia, to
skrypt odmówi ponownego jej wykonania,
chyba że podamy drugi parametr

nazada-

nie

, pochodzący od zwrotu na żądanie.

Za sprawą przekierowania do pliku /var/

log/kopialog w skrypcie /etc/cron.10min/kopia.
zapasowa
wszystkie komunikaty, generowane
przez skrypt kopia_zapasowa.sh są zapisywa-
ne w pliku /var/log/kopialog. Pozwala to zdiag-
nozować ewentualne źródła problemów, na-
tomiast ilość logów, generowana przez skrypt
jest dość duża i szybko może zająć znaczną

z klientów serwerów czasu – pakiet ntp i ntp-
client
. Klienty zsynchronizują swoje zegary
z super dokładnymi serwerami czasu i od tej
chwili będzie można regulować zegarki.

Autor jest absolwentem AGH, a swoją przy-
godę z Linuxem rozpoczął w 1997 r. Przez
3 lata administrował serwerem, natomiast
na co dzień używa dystrybucji Mandriva.
Kontakt z autorem: diodak@gmail.com

O autorze

Listing 2.

Źródło skryptu czysciciel.sh

#!/bin/bash
# Czysciciel.sh - program do usuwania starych kopii zapasowych
# Autor: Sławomir Skrzyniarz <diodak@gmail.com>
# Licencja: GPL v2
#
# Ustawienia programu
wersja_programu='0.2' # Wersja programu
. czysciciel.cfg # Wczytanie ustawień z pliku
#
# Właściwy program
echo 'Czysciciel wersja '$wersja_programu
pojemnosc=$(du -bs $katalog_zdalny|awk -F " " '{print $1}')
if [[ $pojemnosc -ge $max_rozmiar ]] ; then
echo "Przystępuję do usuwania starych archiwów..."
for zasob in $do_archiwizacji; do
stare=$(find $katalog_zdalny''$zasob-[!a]* -maxdepth 0 -mtime +$ile_
kopii -type d)
for stary in $stare; do
echo -n "Status: Usuwam $stary"
/bin/rm -r $stary
echo ' [ OK ]'
done
done
else
echo 'Status: Zostało jeszcze miejsce na nowe kopie zapasowe'
fi

Listing 3.

Źródło pliku ssh-add.sh

#!/bin/bash
# Program do sprawdzania, czy jest wczytany klucz ssh
# Autor: Sławomir Skrzyniarz <diodak@gmail.com>
# Licencja: GPL v2
/usr/bin/screen -d
/usr/bin/keychain
while (true); do
if [[ ! $(ssh-add -l|grep $(whoami)) ]]; then
cat /dev/null|ssh-add # Pyta o hasło za pomocą okienka w
środowisku graficznym
fi
sleep 10
done.

objętość dyskową, gdy nie zastosujemy takich
programów jak: logrotate. Jeżeli wszystko
działa prawidłowo, a kopie robią się w zapla-
nowanych terminach, to można zrezygnować
z logowania zdarzeń i przekierować wynik
zamiast do /var/log/kopialog to do /dev/null.

Skrypt do prawidłowej pracy wymaga

ustawienia aktualnego czasu na laptopie
i serwerze, gdzie datę i godzinę można wpro-
wadzić ręcznie, ale zegary komputerowe, z ra-
cji swojej niedokładności lub wyczerpania
podtrzymujących ich baterii, będą niedokła-
dnie odliczać czas, dlatego warto skorzystać


Wyszukiwarka

Podobne podstrony:
2007 04 Tworzenie kopii bezpieczeństwa danych [Administracja]
2007 10 Konfiguracja serwera IIS dla ASP NET z protokołem SSL
10.11.2010, prawo administracyjne ćwiczenia(2)
2007 10 24 Koniec świata za" lata
mat fiz 2007 10 08
2007-10-24 Dlaczego plany zabijaja prawo wlasnosci, materiały, Z PRASY
Instalacja Windows XP i Vista(FORMATOWANIE),tworzenie kopii zapasowej
17.10.2010r. – finanse publiczne, Administracja WSEI Lublin, Finanse Publiczne prof.Szolno-Koguc wse
28.10.07 - wyklady prawoznawstwo, Administracja UŚ (licencjat), I semestr, Prawoznawstwo
usuwania starych kopii zapasowych
Tworzenie kopii zapasowej systemu Windows 7
10.Swobodny przeplyw pracownikow, Administracja UKSW Ist, Prawo UE dla administracji, Prawo UE dla a
4 2007 10
2007 10 Extreme Programming (XP) i CMMI – Kreatywność, czy Dyscyplina [Inzynieria Oprogramowania]
2007 10 Audyt systemów informatycznych
Ekspert nr 2007 10
02.10.2011. POSTEPOWANIE EGZEKUCYJNE12, Administracja WSEI Lublin, Postepowanie egzekucyjne
2007.10.08 matematyka finansowa

więcej podobnych podstron