Shell-parancsfájlok

Egy rendszer biztonsági mentésének legegyszerűbb módja shell-parancsfájlok használata. Egy parancsfájllal például beállíthatók a használandó könyvtárak, és ezek átadhatók paraméterként a tar segédprogramnak, amely létrehoz egy archívumfájlt. Az archívumfájl másik helyre helyezhető vagy másolható át. Az archívum létrehozható távoli fájlrendszeren, például NFS csatoláson is.

A tar segédprogram egy archívumfájlt hoz létre több fájlból vagy könyvtárból. A tar képes az archívum méretének csökkentése érdekében a fájlok átküldésére egy tömörítő segédprogramon.

Egyszerű shell-parancsfájl

Az alábbi shell-parancsfájl a tar segítségével hoz létre egy archívumfájlt egy csatolt távoli NFS fájlrendszeren. Az archívumfájl neve további parancssori segédprogramok használatával kerül megállapításra.

#!/bin/sh
####################################
#
# NFS-csatolásra biztonsági mentést készítő parancsfájl.
#
####################################

# Mit kell menteni. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Hová kell menteni.
dest="/mnt/backup"

# Archívumfájl nevének létrehozása.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Kezdési állapotüzenet kiírása.
echo "$backup_files mentése ide: $dest/$archive_file"
date
echo

# A fájlok mentése a tar segítségével.
tar czf $dest/$archive_file $backup_files

# Befejezési állapotüzenet kiírása.
echo
echo "A mentés kész"
date

# A fájlok részletes felsorolása a $dest könyvtárban a fájlméretek ellenőrzéséhez.
ls -lh $dest
  • $backup_files: ez a változó felsorolja a menteni kívánt könyvtárakat. A listát igényeinek megfelelően szabja személyre.

  • $day: ez a változó tárolja a hét napjait. Ennek használatával a hét minden napjához létrejön egy archívumfájl, így hét napi archiválási előzménnyel fogunk rendelkezni. Ezt számos más módon is el lehet érni, beleértve a date segédprogram használatát.

  • $hostname: ez a változó a rendszer rövid gépnevét tárolja. A gépnév az archívum fájlnevében való használatával elérhető, hogy több rendszer napi archívumfájljai ugyanabba a könyvtárba kerülhessenek.

  • $archive_file: az archívumfájl teljes neve.

  • $dest: az archívumfájl célja. A könyvtárat a mentési parancsfájl végrehajtása előtt létre kell hozni és ebben az esetben csatolni is kell. Az NFS használatával kapcsolatos részletekért lásd a „Hálózati fájlrendszer (NFS)” szakaszt.

  • állapotüzenetek: a konzolra az echo segédprogrammal kiírt elhagyható üzenetek.

  • tar czf $dest/$archive_file $backup_files: az archívumfájl létrehozására használt tar parancs.

    • c: létrehozza az archívumot.

    • z: az archívumot tömöríti a gzip segédprogrammal.

    • f: archívumfájl használata. Enélkül a tar kimenete a szabványos kimenetre kerül elküldésre.

  • ls -lh $dest: ez az elhagyható utasítás hosszú (-l) és közérthető (-h) formátumban kiírja a célkönyvtár tartalmát. Ez az archívumfájl méretének gyors ellenőrzésére használható. Ez az ellenőrzés ugyanakkor nem helyettesíti az archívumfájl tesztelését.

Ez egy egyszerű példa biztonsági mentési parancsfájl. A biztonsági mentést készítő parancsfájl rengeteg beállítást tartalmazhat. A shell parancsfájlok írásával kapcsolatos mélyebb információkat tartalmazó erőforrásokat a „Hivatkozások” szakaszban találhat.

Parancsfájl végrehajtása

Végrehajtás terminálból

A fenti biztonsági mentést készítő parancsfájl végrehajtásának legegyszerűbb módja a tartalom beillesztése egy fájlba, és elmentése például backup.sh néven. Ezután kiadható a következő parancs:

sudo bash backup.sh

Ezzel tesztelhető a parancsfájl megfelelő és elvárt módon való működése.

Végrehajtás cron segítségével

