Rdiff-backup

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Alcatras (vitalap | szerkesztései) 2010. január 16., 17:19-kor történt szerkesztése után volt.

Ez a szócikk az rdiff-backup nevű backup-megoldást mutatja be. Javaslom, hogy mielőtt elolvasod, nézd meg a Backup szócikket is, mert néhány ott leírt fogalmat itt csak használni fogok.

Az rdiff-backup differenciális mentést hajt végre, a hagyományostól kissé eltérő formában. A megszokott backup-rendszereknél lenne egy "régen" készült teljes mentésünk, valamint inkrementális mentéseink, amelyek az ehhez képesti különbséget, a legutóbbi teljes mentés óta történt változásokat tartalmazzák. Az rdiff-backup-nál ez nagyjából fordítva van: a legfrissebb mentés mindig teljes, és a korábbi mentések inkrementálisak. Az rdiff-backup olyan fájlokat tárol, amelyek segítségével az aktuális mentésből előállíthatóak korábbi állapotok. Így az aktuális mentés visszaállítása rendkívül gyors (lényegében egyetlen másolás), és minél korábbi állapotot szeretnénk visszaállítani, annál tovább fog tartani a dolog.

Az első mentés egy teljes mentés, ami hosszú ideig tart, de a differenciák ettől kezdve nagyjából azonos idő alatt készülnek el és általában jelentősen gyorsabban, mint a teljes mentés (ez persze attól is függ, milyen és mennyi változás történik két mentés között).

Tartalomjegyzék

1 Előnyök

  • A teljes backup tükrözés formájában áll rendelkezésre, ezért nagyon gyorsan visszállítható belőle bármi.
  • A különbségek mindig az előző mentéshez képest készülnek, így gyorsan megtörténik a biztonsági mentés.
  • Az különbségek tömörített formában tárolódnak, így kevés helyet foglalnak.
  • Követi a Unix-filozófiát:
    • az rsync-re épül, nem írtak hozzá saját rsync-szerűséget.
    • Távoli gépekre ssh segítségével kapcsolódik, nem saját megoldással.
  • Natív windowsos kliens is létezik hozzá.

2 Hátrányok

  • Nem folyamatos a backup, hanem eseti.
  • A teljes mentés tömörítés nélkül, tükrözés formájában van jelen, így sok helyet foglal.
  • Nem tudja titkosítva tárolni a biztonsági mentést (pl. duplicity-vel ellentétben).

3 Szakácskönyv

Ebben a fejezetben egy olyan konkrét rendszer beállítását mutatom be, amely egy vagy több távoli gép biztonsági mentését végzi el automatikusan, felügyelet nélkül, rendszeres időközönként. Inkrementális biztonsági mentést készít és a mentési folyamatot a backup szerverről indítjuk, így több gép biztonsági mentését is hatékony erőforráskihasználással végezhetjük.

3.1 A backup rendszer áttekintése

3.2 A backup-szerver telepítése

Ez a leírás alapértelmezett beállításokkal telepített Debian Lenny 5.0 rendszert feltételez úgy szerver-, mint kliensoldalon.

Csomagok telepítése:

# apt-get update
# apt-get install rdiff-backup sudo openssh-server fail2ban \
hddtemp smartmontools munin-node munin-plugins-extra
  • rdiff-backup: maga a backup-program.
  • sudo: ahhoz szükséges, hogy az rdiff-backup-ot szerver-módban futtathassuk a célrendszeren. Mivel a backup-szerverről önmagáról is akarunk biztonsági másolatot készíteni, ezért ezen a rendszeren is szükség van erre.
  • openssh-server: azért kell, hogy a kliensek tudjanak kapcsolódni.
  • fail2ban: az ssh-s jelszópróbálgatókat tiltja ki (nem szükséges, csak ajánlott).
  • hddtemp, smartmontools, munin-node, munin-plugins-extra: monitorozáshoz (nem szükséges, csak ajánlott).

3.3 SSH-szerver beállítása

A /etc/ssh/sshd_config-ba írjuk bele az alábbiakat:

  PermitRootLogin no
  TCPKeepAlive yes
  AllowUsers <saját felhasználó> lhbackup
  • PermitRootLogin: letiltjuk a root bejelentkezését SSH-n keresztül (nem szükséges, csak ajánlott)
  • TCPKeepAlive: az SSH-t utasítjuk, hogy időnként küldjön keepalive-csomagot. Ez ahhoz kell, hogy hamarabb észrevegye, ha megszűnt a kapcsolat a klienssel. Nem szükséges, de ajánlott.
  • AllowUsers: Ezzel a direktívával adhatjuk meg, mely felhasználókat engedi bejelentkezni az sshd. Egyáltalán nem kötelező megadni, de ha beállítjuk, állítsuk be úgy, hogy a saját, a gép távmenedzsmentjére használt felhasználónk és a backupokkal kapcsolatos felhasználó is be tudjon lépni.

3.4 Tűzfalszabályok

Értelemszerűen gondoskodni kell arról, hogy a mentendő kliensek tudjanak a szerver SSH-portjához kapcsolódni.

3.5 Egy gép felvétele a backupolandó kliensek közé

