Diferència entre revisions de la pàgina «Backups en GNU/Linux»
(Hi ha 15 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 42: | Línia 42: | ||
Penseu que davant del dubte podeu mirar: | Penseu que davant del dubte podeu mirar: | ||
$ man tar | $ man tar | ||
− | ...per veure totes les opcions disponibles. | + | ...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: | Opcions: | ||
Línia 56: | Línia 64: | ||
P → Guarda els fitxers amb ruta absoluta | P → Guarda els fitxers amb ruta absoluta | ||
+ | === Backups incrementals === | ||
+ | Pots fer [http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html ''backups'' totals i incrementals amb TAR]. | ||
− | La típica utilització de tar és | + | |
− | $ 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 '''a'''ccedits (llegits) fa més de n minuts | ||
+ | * -amin -n : arxius '''a'''ccedits (llegits) fa menys de n minuts | ||
+ | * -amin n : arxius '''a'''ccedits (llegits) fa exactament n minuts | ||
+ | * -anewer <arxiu> : arxius '''a'''ccedits (llegits) amb posterioritat a la darrera modificació de <arxiu> | ||
+ | * -atime +n : arxius '''a'''ccedits fa més de n dies | ||
+ | |||
+ | Hi ha un joc complert igual a aquest amb cmin, cnewer, ctime que miren la data de modificació ('''c'''hange), 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.tar {} \; | ||
+ | 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 | ||
+ | |||
+ | ULL! el APPEND (-r) no es pot utilitzar en arxius ja comprimits. Només es pot fer en arxius TAR simples sense comrpimir. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == 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. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == 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. | ||
+ | #* [http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html 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 backups de nivell 0 han de dir-se <nowiki>bkp.<data>.level0.tgz</nowiki> , on <nowiki><data></nowiki> és la data amb format aaaa-mm-dd-HH-MM | ||
+ | #* Els backups incrementals han de dir-se <nowiki>bkp.<data>.inc.tgz</nowiki> | ||
+ | |||
+ | 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 errors s'han de volcar sobre l'arxiu /tmp/etcerr.txt |
Revisió de 21:42, 10 abr 2016
Contingut
Intro[modifica]
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[modifica]
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[modifica]
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[modifica]
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[modifica]
Pots fer backups totals i incrementals amb TAR.
Exemples amb tar[modifica]
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[modifica]
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.tar {} \;
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
ULL! el APPEND (-r) no es pot utilitzar en arxius ja comprimits. Només es pot fer en arxius TAR simples sense comrpimir.
CRON[modifica]
El CRON és un dimoni per executar tasques (comandes) programades.
Com sempre, per saber tot sobre CRON, podem fer
$ man cron
Crontab d'usuari[modifica]
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[modifica]
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[modifica]
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 backups de nivell 0 han de dir-se bkp.<data>.level0.tgz , on <data> és la data amb format aaaa-mm-dd-HH-MM
- Els backups incrementals han de dir-se bkp.<data>.inc.tgz
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 errors s'han de volcar sobre l'arxiu /tmp/etcerr.txt