A cron segédprogram használatával automatizálható a parancsfájl végrehajtása. A cron démon lehetővé teszi a parancsfájlok vagy parancsok adott időben történő futtatását.

A cron a crontab fájl bejegyzéseivel konfigurálható. A crontab fájlok mezőkre vannak osztva:

# m h dom mon dow   command
  • m: a parancs végrehajtásának perce, 0 és 59 között.

  • h: a parancs végrehajtásának órája, 0 és 23 között.

  • dom: a hónap napja, amikor a parancs végrehajtásra kerül.

  • mon: a parancs végrehajtásának hónapja 1 és 12 között.

  • dow: a hét napja, amikor a parancs végrehajtásra kerül, 0 és 7 között. A vasárnap megadható 0-ként és 7-ként is, mindkét érték érvényes.

  • command: a végrehajtandó parancs.

A crontab fájl bejegyzéseinek hozzáadásához vagy módosításához használja a crontab -e parancsot. A crontab fájl tartalma megjeleníthető a crontab -l parancs használatával.

A fenti backup.sh parancsfájl a cron segítségével történő végrehajtásához adja ki a következő parancsot:

sudo crontab -e
[Megjegyzés]

A crontab -e parancs sudo-val történő használata a root felhasználó crontab fájlját szerkeszti. Erre akkor van szükség, ha csak a root felhasználó által elérhető könyvtárakról is készít biztonsági mentést.

Vegye fel a következő bejegyzést a crontab fájlba:

# m h dom mon dow   command
0 0 * * * bash /usr/local/bin/backup.sh

A backup.sh parancsfájl minden délben végrehajtásra kerül.

[Megjegyzés]

A bejegyzés megfelelő végrehajtása érdekében a backup.sh parancsfájlt át kell másolni a /usr/local/bin/ könyvtárba.

A crontab beállításaival kapcsolatos további, mélyebb információkért lásd a „Hivatkozások” szakaszt.

Visszaállítás az archívumból

Az archívumot létrehozása után fontos tesztelni is. Az archívum tesztelhető az általa tartalmazott fájlok listáztatásával, de a legjobb teszt egy fájl visszaállítása az archívumból.

  • Az archívum tartalmának kiíratásához adja ki a következő parancsot:

    tar -tzvf /mnt/backup/host-Monday.tgz
    
  • Az archívum egy fájljának visszaállításához egy másik könyvtárba:

    tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts
    

    A tar -C kapcsolója átirányítja a kibontott fájlokat a megadott könyvtárba. A fenti példa az /etc/hosts fájlt a /tmp/etc/hosts helyre bontja ki. A tar újra létrehozza a fájlt tartalmazó könyvtárszerkezetet.

    Figyelje meg, hogy a helyreállítandó fájl útvonalának elejéről lemaradt a / jel.

  • Az archívum összes fájljának helyreállításához adja ki a következő parancsot:

    cd /
    sudo tar -xzvf /mnt/backup/host-Monday.tgz
    
[Megjegyzés]

Ez felülírja a fájlrendszeren éppen megtalálható fájlokat.

Hivatkozások

  • A shell-parancsfájlok írásával kapcsolatos további információkért lásd az Advanced Bash-Scripting Guide leírást.

  • A Teach Yourself Shell Programming in 24 Hours című könyv online elérhető, és remek információforrás a shell parancsfájlok írásához.

  • A CronHowto wikioldal a cron speciális lehetőségeivel kapcsolatos részleteket tartalmaz.

  • A tar további lehetőségeivel kapcsolatban lásd a GNU tar kézikönyvét.

  • A Wikipedia Backup Rotation Scheme cikke a további mentésforgatási sémákról tartalmaz információkat.

  • A parancsfájl a tar segédprogramot használja az archívum létrehozásához, de számos más parancssori segédprogram is használható, például:

    • cpio: fájlok archívumokba másolására és azokból kibontására használható.

    • dd: a coreutils csomag része, alacsony szintű segédprogram adatok egyik formátumból a másikba másolására.

    • rsnapshot: teljes fájlrendszerek másolatainak készítésére használatos fájlrendszer-pillanatkép segédprogram.