Felhasználó felvétele: azért veszünk fel egyedi felhasználót, mert ennek a usernek a nevében fog futni majd az rdiff-backup a backup szerveren. Sima userként fut, jogosultságai korlátozottak és ennek a usernek lehet quota-ja is. Így az egyik backup nem eszi el a másik elől a helyet. A dátumot, jogosultságokat, stb. az rdiff-backup saját maga elintézi, tárolja külön. A quota beállításokat az olvasóra bízom.

Tehát vegyük fel az új felhasználót a backup szerveren:

# adduser --system --ingroup nogroup --disabled-password <szervernév>

Állítsunk elő neki egy új RSA-kulcspárt:

# sudo -H -u <szervernév> ssh-keygen -t rsa -b 4096

Az új felhasználó ~/.ssh/config fájljába írjuk bele a következőket:

  host <szervernév>-backup
     hostname <szerverelérés, domain vagy IP>
     user lhbackup
     compression yes
     protocol 2
     port 22

A beállítások jelentését l. pl. az ssh_config(5)-ban; de talán egyértelműek is.

3.6 Backup-scriptek

A backup-scriptek az rdiff-backup paraméterezésének megfelelően egyszerűen elkészíthetőek. Ezeket aztán cronból futtathatjuk backup szerveren. Az rdiff-backup használatát legegyszerűbben példákon keresztül lehet jól megértetni és szemléltetni amihez segítség a következő link: Rdiff-backup Examples (angol). Valamit a BackupNinja szócikkben is találhatók rdiff-backup-hoz példák.

3.6.1 Példák

gep01:

#!/bin/bash

EXCLUDES="--exclude /dev --exclude /proc --exclude /tmp --exclude /sys"

echo "Removing increments older than 30 days..."
/bin/su <szervernév> -m -c "/usr/bin/rdiff-backup --force --remove-older-than 30D /home/<szervernév>/backup"

echo "Backing up <szervernév>..."
/bin/su <szervernév> -m -c "/usr/bin/rdiff-backup $EXCLUDES <szervernév>-backup::/ /home/<szervernév>/backup"

gep02:

#!/bin/bash

EXCLUDES="--exclude /dev --exclude /proc --exclude /tmp --exclude /sys --exclude /opt"

echo "Removing increments older than 30 days..."
/bin/su <szervernév2> -m -c "/usr/bin/rdiff-backup --force --remove-older-than 30D /home/<szervernév2>/backup"

echo "Backing up <szervernév2>..."
/bin/su <szervernév2> -m -c "/usr/bin/rdiff-backup $EXCLUDES <szervernév2>-backup::/ /home/<szervernév2>/backup"

Ezt követően a cronból egy gyűjtőscriptet használhatunk:

#!/bin/bash

date
time /root/gep01
date
time /root/gep02
date

A gyűjtőscript használata azért célszerű, mert így a gépeket sorban menthetjük, folyamatosan és egyenletesen van terhelve a backup-szerver. A date és time parancsok segítségével láthatjuk az egyes backupok kezdési és befejezési idejét, valamint, hogy mennyi ideig tartott a procedúra. Természetesen ha a fenti példa alapján valósítjuk meg a scripteket, akkor számítanunk kell arra, hogy a cron naponta leveleket fog küldeni nekünk a backupolási folyamat eredményéről. Ha ez nem célunk, akkor minden mehet a /dev/null-ba. Figyeljünk arra, hogy a backup folyamat be tudjon fejeződni a rendelkezésre álló idő alatt. Tehát mielőtt újraindulna cron-ból a script. Ha nem fejeződik be, akkor átlapolódások jöhetnek létre, aminek nem látható következményei lesznek. Valószínűleg az rdiff-backup nem fog új backup folyamatot kezdeni a célkönyvtárban, mert felismeri, hogy már fut egy másik rdiff-backup azon a könyvtáron, de pl. a kitörölheti a már futó rdiff-backup alól a régi fileokat a "--force" opció miatt, aminek valószínűleg backup sérülés lesz az eredménye. Ha ezt nem akarjuk, akkor ne használjuk a --force opciót, aminek a következtében viszont betelhet a winchester ha olyat akarunk törölni, amit az rdiff-backup valamiért még megtartana.

4 A kliensek telepítése

Csomagok telepítése:

# apt-get update
# apt-get install rdiff-backup sudo openssh-server

Itt létrehozunk egy backup felhasználót (lhbackup), amelynek a nevében a Backup Server majd be tud ssh-zni a mentendő gépre, és amely sudoval rootként tudja futtatni az 'rdiff-backup --server' parancsot:

# adduser --ingroup nogroup --disabled-password lhbackup
# chmod 0700 /home/lhbackup

4.1 A sudo beállítása

lhbackup ALL=(ALL) NOPASSWD: /usr/bin/rdiff-backup --server

4.2 További beállítások

Biztosítanunk kell, hogy az lhbackup user be tudjon lépni a mentendő gépre ssh-val, jelszó megadása nélkül; de ez még kevés. Az lhbackup user .ssh/authorized_keys fájljában a írjuk elő, hogy a backupszerver IP-jéről belépve csak az rdiff-backupot futtathatjuk:

command="sudo /usr/bin/rdiff-backup --server",from="<BACKUPSZERVER IPCIME>" <PUBLIKUS RSA-KULCS>
Személyes eszközök