Diferència entre revisions de la pàgina «Backups en GNU/Linux»
Línia 157: | Línia 157: | ||
Cron: | Cron: | ||
# Programa el CRON perquè a cada minut afegeixi la data actual a l'arxiu /tmp/dates.txt (sense esborrar el què hi ha). | # Programa el CRON perquè a cada minut afegeixi la data actual a l'arxiu /tmp/dates.txt (sense esborrar el què hi ha). | ||
− | # | + | # Programa el CRON per executar un script que faci un backup de nivell 0 cada 5 minuts i un backup incremental cada minut. |
− | # | + | #* Fes abans l'exercici 3 de ''backups''. |
− | # ... | + | #* Els backups han de dir-se bkp.<data>.level0.tgz (els de nivell 0), on <data> és la data amb format aaaa-mm-dd-hh-mm |
+ | #* Els backups incrementals han de dir-se bkp.<data>.inc.tgz |
Revisió del 11:32, 17 març 2016
Contingut
Intro
Les còpies de seguretat o backups són una part molt important del sistema, ja que permet recuperar-lo d'un desastre de fallada.
En planificar la política de backups cal que ens plantegem:
- QUÈ guardem, és a dir, QUINS arxius cal guardar
- Potser hi ha parts del sistema que no canvien o no val la pena guardar-les (per exemple, els arxius del sistema operatiu, ja que si cal recuperar el sistema potser podem reinstal·lar una nova versió).
- ON els posem
- backup local : ens permet recuperar desastres com fallades d'un disc
- backup remot : ens permet recuperar desastres com incendis que acabin amb tot el CPD
- QUAN i cada QUANT fem el backup
- La operació de backup consumeix recursos, si la fem massa sovint podem alentir el sistema
- Convé fer-los a la nit o quan el sistema estigui poc ocupat
Estratègies i Nivells
Per tal d'optimitzar el procés de backup convé plantejar-se QUINS arxius copiem:
- Còpies de Nivell 0: copiem TOTS els arxius
- Còpies incrementals: només copiem els arxius que hagin canviat des de la darrera còpia
- Còpies de Nivell 1: copiem tots els arxius que hagin canviat des de la darrera còpia de Nivell 0
- Còpies de Nivell 2: copiem tots els arxius que hagin canviat des de la darrera còpia de Nivell 1
- etc...
Comandes
La comanda més habitual és tar, tot i que es poden fer servir d'altres:
- tar: ens permet fer còpies incrementals de diferents nivells
- cpio
- dump/restore
En principi, aquestes comandes es van dissenyar per enregistrar en cintes magnètiques (TAR = Tape ARchiver) però ara tenen molta mes funcionalitat.
Són "empaquetadores", és a dir, només fan una unitat de un seguit d'arxius. Si, a més, volem comprimir, caldrà afegir la funcionalitat de GZIP o BZIP2 per minimitzar l'espai utilitzat.
TAR ja incorpora aquestes compressions i no cal utilitzar comandes addicionals.
TAR
Penseu que davant del dubte podeu mirar:
$ man tar
...per veure totes les opcions disponibles. Ens diu:
TAR(1) BSD General Commands Manual TAR(1) NAME tar — The GNU version of the tar archiving utility SYNOPSIS tar [-] A --catenate --concatenate | c --create | d --diff --compare | --delete | r --append | t --list | --test-label | u --update | x --extract --get [options] [pathname ...]
Opcions:
c → Crea un fitxer x → eXtreu fitxers d'un fitxer contenidor t → Testeja els fitxers emmagatzemats en un fitxer “contenidor” (mostra per stdout el contingut) r → Afegeix fitxers al final d'un fitxer “contenidor” v → Manera verbose f → Permet especificar el nom del fitxer “contenidor” Z → Comprimeix o descomprimeix mitjançant compress/uncompress z → Comprimeix o descomprimeix mitjançant gzip p → Conserva els permisos dels fitxers P → Guarda els fitxers amb ruta absoluta
Backups incrementals
Pots fer backups totals i incrementals amb TAR.
Exemples amb tar
La típica utilització de tar per comprimir, per exemple, tots els arxius de conf d'Apache2:
$ tar cvfz arxiu.tar.gz /etc/apache2
.tar.gz és el mateix que .tgz
Per comprovar-ho:
$ tar tvfz arxiu.tar.gz
Per descomprimir-ho:
$ tar xvfz arxiu.tar.gz
Per comprimir-ho amb BZIP2 (més comprimit que GZIP però força més lent):
$ tar cvfj arxiu.bz2 /etc/apache2
Combinant amb find
Find és una comanda que ens permet filtrar els arxius que compleixin certes característiques. El típic és cercar per nom:
$ find /etc -name "*.txt"
Però també podem buscar els que han estats modificats posteriorment a la data de creació d'un arxiu, per exemple:
$ find /etc -cnewer a.bz2
...ens trobarà tots els arxius modificats amb posterioritat a "a.bz2". Ja podeu imaginar que això pot servir per controlar de què fem backups.
Similarment, tenim aquests arguments:
- -amin +n : arxius accedits (llegits) fa més de n minuts
- -amin -n : arxius accedits (llegits) fa menys de n minuts
- -amin n : arxius accedits (llegits) fa exactament n minuts
- -anewer <arxiu> : arxius accedits (llegits) amb posterioritat a la darrera modificació de <arxiu>
- -atime +n : arxius accedits fa més de n dies
Hi ha un joc complert igual a aquest amb cmin, cnewer, ctime que miren la data de modificació (change), no la d'accés.
Per exemple, per esborrar arxius que ningú es mira des de fa més d'1 any:
$ find <carpeta> -atime 365 -exec rm {} \;
Ja que -exec executa la comanda per cadascun dels arxius trobats ({} es substitueix per la ruta de cada arxiu). El \; és per separar les comandes (s'ha de posar sempre per fer comandes independents).
Ja sabeu que per sortir de dubtes sempre tenim a mà el manual:
$ man find
Per comprimir els arxius que torna un find (en aquest cas, els arxius .txt continguts a la carpeta src):
$ find src -name "*.txt" | tar cfvz arxiustxt.tgz -T -
Aquest darrer cas és interessant. Fixa't en què fem servir la directiva -T (comprimeix els arxius llistats al següent argument) i enlloc d'un arxiu a -T li passem "-", que significat stdin
El mateix es pot aconseguir amb aquesta comanda:
$ find src -name "*.txt" -exec tar -rvf arxiustxt.tgz {} \;
Només que en aquest cas el què fem és una comanda tar per cada arxiu trobat per find i l'afegim (-r=append) a arxiustxt.tgz
CRON
El CRON és un dimoni per executar tasques (comandes) programades.
Com sempre, per saber tot sobre CRON, podem fer
$ man cron
Crontab d'usuari
Els fitxer de configuració global del CRON és /etc/crontab. El podríem editar directament, però la manera oficial de treballar amb CRON és aquesta:
$ crontab -e
...i entrareu a editar-ho amb el nostre editor favorit: el VI ;)
Amb aquesta comanda editarem el CRON de l'usuari actual. OJU: quan programem una tasca CRON cal tenir clar quin usuari l'executarà per tal que tingui els permisos adients per resoldre la tasca a fer.
Anacron
Si editem /etc/crontab manualment (fes-li un cop d'ull per veure com funciona CRON), veurem que hi ha diverses entrades que s'executen regularment. Executen el què hi ha a les següents carpetes:
- /etc/crontab.hourly : s'executa cada hora
- /etc/crontab.daily : s'executa cada dia
- /etc/crontab.weekly : s'executa cada setmana
- /etc/crontab.monthly : s'executa cada mes
Per activar-ho calda instal·lar el paquet anacron.
Exercicis
Backups:
- Fes un script que monti un sistema d'arxius extern (per exemple, a sdb o sdc) i realitzi una còpia dels arxius .txt que hi ha a /etc.
- A l'acabar cal desmuntar el sistema d'arxius extern.
- Si no pot muntar el sistema extern el script s'aturarà donant un missatge per stderr sense fer cap backup.
- Fes un script que tregui un backup de les bases de dades MySQL del sistema en arxius separats i finalment les empaqueti en un sol arxiu .tgz
- TAR està preparat per realitzar còpies de seguretat de nivell 0 i incrementals.
- Com utilitzar TAR per backups incrementals.
- Fes un script que faci un backup de /etc
- Si li passem la opció -0 farà un backup de nivell 0 (total). Per fer un de nivell 1 li passarem -1 com a argument.
- Ha de dir quants arxius ha processat
- Els errors s'han de volcar sobre l'arxiu /tmp/etcerr.txt
Cron:
- Programa el CRON perquè a cada minut afegeixi la data actual a l'arxiu /tmp/dates.txt (sense esborrar el què hi ha).
- Programa el CRON per executar un script que faci un backup de nivell 0 cada 5 minuts i un backup incremental cada minut.
- Fes abans l'exercici 3 de backups.
- Els backups han de dir-se bkp..level0.tgz (els de nivell 0), on és la data amb format aaaa-mm-dd-hh-mm
- Els backups incrementals han de dir-se bkp..inc.tgz