No existeixen les còpies de seguretat; només existeixen les restauracions provades. Guarda't aquesta frase, perquè és l'única idea d'aquesta lliçó que no et pots permetre oblidar. A srv-tramontana hi ha còpies des de fa setmanes: copia_tramontana.sh les genera, en verifica els sha256sum, les deixa en un volum propi i un temporitzador de systemd el dispara cada matinada. Tot això sona molt bé i no demostra absolutament res, perquè ningú no n'ha restaurat mai cap. Una còpia que no s'ha restaurat és una hipòtesi, no una protecció. Aquesta lliçó tanca el mòdul convertint aquella hipòtesi en un procediment provat, amb RPO i RTO acordats, retenció per generacions, còpies incrementals que no creixen sense control, xifratge, verificació i un manual d'operació (runbook) que algú podria seguir encara que tu fossis de vacances.
Contingut
- Què es copia i què no: l'inventari de Tramontana
- RPO i RTO: quant podem perdre i quant podem trigar
- La regla 3-2-1 i la retenció per generacions
- Completa, incremental i diferencial
- Coherència: el fitxer que s'escriu mentre el copies
- Eines:
tar,rsync,ddirestic - Còpies del sistema enfront de reconstruir per codi
- Xifratge, custòdia i obligacions legals
- Verificació i la prova de restauració
- Automatitzar i vigilar l'edat de l'última còpia
- Restaurar: els tres escenaris de Tramontana
- El manual d'operació de recuperació
- Què es copia i què no: l'inventari de Tramontana
La primera decisió no és tècnica: és decidir què mereix copiar-se. La regla és senzilla: es copia el que no es pot reconstruir.
| Categoria | Es copia? | Per què |
|---|---|---|
| Dades de negoci (reserves, base de dades, pujades) | Sí, el primer | Irrecuperables: són el negoci |
Configuració (/etc, unitats, sudoers, fstab) |
Sí | Reconstruïble, però costa hores i s'obliden detalls |
Secrets (claus, certificats, db_password) |
Sí, xifrats i a part | Sense ells no arrenca res; amb ells en clar, la còpia és una bomba |
| Sistema operatiu i paquets | No: n'hi ha prou amb la llista | apt-mark showmanual els reinstal·la |
| Releases de l'aplicació | Només l'actiu | Els altres són al dipòsit d'artefactes |
| Registres | Segons la retenció acordada | Valor forense i legal, no operatiu |
Memòries cau, temporals, /proc, /sys |
Mai | Es regeneren; només ocupen i alenteixen |
L'inventari concret de Tramontana, que és el que es copiarà:
/home/operador/dades/reserves.csv # dades personals d'hostes (CRÍTIC) base de dades tramontana # abocament lògic diari (CRÍTIC) /opt/tramontana/shared/uploads/ # documents pujats (CRÍTIC) /etc/tramontana/ # app.conf, desplegar.conf (ALT) /etc/systemd/system/tramontana* # unitats i temporitzadors (ALT) /etc/sudoers.d/tramontana, /etc/fstab, /etc/logrotate.d/tramontana (ALT) /home/operador/scripts/ i bin/ # ja versionats a git (MITJÀ) /opt/tramontana/releases/3.2.1/ # només el release actiu (MITJÀ) /opt/tramontana/HISTORIAL # la memòria dels canvis (ALT) llista de paquets: apt-mark showmanual (MITJÀ)
- RPO i RTO: quant podem perdre i quant podem trigar
Dues sigles que cal acordar amb la Marta, no decidir en solitari:
- RPO (Recovery Point Objective): quantes dades ens podem permetre perdre, mesurat en temps. Si la còpia és diària a les 02:30 i el servidor mor a les 18:00, es perden 15,5 hores de reserves. És acceptable?
- RTO (Recovery Time Objective): quant pot estar caigut el servei mentre es restaura.
Traduït a Tramontana amb xifres reals: entren unes 25 reserves al dia, amb un import mitjà de 313,70 €. Perdre un dia complet són uns 7.842,50 € en reserves que caldria reconstruir a mà des dels correus de confirmació, amb el cost reputacional de trucar als hostes.
| Escenari | RPO acordat | RTO acordat | Què implica tècnicament |
|---|---|---|---|
| Esborrat accidental d'un fitxer | 24 h | 30 min | La còpia diària n'hi ha prou |
| Release corromput | 0 | 15 min | Còpia prèvia al desplegament (ja existeix) |
| Pèrdua total del servidor | 4 h | 8 h | Còpia cada 4 hores de la base de dades i còpia fora del servidor |
Aquell RPO de 4 hores per a la base de dades és la decisió que canvia el disseny: la còpia diària de les 02:30 no el compleix, i cal un abocament cada quatre hores. Cada millora d'RPO o RTO costa diners i complexitat; per això la decisió és del negoci, amb el teu assessorament tècnic.
- La regla 3-2-1 i la retenció per generacions
La regla 3-2-1 resumeix dècades de desastres:
- 3 còpies de les dades (l'original i dues més).
- En 2 suports o sistemes diferents.
- 1 d'elles fora de l'emplaçament.
Avui a srv-tramontana tenim una còpia, al mateix servidor, al mateix edifici. Si el disc falla en un mode que s'endugui per davant el VG, o si algú xifra la màquina, o si s'incendia l'oficina, no hi ha còpia. /srv/tramontana/backups és una comoditat, no una protecció. La variant moderna hi afegeix un 1-0: almenys una còpia immutable o sense connexió, i zero errors a l'última verificació, perquè el ransomware modern busca i xifra les destinacions de còpia accessibles des del servidor.
Retenció GFS (Grandfather-Father-Son): no totes les còpies valen el mateix amb el temps.
| Generació | Freqüència | Se'n conserven | Per a què |
|---|---|---|---|
| Filles (diàries) | Cada dia | 14 | Errors recents: un esborrat d'ahir |
| Pares (setmanals) | Diumenge | 8 | Corrupció detectada setmanes després |
| Àvies (mensuals) | Dia 1 | 12 | Requisits legals i auditoria |
Amb això, restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 deixa l'històric exacte que vas acordar, sense decisions improvisades.
- Completa, incremental i diferencial
| Tipus | Què copia | Espai | Temps de còpia | Restauració |
|---|---|---|---|---|
| Completa | Tot, cada vegada | Màxim | Màxim | La més ràpida: un sol conjunt |
| Incremental | El que ha canviat des de la còpia anterior (sigui quina sigui) | Mínim | Mínim | La més lenta: completa + totes les incrementals, en ordre |
| Diferencial | El que ha canviat des de l'última completa | Intermedi, creixent | Intermedi | Mitjana: completa + una diferencial |
El compromís clàssic: completa setmanal + incrementals diàries. La cadena incremental té un risc real que cal dir en veu alta: si es perd o es corromp una baula, tot el posterior és irrecuperable. Per això es verifiquen totes, no només l'última. Les eines modernes amb deduplicació (restic, borg) eliminen gairebé tot aquest dilema: cada còpia es comporta com a completa a l'hora de restaurar i ocupa com una incremental.
- Coherència: el fitxer que s'escriu mentre el copies
Copiar un fitxer mentre algú l'escriu produeix brossa: la primera meitat del fitxer és d'abans del canvi i la segona de després. En una base de dades, aquella barreja és una còpia que no es pot obrir. Tres solucions, en ordre de preferència:
| Solució | Com | Tall de servei | Quan fer-la servir |
|---|---|---|---|
| Abocament en calent de l'aplicació | pg_dump, mysqldump, exportació pròpia |
Cap | La millor: l'aplicació garanteix la coherència |
| Instantània LVM (05-04) | Congela el volum en un instant | Segons | Fitxers que no tenen abocament propi |
| Aturar el servei | systemctl stop, copiar, start |
El que duri la còpia | Últim recurs |
La instantània a la pràctica, aplicant el de 05-04 i aprofitant els 5 GiB lliures que vam deixar al VG expressament:
sudo lvcreate -L 2G -s -n snap-copia /dev/vg-dades/lv-backups
sudo mkdir -p /mnt/snap && sudo mount -o ro /dev/vg-dades/snap-copia /mnt/snap
# ... copiar des de /mnt/snap, amb la tranquil·litat d'un estat congelat ...
sudo umount /mnt/snap && sudo lvremove -y /dev/vg-dades/snap-copiaLa seqüència correcta i completa per a la base de dades de Tramontana combina les dues primeres: abocament lògic amb pg_dump (coherent per definició) i instantània per als fitxers d'uploads, que no tenen abocament propi.
- Eines:
tar, rsync, dd i restic
tar, rsync, dd i restictar amb incrementals
# Còpia completa: crea el fitxer d'estat (snar) que registra què es va copiar
sudo tar --listed-incremental=/srv/tramontana/backups/estat.snar \
-czf /srv/tramontana/backups/completa-$(date +%F).tar.gz /etc/tramontana /opt/tramontana/shared
# Incremental: el MATEIX fitxer .snar; tar copia només el que ha canviat des d'aleshores
sudo tar --listed-incremental=/srv/tramontana/backups/estat.snar \
-czf /srv/tramontana/backups/inc-$(date +%F).tar.gz /etc/tramontana /opt/tramontana/sharedEl .snar és el cervell de l'operació: si el perds, la següent «incremental» serà una completa, i si el barreges entre cadenes, la còpia serà incoherent. Guarda'l amb les còpies i fes-ne una còpia a part. I la inspecció abans d'extreure, com mana la convenció del curs:
rsync --link-dest: el truc que cal conèixer
Aquí es tanca el cercle amb els enllaços durs de 02-06. --link-dest compara amb una còpia anterior i, per a cada fitxer que no ha canviat, crea un enllaç dur en lloc de copiar les dades. Resultat: cada còpia es veu i es restaura com una còpia completa, però al disc només ocupa el que ha canviat.
ahir=$(date -d yesterday +%F)
avui=$(date +%F)
rsync -aHAX --delete \
--link-dest="/srv/tramontana/backups/diaries/$ahir" \
/opt/tramontana/shared/ \
"/srv/tramontana/backups/diaries/$avui/"$ du -sh --apparent-size /srv/tramontana/backups/diaries/2026-08-19
2.1G /srv/tramontana/backups/diaries/2026-08-19
$ du -sh /srv/tramontana/backups/diaries/2026-08-19
118M /srv/tramontana/backups/diaries/2026-08-19Aparenta 2,1 GiB —i en restaurar ho són—, però només consumeix 118 MiB de disc nou. Dos avisos: els enllaços durs no protegeixen de la corrupció d'un bloc (totes les còpies comparteixen el mateix inode i, per tant, el mateix dany), i esborrar la còpia base no trenca res, perquè l'inode sobreviu mentre quedi un enllaç.
dd: imatges completes i el seu perill
dd copia bloc a bloc, sense entendre de fitxers. Serveix per clonar un disc sencer o el sector d'arrencada, i és l'ordre més perillosa d'aquesta lliçó: invertir if= i of= destrueix la destinació sense preguntar. Se l'anomena «disk destroyer» per alguna cosa.
Requereix el dispositiu desmuntat o congelat perquè la imatge sigui coherent, i copia també l'espai buit. Per a còpies regulars de dades, gairebé mai no és la resposta.
restic: la solució moderna
Deduplicació, xifratge de sèrie, verificació d'integritat i retenció declarativa. Ús real complet:
export RESTIC_REPOSITORY=/srv/copies-remotes/tramontana
export RESTIC_PASSWORD_FILE=/root/.restic-clau # mode 0600, MAI a l'script
restic init # crear el dipòsit (una vegada)
restic backup --tag diaria /home/operador/dades /etc/tramontana /opt/tramontana/shared
restic snapshots # què hi ha guardat
restic ls latest /home/operador/dades # navegar sense restaurar
restic restore latest --target /tmp/restauracio --include /home/operador/dades/reserves.csv
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune
restic check --read-data-subset=10% # verificació real de les dades$ restic backup --tag diaria /home/operador/dades /etc/tramontana
Files: 142 new, 3 changed, 1204 unmodified
Added to the repository: 41.882 MiB (12.204 MiB stored)
snapshot 8a3f2c19 savedFixa't en els 41.882 MiB afegits que n'ocupen 12.204 MiB de reals: això és deduplicació més compressió. borg és equivalent en prestacions; rsnapshot és la versió clàssica del truc del --link-dest, útil si prefereixes còpies navegables amb ls sense eina intermèdia.
- Còpies del sistema enfront de reconstruir per codi
Copiar el sistema sencer (imatge o tar de /) permet tornar exactament a l'estat anterior, però produeix còpies enormes i arrossega la brossa acumulada, inclòs qualsevol problema latent. L'alternativa moderna és reconstruir el servidor per codi: una màquina neta, un playbook que instal·li i configuri tot, i a sobre només les dades restaurades de la còpia.
| Enfocament | Avantatges | Inconvenients |
|---|---|---|
| Imatge del sistema | Volta exacta, ràpida | Enorme; restaura també els problemes |
| Dades + reconstrucció per codi | Còpies petites, entorn net, reproduïble | Exigeix mantenir el codi d'aprovisionament i provar-lo |
Tramontana va camí del segon, i aquesta és la raó que l'inventari inclogui /etc/tramontana, les unitats de systemd i la llista de paquets: són l'entrada del futur playbook d'Ansible que veuràs a 07-06. Mentrestant, la llista de paquets és la teva assegurança:
- Xifratge, custòdia i obligacions legals
Una còpia sense xifrar és una fuita esperant a passar. L'original viu en un servidor amb permisos, sudo, ACL i enfortiment de systemd; la còpia acaba en un disc USB, en un bucket o a casa d'algú, sense cap d'aquestes proteccions. I conté exactament les mateixes dades.
Xifra en origen, abans que la còpia surti del servidor: restic i borg ho fan de sèrie, i amb tar s'hi encadena gpg o age. La gestió de les claus —on viuen, qui les custodia, com es roten, què passa si es perden— és matèria de 06-05, i no és un detall menor: una còpia xifrada la clau de la qual s'ha perdut és exactament igual d'útil que no tenir còpia.
Advertiment de compliment (RGPD).
reserves.csvi la base de dades contenen dades personals d'hostes (nom, contacte, dates d'estada). Les còpies hereten totes les obligacions de l'original: xifratge en repòs i en trànsit, control d'accés documentat, registre de qui hi accedeix, retenció limitada al temps necessari, i —el punt que gairebé sempre s'oblida— el dret de supressió arriba també a les còpies de seguretat, cosa que obliga a tenir una política escrita de com s'atén una sol·licitud d'esborrat quan la dada és en còpies immutables. Si a més la còpia surt cap a un proveïdor al núvol, hi entra en joc l'encarregat del tractament i la ubicació de les dades. Res d'això no ho decideixes tu: ho ha de definir i aprovar el responsable de protecció de dades o de compliment, i la teva feina és implementar-ho i poder demostrar-ho.
- Verificació i la prova de restauració
Una còpia no verificada és un fitxer de mida tranquil·litzadora. Hi ha tres nivells, i cal fer els tres:
| Nivell | Què comprova | Ordre |
|---|---|---|
| Integritat | Els bits no s'han corromput | sha256sum -c copia.sha256 |
| Estructura | L'arxiu es pot llegir sencer | tar -tzf, restic check --read-data |
| Utilitat | Les dades restaurades serveixen | Restauració real i comprovació funcional |
Només el tercer demostra alguna cosa. Els dos primers s'automatitzen; el tercer s'agenda:
$ sha256sum -c /srv/tramontana/backups/tramontana-2026-08-19.tar.gz.sha256
/srv/tramontana/backups/tramontana-2026-08-19.tar.gz: OK
$ tar -tzf /srv/tramontana/backups/tramontana-2026-08-19.tar.gz >/dev/null && echo "estructura OK"
estructura OK
$ restic check --read-data-subset=10%
no errors were foundLa prova de restauració periòdica és part del procediment, no un extra: una vegada al trimestre, restaurar en una VM neta, arrencar l'aplicació, comprovar que les 25 reserves hi són i que la suma d'imports dona 7.842,50 €, cronometrar quant s'ha trigat (compleix l'RTO de 8 h?) i anotar el resultat amb data i nom de qui la va fer. Una prova de restauració que ningú no ha cronometrat no permet prometre cap RTO.
- Automatitzar i vigilar l'edat de l'última còpia
Ja tens l'automatització de 05-05: tramontana-copia.service amb el seu temporitzador, Persistent=true i RequiresMountsFor. Falta la vigilància, i aquí hi ha l'error més comú del sector: vigilar que la feina es va executar en lloc de vigilar que hi ha una còpia recent i vàlida. Un script que falla en silenci i un temporitzador deshabilitat produeixen el mateix símptoma: res. La mètrica que de debò importa és l'edat de l'última còpia correcta.
#!/usr/bin/env bash
# /home/operador/scripts/comprovar_copia.sh — silenci si tot va bé
set -euo pipefail
source "$(dirname "$(readlink -f "$0")")/lib/comuns.sh"
readonly DESTI="/srv/tramontana/backups"
readonly MAX_HORES="${TRAMONTANA_MAX_HORES_COPIA:-30}"
main() {
local ultima edat_h
ultima=$(find "$DESTI" -maxdepth 1 -name 'tramontana-*.tar.gz' -printf '%T@ %p\n' \
| sort -rn | head -1 | cut -d' ' -f2-) || true
[[ -n "$ultima" ]] || morir 2 "no hi ha cap còpia a $DESTI"
edat_h=$(( ( $(date +%s) - $(stat -c %Y "$ultima") ) / 3600 ))
(( edat_h <= MAX_HORES )) || morir 2 "l'última còpia té ${edat_h}h (màxim ${MAX_HORES}h)"
sha256sum -c "${ultima}.sha256" --status || morir 2 "suma incorrecta a $ultima"
log "còpia correcta: $(basename "$ultima") (${edat_h}h)"
}
main "$@"Es dispara amb el seu propi temporitzador a les 08:00, després de la finestra de còpia, i només notifica quan hi ha alguna cosa a fer: és el principi de «silenci si tot va bé» aplicat a l'única mètrica que importa.
- Restaurar: els tres escenaris de Tramontana
(a) Esborrat accidental de reserves.csv
RPO 24 h, RTO 30 min. El Luis ha executat un mv desafortunat a les 11:40.
# 1. ATURAR el dany: que l'aplicació no continuï escrivint sobre un estat incoherent
sudo systemctl stop tramontana.service
# 2. Localitzar la còpia més recent i comprovar QUÈ conté abans de tocar res
restic snapshots --tag diaria | tail -3
restic ls latest /home/operador/dades | grep reserves
# 3. Restaurar en un directori A PART, mai directament a sobre de l'original
restic restore latest --target /tmp/rest --include /home/operador/dades/reserves.csv
# 4. Verificar el contingut restaurat ABANS de posar-lo al seu lloc
wc -l /tmp/rest/home/operador/dades/reserves.csv # 26 (capçalera + 25 reserves)
awk -F';' 'NR>1 {s+=$6} END {printf "%.2f\n", s}' /tmp/rest/home/operador/dades/reserves.csv
# -> 7842.50
# 5. Col·locar-lo amb propietat i permisos correctes, i arrencar
sudo install -o operador -g tramontana -m 0640 \
/tmp/rest/home/operador/dades/reserves.csv /home/operador/dades/reserves.csv
sudo systemctl start tramontana.service && sudo -u operador ~/scripts/revisio_salut.shEl pas 4 és el que separa una restauració d'un acte de fe: 26 línies i 7.842,50 € són les xifres conegudes del fitxer. Si no quadren, la còpia no serveix i cal anar a l'anterior.
(b) Release corromput que cal revertir
RPO 0, RTO 15 min. És el cas de la 3.3.0, que pesa 99,2 MiB i no arrenca. desplegar.sh ja reverteix sol (05-05), però si la fallada es detecta més tard:
ls -l /opt/tramontana/app # a quin release apunta ara
sudo systemctl stop tramontana.service
sudo ln -sfn releases/3.2.1 /opt/tramontana/app.nou
sudo mv -T /opt/tramontana/app.nou /opt/tramontana/app # canvi atòmic
sudo tar -xzf /srv/tramontana/backups/pre-desplegament/conf-3.2.1.tar.gz -C / # la seva config
sudo systemctl start tramontana.service
curl -sf -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/salut # 200Aquí no intervé la còpia diària: la que salva el dia és la còpia prèvia al desplegament de /srv/tramontana/backups/pre-desplegament/, i l'enllaç simbòlic relatiu permet tornar enrere en un segon. Això és 02-06 i 05-05 treballant junts.
(c) Pèrdua total del servidor
RPO 4 h, RTO 8 h. L'escenari que tothom evita pensar. Procediment complet:
- Màquina nova: Ubuntu Server 24.04 LTS, mateix
hostname, mateix esquema de particionat amb/varaïllada (01-04). - Identitats primer, i amb els mateixos números, o els permisos de la restauració no quadraran:
groupadd -g 1002 tramontana,useradd -r -u 997 -g tramontana -s /usr/sbin/nologin svc-tramontana, mésoperadoriluis(05-01). - Paquets:
xargs -a paquets-2026-08-19.txt sudo apt install --no-install-recommends -y, amb elholdde la base de dades (05-03). - Discs: recrear PV, VG i LV, formatar i muntar
/srv/tramontana/backupsper UUID ambnofail, imount -aabans de reiniciar (05-04). - Dades:
restic restore <snapshot> --target /, i l'abocament de la base de dades ambpsql < abocament.sql. - Configuració i serveis: restaurar
/etc/tramontana, les unitats,sudoers.d,logrotate.d;systemctl daemon-reload;systemctl enable --now tramontana.service tramontana-copia.timer(05-05, 05-06). - Verificar:
revisio_salut.sh, comptar les 25 reserves, comprovar la suma de 7.842,50 €,systemctl --failedbuit, i provar una reserva real de cap a cap. - Cronometrar i anotar quant s'ha trigat. Aquell número és l'RTO real, i és el que pots prometre.
Fixa't que aquest procediment fa servir les vuit lliçons del mòdul. Aquest és el sentit del Mòdul 5.
- El manual d'operació de recuperació
Un manual d'operació és el document que permet que la recuperació la faci una altra persona, de matinada, amb pressa i sense tu. Ha de contenir:
- Inventari de què es copia, on va i amb quina freqüència.
- RPO i RTO acordats, amb qui els va aprovar i quan.
- On són les claus de xifratge i qui les custodia (no la clau: on és).
- Els procediments dels tres escenaris, amb ordres literals copiables.
- Contactes: qui decideix, qui executa, qui avisa els clients.
- Data i resultat de l'última prova de restauració, i qui la va fer.
I el més important: no es pot guardar només al servidor que perdràs. Còpia impresa, repositori git extern, gestor documental de l'empresa. Un manual d'operació que només existeix a /opt/tramontana/HISTORIAL és un manual que desapareix en l'escenari (c), justament quan el necessites.
sudo tee -a /opt/tramontana/HISTORIAL >/dev/null <<'FI'
2026-08-19 Còpies de seguretat i restauració (operador, aprovat per Marta Vidal)
- RPO/RTO: 4h/8h per a pèrdua total; abocament de BD cada 4h a més de la còpia diària
- restic a /srv/copies-remotes + rèplica fora del servidor (3-2-1 pendent de destinació)
- Retenció GFS: 14 diàries, 8 setmanals, 12 mensuals
- comprovar_copia.sh + timer 08:00: avisa si l'última còpia supera 30h o falla el sha256
- Prova de restauració completa: 2026-08-19, 3h 42min (RTO 8h complert). Manual fora del servidor.
FIErrors Comuns i Consells
- No haver restaurat mai. És l'error d'aquesta lliçó. Agenda la prova trimestral avui, amb data i responsable.
- La còpia al mateix servidor. Un incendi, un xifratge per ransomware o una fallada del VG s'endú original i còpia. 3-2-1, sense excuses.
- Perdre el fitxer
.snardetar --listed-incremental, o barrejar-lo entre cadenes: la còpia incremental deixa de ser recuperable. - Copiar una base de dades en calent amb
cp. Produeix un fitxer inservible. Abocament propi o instantània. - Còpies sense xifrar que surten del servidor, o xifrades amb una clau que ningú no custodia. Totes dues coses són igual de greus.
- Vigilar la feina en comptes del resultat. El que importa és l'edat de l'última còpia correcta, no que l'script acabés.
- Restaurar directament a sobre de l'original. Restaura en un directori a part, verifica i després col·loca.
- Retenció infinita «per si de cas». Costa diners i xoca amb l'RGPD: la retenció s'acorda i es documenta.
- Consell: cronometra cada restauració de prova. L'RTO que pots prometre és el que has mesurat, no el que t'agradaria.
Exercicis
- Dissenyar l'esquema. A partir de l'RPO de 4 h i l'RTO de 8 h acordats amb la Marta, descriu l'esquema complet de còpies de Tramontana: què es copia, amb quina freqüència, amb quina eina, on va cada còpia i quina retenció té. Justifica on falla avui la regla 3-2-1.
- Verificar sense restaurar del tot. Escriu les ordres que comproven, sense tocar producció, que la còpia d'ahir a la nit conté
reserves.csvamb les 25 reserves i que la seva suma d'imports és correcta. Explica per què això no substitueix una prova de restauració. - La baula perduda. Tens una completa del diumenge i sis incrementals de
tar. La del dimecres està corrompuda. Fins a quin dia pots restaurar i per què? Què hauries fet diferent perquè aquest problema no existís?
Solucions
1.
| Què | Freqüència | Eina | Destinació | Retenció |
|---|---|---|---|---|
| Abocament de la base de dades | Cada 4 h | pg_dump + restic |
Dipòsit restic local i replicat fora | 14 d / 8 set. / 12 mesos |
reserves.csv, uploads, /etc |
Diària, 02:30 | restic backup |
Igual | Igual |
Release actiu i HISTORIAL |
Diària | restic backup |
Igual | 14 diàries |
| Configuració prèvia al desplegament | A cada desplegament | tar (desplegar.sh) |
/srv/tramontana/backups/pre-desplegament |
10 desplegaments |
| Llista de paquets | Setmanal | apt-mark showmanual |
Amb la còpia | 8 setmanals |
On falla avui la 3-2-1: hi ha una sola còpia (falla el «3»), al mateix servidor i el mateix disc lògic (falla el «2») i sense cap fora de l'emplaçament (falla l'«1»). El mínim acceptable és afegir una rèplica del dipòsit restic a una destinació remota amb credencials de només afegir, perquè un compromís del servidor no permeti esborrar l'històric.
2.
$ restic snapshots --latest 1 --json | jq -r '.[0].time'
2026-08-19T02:30:41+02:00
$ restic ls latest /home/operador/dades | grep reserves.csv
/home/operador/dades/reserves.csv
$ restic dump latest /home/operador/dades/reserves.csv | wc -l
26
$ restic dump latest /home/operador/dades/reserves.csv \
| awk -F';' 'NR>1 {n++; s+=$6} END {printf "%d reserves, %.2f EUR\n", n, s}'
25 reserves, 7842.50 EURrestic dump extreu un fitxer a stdout sense escriure res al disc, així que la comprovació no toca producció ni requereix espai.
Per què no substitueix una prova de restauració: això verifica un fitxer, no el conjunt; no comprova permisos, propietaris ni ACL; no valida que la base de dades restaurada arrenqui ni que l'aplicació funcioni amb aquelles dades; i, sobretot, no cronometra res, així que no permet afirmar que es compleix l'RTO. Verificar és necessari; restaurar és el que ho demostra.
3. Pots restaurar fins al dimarts: la completa del diumenge més les incrementals del dilluns i el dimarts. La del dimecres està corrompuda, i com que cada incremental de tar --listed-incremental conté només el que ha canviat des de l'anterior, les de dijous, divendres i dissabte depenen d'un estat que ja no pots reconstruir. Un fitxer modificat el dimecres i no tornat a tocar només existeix a la baula trencada.
Què hauria evitat el problema, per ordre d'eficàcia:
- Verificar cada còpia en crear-la (
tar -tzfisha256sum), no només l'última: el dimecres hauries sabut que calia repetir-la. - Fer servir diferencials en comptes d'incrementals: cadascuna depèn només de la completa, així que una baula trencada costa un dia, no quatre.
- Millor encara, fer servir una eina amb deduplicació i verificació com
restic, on cada instantània es restaura per si sola irestic check --read-datadetecta la corrupció abans que la necessitis.
Conclusió
Has tancat el Mòdul 5, i amb ell la distància entre «tinc scripts» i «governo un servidor». Repassa el que ha canviat a srv-tramontana des que vas començar:
- 05-01 — Les identitats van deixar de ser màgia: el grup
tramontana(gid 1002) i el compte de serveisvc-tramontana(uid 997, sense shell ni contrasenya) existeixen de debò, amboperadoriluisal grup i la propietat d'/opt/tramontanai/srv/tramontana/backupsal seu lloc. - 05-02 —
sudova deixar de ser una paraula màgica: hi ha una regla escrita, validada i documentada a/etc/sudoers.d/tramontana, més SGID als directoris compartits, ACL perquè el Luis llegeixi els registres sense entrar aadm, capacitats en lloc de SUID ichattr +isobreapp.conf. - 05-03 — El programari té procedència: dipòsits deb822 amb claus a
/etc/apt/keyrings/, la base de dades fixada ambholdi pinning, i actualitzacions de seguretat desateses que avisen sense reiniciar soles. - 05-04 — Les còpies viuen al seu propi volum LVM ampliable en calent, muntat per UUID amb
nofail, amb marge al VG per a instantànies i unfstabprovat ambmount -a. - 05-05 — L'aplicació és un servei de debò:
tramontana.serviceenfortit, amb reinici automàtic i límits de cgroup, i la còpia nocturna convertida entramontana-copia.service+.timerambPersistent=true;desplegar.shper fi reinicia. - 05-06 — El servidor té memòria: journal persistent i acotat,
/etc/logrotate.d/tramontanaprovat en simulació, els scripts escrivint al journal, i la resposta exacta a «què va passar ahir a la nit a les tres?». - 05-07 — I té termòmetre: línia base amb llindars,
sysstatguardant història, el mètode USE i un procediment d'onze passos que ja va resoldre la lentitud dels matins mesurant abans i després. - 05-08 — I ara té xarxa de seguretat: RPO i RTO acordats amb la Marta, regla 3-2-1, retenció GFS, coherència amb abocament i instantània LVM,
resticamb deduplicació i xifratge, verificació en tres nivells, vigilància de l'edat de l'última còpia correcta i tres procediments de restauració escrits, provats i cronometrats.
Res d'això no era «saber ordres». Era construir un sistema que se sosté quan tu no ets al davant, i aquesta és exactament la diferència entre fer servir Linux i administrar-lo.
I tanmateix, tot el que has aixecat en aquest mòdul té una porta oberta de bat a bat. srv-tramontana escolta al 8080 sense tallafoc, la configuració de xarxa continua sent la que va deixar l'instal·lador, SSH accepta contrasenyes i accessos de root sense que ningú hagi revisat sshd_config, la db_password és en clar dins d'app.conf, el trànsit de reserves —amb les dades personals dels hostes que tanta cura t'ha costat protegir a les còpies— viatja sense xifrar, i a /var/log/btmp ja hi ha quaranta-set intents d'accés des d'una IP que ningú no ha bloquejat. Al Mòdul 6: Xarxes i Seguretat tanques aquella porta: configuraràs la xarxa de manera persistent amb netplan, enfortiràs SSH amb claus i sense root, aixecaràs un tallafoc que només deixi passar l'imprescindible, detectaràs i frenaràs les intrusions, trauràs els secrets dels fitxers de configuració i posaràs TLS davant de l'aplicació, i acabaràs aplicant un enfortiment complet amb AppArmor i una política de contrasenyes que avui continua sent la de fàbrica. Has fet un servidor que funciona; toca fer-lo defensable. Actualitza la instantània de la teva VM, guarda el manual d'operació fora de la màquina i ens veiem al Mòdul 6.
Curs de Linux: De Principiant a Administrador de Sistemes
Mòdul 1: Introducció a Linux
- Què és Linux?
- Història de Linux
- Distribucions de Linux
- Instal·lant Linux
- Primer Contacte amb el Sistema
- Estructura del Sistema de Fitxers de Linux
Mòdul 2: Comandes Bàsiques de Linux
- Introducció a la Línia de Comandes
- Obtenir Ajuda i Documentació del Sistema
- Navegant pel Sistema de Fitxers
- Operacions amb Fitxers i Directoris
- Visualització i Edició de Fitxers
- Enllaços Durs i Simbòlics
- Permisos i Propietat dels Fitxers
Mòdul 3: Habilitats Avançades en la Línia de Comandes
- L'Entorn del Shell: Variables, Àlies i Historial
- Ús de Comodins i Expressions Regulars
- Cerca de Fitxers i Contingut: find, locate i grep
- Canonades i Redirecció
- Processament de Text: cut, sort, uniq, sed i awk
- Gestió de Processos
- Programació de Tasques amb Cron
- Comandes de Xarxa
Mòdul 4: Scripting en Shell
- Introducció al Scripting en Shell
- Variables i Tipus de Dades
- Entrada, Sortida i Arguments d'un Script
- Estructures de Control
- Funcions i Biblioteques
- Depuració i Gestió d'Errors
- Scripts de Producció: Bones Pràctiques
Mòdul 5: Administració del Sistema
- Gestió d'Usuaris i Grups
- sudo i Permisos Especials
- Gestió de Paquets
- Gestió de Discs
- systemd i la Gestió de Serveis
- Registres del Sistema: journald i syslog
- Monitoratge del Sistema i Optimització del Rendiment
- Còpies de Seguretat i Restauració
Mòdul 6: Xarxes i Seguretat
- Configuració de Xarxes
- SSH i Accés Remot
- Tallafocs i Seguretat Perimetral
- Sistemes de Detecció d'Intrusions
- Gestió de Secrets i Certificats TLS
- Assegurant Sistemes Linux
Mòdul 7: Temes Avançats
- El Procés d'Arrencada i la Recuperació del Sistema
- Diagnòstic Avançat: strace, perf i eBPF
- Optimització del Nucli de Linux
- Virtualització amb Linux
- Contenidors de Linux i Docker
- Automatització amb Ansible
- Alta Disponibilitat i Balanceig de Càrrega
