/srv/tramontana/backups porta setmanes creixent. Cada matinada, a les 4:20, copia_tramontana.sh hi deixa una còpia nova sense que ningú hagi calculat quant hi cap, i el disc arrel de 23 GB va pel 30 %. La pregunta no és si s'omplirà, sinó quan — i què passarà amb l'aplicació quan passi, perquè una / plena no és «va lent»: és una màquina que no pot ni escriure un registre ni completar una transacció. En aquesta lliçó baixes per fi al maquinari: veuràs la pila completa des del disc físic fins al punt de muntatge, particionaràs, formataràs, entendràs /etc/fstab camp a camp (i per què una línia mal escrita impedeix arrencar), i muntaràs LVM, que és el que fa servir un servidor de debò. Al final, /srv/tramontana/backups viurà al seu propi volum lògic ampliable en calent.
Contingut
- La pila d'emmagatzematge, de dalt a baix
- Identificar el maquinari:
lsblk,blkid,fdisk -l - Taules de particions: MBR enfront de GPT
- Particionar amb
fdiskiparted - Sistemes de fitxers comparats, i els inodes revisitats
- Muntar:
mount, opcions, bind ifindmnt /etc/fstabcamp a camp i la xarxa de seguretat- Espai:
df,du, i el fitxer esborrat que no l'allibera - Intercanvi: partició, fitxer i quant en cal
- LVM: PV, VG, LV, ampliar en calent i instantànies
- RAID per programari amb
mdadm - Quotes de disc
- Cas Tramontana: un disc nou per a les còpies
- La pila d'emmagatzematge, de dalt a baix
Entre el plat (o la cel·la NAND) i el cat fitxer.txt que escrius hi ha cinc o sis capes. Confondre-les és la causa del 90 % dels errors d'emmagatzematge.
flowchart TD
D["Disc físic<br/>/dev/sdb — 20 GiB"] --> T["Taula de particions GPT"]
T --> P1["Partició /dev/sdb1"]
P1 --> PV["PV — pvcreate"]
PV --> VG["VG vg-dades<br/>agrupa PV, 5G lliures"]
VG --> LV1["LV lv-backups 15G"]
LV1 --> FS["Sistema de fitxers<br/>mkfs.ext4 — UUID"]
FS --> M["Punt de muntatge<br/>/srv/tramontana/backups"]
Les capes d'LVM són opcionals —sense elles la partició es formata directament—, però resolen el pitjor problema de tots: una partició no es pot ampliar si l'espai lliure no és just al darrere; un volum lògic sí, encara que l'espai sigui en un altre disc.
- Identificar el maquinari:
lsblk, blkid, fdisk -l
lsblk, blkid, fdisk -l$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 25G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 23G 0 part /
sdb 8:16 0 20G 0 disk # el disc nou, encara sense taula de particions
$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda3 ext4 arrel 3f0a91c4-8d2e-4b17-9c55-0a7ce31f77b2 14.8G 30% /
sdblsblk -f és l'ordre que faràs servir més vegades: diu el tipus de sistema de fitxers, l'etiqueta, l'UUID i l'ús real.
$ sudo blkid /dev/sda3
/dev/sda3: LABEL="arrel" UUID="3f0a91c4-8d2e-..." TYPE="ext4" PARTUUID="a1b2c3d4-03"
$ sudo fdisk -l /dev/sda | sed -n '1,2p;5p'
Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors
Disklabel type: gpt| Prefix | Què és | On apareix |
|---|---|---|
/dev/sda, sdb… |
SATA, SAS, USB i la majoria dels virtuals | VirtualBox, físics |
/dev/nvme0n1 (particions p1) |
SSD NVMe | Servidors i portàtils moderns |
/dev/vda |
Disc paravirtualitzat virtio | KVM, núvol (AWS, OpenStack) |
I el detall crític: aquests noms poden canviar entre arrencades. N'hi ha prou d'afegir un disc, canviar l'ordre dels controladors o que el nucli detecti els dispositius en un altre ordre perquè el sdb d'avui sigui el sdc de demà. Per això mai no es munta per nom de dispositiu a fstab: es munta per UUID o per LABEL, que viatgen dins del sistema de fitxers mateix.
- Taules de particions: MBR enfront de GPT
| Aspecte | MBR (msdos) | GPT |
|---|---|---|
| Antiguitat | 1983 | 2000, part d'UEFI |
| Mida màxima de disc | 2 TiB | 8 ZiB (sense límit pràctic) |
| Nombre de particions | 4 primàries (o 3 + estesa) | 128 per defecte |
| Redundància i integritat | Cap: un sector malmès i adeu | Còpia al final del disc i CRC32 |
| Arrencada | BIOS heretada | UEFI (i BIOS amb partició bios_grub) |
Per a qualsevol disc nou avui: GPT, sense excepcions que mereixin discussió. La partició d'1 MiB que veus a sda1 és precisament la bios_grub que GRUB necessita en un GPT arrencat per BIOS heretada; el seu paper s'explica a 07-01.
- Particionar amb
fdisk i parted
fdisk i partedfdisk és interactiu i còmode; parted admet ordres en una línia, cosa que el fa apte per a scripts. Preparem /dev/sdb amb una única partició que ocupi el disc sencer:
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart dades 1MiB 100%
$ sudo parted -s /dev/sdb set 1 lvm on
$ sudo parted -s /dev/sdb print | tail -3
Partition Table: gpt
Number Start End Size Name Flags
1 1049kB 21.5GB 21.5GB dades lvmL'1MiB d'inici no és un caprici: alinea la partició amb els blocs físics i evita una penalització de rendiment notable en SSD i en cabines.
A fdisk la sessió equivalent seria g (crear GPT), n (nova partició), Retorn tres vegades, t i 31 (tipus Linux LVM) i w per escriure. Res no s'escriu fins a la w: q et treu sense tocar res, i aquesta és la xarxa de seguretat de fdisk.
Si el nucli no s'assabenta de la taula nova —típic quan el disc té alguna partició muntada—, sudo partprobe /dev/sdb la torna a llegir, i lsblk /dev/sdb confirma que hi apareix sdb1.
- Sistemes de fitxers comparats, i els inodes revisitats
| FS | Maduresa | Ampliar / Reduir | Instantànies | Quan triar-lo |
|---|---|---|---|---|
| ext4 | Màxima; per defecte a Ubuntu | Sí / sí, desmuntat | No (les dona LVM) | L'opció segura per a gairebé tot |
| XFS | Molt alta; per defecte a RHEL | En calent / no | No | Fitxers grans, escriptura paral·lela |
| Btrfs | Estable en usos comuns | Sí / sí | Sí, natives | Instantànies freqüents, sumes de verificació |
| ZFS | Molt alta, integrat a Ubuntu | Sí / segons disseny | Sí, i enviament/recepció | RAID + FS unificats; exigeix RAM |
Regla pràctica per a un servidor Ubuntu convencional: ext4 sobre LVM. Tens redimensionament, instantànies (les de l'LVM) i el sistema de fitxers més provat que existeix.
$ sudo mkfs.ext4 -L backups /dev/vg-dades/lv-backups
Creating filesystem with 3932160 4k blocks and 983040 inodes
Filesystem UUID: 9d4f2b70-6c1a-4e8b-b3f7-52a0c9e14d68
$ sudo tune2fs -l /dev/vg-dades/lv-backups | grep -E 'Volume name|Inode count'
Volume name: backups
Inode count: 983040tune2fs permet canviar l'etiqueta (-L), l'interval de comprovació (-i) i, molt útil en un volum de dades, el 5 % reservat per a root: sudo tune2fs -m 1 /dev/vg-dades/lv-backups recupera uns 600 MiB en 15 GiB. Aquell 5 % té sentit a / —evita que un disc ple impedeixi a root arreglar la situació—, però en un volum dedicat a còpies és espai llençat.
Inodes: l'altre límit
A 02-06 vas veure que l'inode guarda les metadades i que el nom és només una entrada de directori. Aquí arriba la conseqüència operativa: el nombre d'inodes es fixa en formatar i no creix. Un directori amb milions de fitxers diminuts els pot esgotar amb el disc mig buit, i l'error és desconcertant:
$ df -h /srv/tramontana/backups | tail -1
/dev/mapper/vg--dades-lv--backups 15G 6.1G 8.2G 43% /srv/tramontana/backups
$ df -i /srv/tramontana/backups | tail -1
/dev/mapper/vg--dades-lv--backups 983040 983021 19 100% /srv/tramontana/backups43 % d'espai lliure i No space left on device en crear un fitxer. Davant d'aquest error, df -i és la segona comprovació obligatòria. La solució passa per esborrar fitxers petits o reformatar amb més inodes (mkfs.ext4 -i 8192).
- Muntar:
mount, opcions, bind i findmnt
mount, opcions, bind i findmntsudo mkdir -p /mnt/proves && sudo mount /dev/vg-dades/lv-backups /mnt/proves
sudo mount -o remount,ro /mnt/proves # canviar opcions sense desmuntar; umount per alliberarSi umount respon «target is busy», reprèn lsof i fuser de 03-06:
Algú —tu, probablement— hi té el seu directori de treball. umount -l (lazy) desmunta quan s'alliberi, però és un pedaç.
| Opció | Què fa | Quan fer-la servir |
|---|---|---|
defaults |
rw,suid,dev,exec,auto,nouser,async |
Punt de partida |
noatime |
No actualitza la marca d'últim accés | Sempre en servidors: estalvia escriptures |
nodev / nosuid |
Ignora fitxers de dispositiu / bits SUID | Qualsevol volum de dades: tanca la via de 05-02 |
noexec / ro |
Prohibeix executar binaris / només lectura | Còpies, /tmp, pujades; forense |
nofail |
L'arrencada continua si falta el dispositiu | Tot disc que no sigui / |
$ findmnt -no SOURCE,FSTYPE,OPTIONS /srv/tramontana/backups
/dev/mapper/vg--dades-lv--backups ext4 rw,noatime,nodev,nosuidfindmnt és infinitament més llegible que mount sense arguments, i findmnt --verify valida el fstab sense muntar res. Un muntatge bind (sudo mount --bind /srv/tramontana/backups/enviaments /opt/tramontana/sortida) fa aparèixer un directori existent en un altre punt de l'arbre sense copiar res: és la manera neta d'exposar una carpeta a un servei confinat, i a 05-05 veuràs que systemd fa el mateix amb BindPaths.
/etc/fstab camp a camp i la xarxa de seguretat
/etc/fstab camp a camp i la xarxa de seguretat# /etc/fstab
# <dispositiu> <punt> <tipus> <opcions> <dump> <fsck>
UUID=3f0a91c4-8d2e-4b17-9c55-0a7ce31f77b2 / ext4 defaults,noatime 0 1
UUID=b7e12a55-0c4d-4e39-8a61-3f9d2b70c1a8 /boot ext4 defaults,noatime 0 2
/dev/mapper/vg--dades-lv--backups /srv/tramontana/backups ext4 defaults,noatime,nodev,nosuid,nofail 0 2| Camp | Contingut | Notes |
|---|---|---|
| 1 | Dispositiu | UUID= o LABEL=, mai /dev/sdb1 |
| 2 i 3 | Punt de muntatge i tipus | El directori ha d'existir; ext4, xfs, swap, auto |
| 4 | Opcions | Separades per comes, sense espais |
| 5 i 6 | dump i fsck |
El 5 és una relíquia (sempre 0); el 6 val 1 per a /, 2 per a la resta i 0 per no comprovar |
Per què un fstab mal escrit impedeix arrencar
En l'arrencada, systemd converteix cada línia de fstab en una unitat .mount i les fa dependència de local-fs.target. Si un dispositiu no apareix, l'arrencada espera 90 segons i després cau a mode d'emergència demanant la contrasenya de root — que a Ubuntu està bloquejada. Un servidor remot en aquest estat és un servidor perdut fins que algú obri la consola.
Per això hi ha dues regles innegociables:
sudo cp -a /etc/fstab /etc/fstab.bak-$(date +%F) # còpia prèvia, com sempre
sudo vim /etc/fstab && sudo diff -u /etc/fstab.bak-$(date +%F) /etc/fstab
sudo findmnt --verify --verbose # validació sintàctica
sudo mount -a # muntar TOT el del fstab ARAmount -a abans de reiniciar no és opcional. Si falla, ho arregles amb el servidor dret; si no l'executes, ho descobriràs amb el servidor caigut. I afegeix nofail a tot el que no sigui /: converteix una fallada d'arrencada en un avís al registre.
- Espai:
df, du, i el fitxer esborrat que no l'allibera
df, du, i el fitxer esborrat que no l'allibera$ df -h --total | tail -1
total 25G 6.9G 17G 30%
$ sudo du -sh --max-depth=1 /srv/tramontana 2>/dev/null | sort -h
4.8G /srv/tramontana/backups
6.1G /srv/tramontanancdu fa el mateix de manera interactiva i és el que faràs servir quan busquis el culpable amb pressa. Recorda de 02-03 que du mesura espai ocupat en blocs i ls -l la mida lògica: no tenen per què coincidir.
El clàssic: df diu ple, du diu buit
Falten gigues que ningú no veu. L'explicació connecta directament amb els inodes de 02-06: quan esborres un fitxer que un procés té obert, desapareix el nom del directori, però l'inode i els seus blocs continuen vius fins que l'últim descriptor es tanqui. Algú va fer rm sobre un registre gegant i el procés continua escrivint en un fitxer sense nom.
$ sudo lsof +L1
COMMAND PID USER FD TYPE SIZE/OFF NLINK NODE NAME
tramonta 1284 svc-tramontana 3w REG 16106127360 0 262147 /var/log/tramontana/acces.log (deleted)NLINK 0 i (deleted) són la signatura del problema. Les dues sortides: reiniciar el procés (systemctl restart, que veurem a 05-05) o, si no pots, truncar el fitxer pel seu descriptor amb sudo truncate -s 0 /proc/1284/fd/3, que allibera l'espai sense matar-lo.
I la lliçó de fons: un registre no s'esborra, es rota — que és exactament el que muntarem a 05-06.
- Intercanvi: partició, fitxer i quant en cal
L'intercanvi (swap) és espai de disc que el nucli fa servir per descarregar pàgines de memòria poc utilitzades. Avui es prefereix un fitxer d'intercanvi a una partició: es redimensiona sense tocar la taula de particions.
$ sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
$ sudo mkswap /swapfile && sudo swapon /swapfile && swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2Amb la seva línia a fstab (/swapfile none swap sw 0 0). El chmod 600 és obligatori: el contingut de l'intercanvi inclou trossos de memòria de processos, i això inclou secrets.
vm.swappiness (0–200, per defecte 60) decideix quanta pressa es dona el nucli a fer-lo servir; baixar-lo a 10 és l'habitual en un servidor d'aplicació. L'ajust fi d'aquest i altres paràmetres del nucli és matèria de 07-03. Quant d'intercanvi? Amb 3,8 GB de RAM, entre 2 i 4 GB és raonable: no com a substitut de memòria —si el servidor fa intercanvi constantment, anirà molt lent igualment—, sinó com a coixí que evita que l'OOM killer mati l'aplicació davant d'un pic puntual.
- LVM: PV, VG, LV, ampliar en calent i instantànies
LVM introdueix tres nivells: els PV (particions o discs sencers lliurats a LVM), el VG (una bossa d'espai formada per un o diversos PV) i els LV (els «discs virtuals» que es formaten i es munten). El VG es divideix en extents de 4 MiB, i un LV és simplement un conjunt d'extents, que no han de ser contigus ni ser al mateix disc. D'aquí ve tot el poder d'LVM.
$ sudo pvcreate /dev/sdb1 && sudo vgcreate vg-dades /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
Volume group "vg-dades" successfully created
$ sudo lvcreate -L 15G -n lv-backups vg-dades
Logical volume "lv-backups" created.
$ sudo vgs && sudo lvs
VG #PV #LV #SN Attr VSize VFree
vg-dades 1 1 0 wz--n- <20.00g <5.00g
LV VG Attr LSize
lv-backups vg-dades -wi-a----- 15.00gFixa't que hem deixat 5 GiB lliures al VG expressament: són el marge per ampliar el volum i, sobretot, per poder crear una instantània. Un VG al 100 % és un VG sense maniobra.
Ampliar en calent, amb el volum muntat i en ús:
$ sudo lvextend -L +3G -r /dev/vg-dades/lv-backups
Size of logical volume vg-dades/lv-backups changed from 15.00 GiB to 18.00 GiB.
The filesystem on /dev/mapper/vg--dades-lv--backups is now 4718592 (4k) blocks long.L'opció -r (--resizefs) és la clau: amplia l'LV i el sistema de fitxers de sobre en un sol pas. Sense ella tindries un volum més gran i un df idèntic, que és l'error més freqüent de qui comença amb LVM. lvextend -l +100%FREE -r es menja tot l'espai lliure del VG.
Reduir és una altra història. Cal fer-ho al revés (primer el sistema de fitxers, després l'LV), amb el volum desmuntat, i XFS directament no es pot reduir. Un error d'ordre aquí destrueix dades. Regla: crea els LV petits i amplia'ls quan calgui; mai al revés.
Instantànies LVM
Una instantània és un LV que guarda les diferències respecte a l'original des de l'instant de la seva creació. Es crea en segons i permet copiar un volum en un estat congelat i coherent mentre l'aplicació continua escrivint:
$ sudo lvcreate -L 2G -s -n snap-pre-desplegament /dev/vg-dades/lv-backups
Logical volume "snap-pre-desplegament" created.
$ sudo mount -o ro /dev/vg-dades/snap-pre-desplegament /mnt/snapshot # copiar d'aquí
$ sudo umount /mnt/snapshot && sudo lvremove -y /dev/vg-dades/snap-pre-desplegamentDos advertiments imprescindibles: la instantània s'omple si l'original canvia més del que la seva mida permet, i quan s'omple s'invalida i es perd. I no és una còpia de seguretat: viu al mateix VG, al mateix disc. És una eina de coherència, i així la farem servir a 05-08.
- RAID per programari amb
mdadm
mdadm| Nivell | Discs mín. | Capacitat útil | Tolera | Escriptura |
|---|---|---|---|---|
| 0 (striping) | 2 | 100 % | Res: un disc cau i es perd tot | Molt ràpida |
| 1 (mirall) | 2 | 50 % | 1 disc | Normal |
| 5 / 6 | 3 / 4 | n−1 / n−2 | 1 / 2 discs | Penalitzada per la paritat |
| 10 (1+0) | 4 | 50 % | 1 per mirall | Ràpida; l'elecció per a bases de dades |
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: array /dev/md0 started.
$ cat /proc/mdstat | tail -1
20955136 blocks super 1.2 [2/2] [UU]
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf && sudo update-initramfs -u[UU] significa els dos discs sans; un [U_] és un disc caigut i cal actuar avui, no la setmana que ve. Sobre /dev/md0 s'hi posa després un PV d'LVM, i així es combinen redundància i flexibilitat.
RAID no és una còpia de seguretat. RAID protegeix que un disc es trenqui. No protegeix d'un
rm -rf(es replica a l'instant al mirall), ni d'un xifratge per ransomware, ni d'una fallada del controlador que corrompi tots dos discs, ni d'un incendi a la sala. La còpia de seguretat és 05-08, i són coses diferents i complementàries.
- Quotes de disc
Quan diversos usuaris comparteixen un volum, les quotes limiten quant ocupa cadascun. S'activen amb usrquota,grpquota a fstab, s'inicialitzen amb quotacheck -cug i es fixen amb edquota -u usuari o sense interacció: sudo setquota -u luis 5G 6G 0 0 /srv/tramontana/backups (tou 5G, dur 6G), i sudo repquota -s /srv/tramontana/backups dona l'informe d'ús. El límit tou es pot superar durant un període de gràcia; el dur no se supera mai. En un servidor d'aplicació amb un únic usuari de servei són poc útils; en un de compartit són la diferència entre un incident i una trucada a les tres de la matinada.
- Cas Tramontana: un disc nou per a les còpies
La Marta aprova afegir un disc de 20 GiB a la VM. L'objectiu: que /srv/tramontana/backups deixi de competir per l'espai de /, sense perdre ni un byte de les còpies existents i sense que copia_tramontana.sh se n'assabenti.
Pas 1 — Afegir el disc. Amb la VM apagada, VirtualBox → Emmagatzematge → disc de 20 GiB. En arrencar, lsblk ha de mostrar sdb sense particions.
Pas 2 — Partició, PV, VG i LV: les ordres dels apartats 4 i 10, ja executades. Resultat: vg-dades de 20 GiB amb lv-backups de 15 GiB i 5 GiB de marge.
Pas 3 — Formatar i muntar en un punt temporal.
sudo mkfs.ext4 -L backups /dev/vg-dades/lv-backups && sudo tune2fs -m 1 /dev/vg-dades/lv-backups
sudo mkdir -p /mnt/nou && sudo mount /dev/vg-dades/lv-backups /mnt/nouPas 4 — Copiar preservant-ho tot. rsync -aHAX no és luxe: -a conserva permisos i propietaris (l'operador:tramontana de 05-01), -H els enllaços durs, -A les ACL de 05-02 i -X els atributs estesos.
$ sudo rsync -aHAX --info=progress2 /srv/tramontana/backups/ /mnt/nou/
$ sudo diff -qr /srv/tramontana/backups /mnt/nou && echo "Contingut idèntic"
Contingut idèntic
$ sudo du -sh /srv/tramontana/backups /mnt/nou
4.8G /srv/tramontana/backups
4.8G /mnt/nou(Abans de copiar, comenta la línia de cron de la còpia perquè no n'entri una a mitja feina.)
Pas 5 — Intercanviar, amb xarxa de seguretat. No esborrem l'original: el reanomenem, i així la reversió és instantània. sudo umount /mnt/nou && sudo mv /srv/tramontana/backups /srv/tramontana/backups.vell && sudo mkdir /srv/tramontana/backups.
Pas 6 — fstab, amb les tres proteccions.
$ sudo cp -a /etc/fstab /etc/fstab.bak-$(date +%F)
$ echo "UUID=$(sudo blkid -s UUID -o value /dev/vg-dades/lv-backups) /srv/tramontana/backups ext4 defaults,noatime,nodev,nosuid,nofail 0 2" | sudo tee -a /etc/fstab
$ sudo diff -u /etc/fstab.bak-$(date +%F) /etc/fstab | tail -1
+UUID=9d4f2b70-... /srv/tramontana/backups ext4 defaults,noatime,nodev,nosuid,nofail 0 2
$ sudo mount -a && findmnt -no SOURCE,OPTIONS /srv/tramontana/backups
/dev/mapper/vg--dades-lv--backups rw,nosuid,nodev,noatimenosuid i nodev perquè en un volum de còpies no hi ha d'haver mai un binari SUID ni un fitxer de dispositiu; nofail perquè una fallada d'aquest disc no pot impedir que arrenqui el servidor.
Pas 7 — Restaurar la propietat, verificar i netejar.
$ sudo chown -R operador:tramontana /srv/tramontana/backups
$ sudo chmod 2770 /srv/tramontana/backups # SGID de 05-02: grup heretat
$ sudo -u operador /home/operador/scripts/copia_tramontana.sh --dry-run
[2026-08-18T11:04:12+02:00] simulació: destí /srv/tramontana/backups (9.4G lliures)
$ df -h /srv/tramontana/backups | tail -1
/dev/mapper/vg--dades-lv--backups 15G 4.9G 9.4G 35% /srv/tramontana/backupsNomés quan una còpia real hagi funcionat i se n'hagi verificat el sha256sum s'esborra /srv/tramontana/backups.vell, i s'anota tot:
sudo tee -a /opt/tramontana/HISTORIAL >/dev/null <<'FI'
2026-08-18 Disc de còpies (operador)
- sdb 20G -> GPT + PV + vg-dades (5G lliures per a instantànies) + lv-backups 15G ext4
- rsync -aHAX, fstab per UUID amb nofail/nodev/nosuid, mount -a OK
- backups.vell conservat fins a la primera còpia verificada
FIErrors Comuns i Consells
- Muntar per
/dev/sdb1afstab. El dia que l'ordre de detecció canviï, arrencarà el disc equivocat o cap. UUID o LABEL, sempre. - Reiniciar sense
mount -a. És la causa número u de servidors que no tornen. Inofaila tot el que no sigui/. lvextendsense-r. El volum creix,dfno canvia i perds mitja hora. Amb-r, el sistema de fitxers creix amb ell. I no omplis el VG al 100 %: sense espai lliure no hi ha instantània ni marge per ampliar.- Confiar en RAID com a còpia de seguretat. No ho és, i descobrir-ho el dia de l'esborrat accidental és car.
rmsobre un registre en ús. L'espai no s'allibera fins que el procés tanqui el descriptor:lsof +L1el delata. Els registres es roten (05-06).- Copiar dades amb
cp -ren comptes dersync -aHAX: perds propietaris, enllaços durs, ACL i atributs, i després els permisos de 05-01 no quadren. - Consell: guarda
lsblk -f,vgs,lvsi una còpia delfstabal costat de l'HISTORIAL. Reconstruir de memòria la disposició de discs, amb el servidor caigut, no és un pla.
Exercicis
- Diagnòstic de disc ple.
df -h /marca 100 %, peròdu -sh /suma bastant menys. Enumera les tres causes possibles en ordre de probabilitat i l'ordre que confirma cadascuna. - Ampliar en calent.
lv-backups(15 GiB) s'ha quedat curt i el VG té 5 GiB lliures. Amplia'l 3 GiB sense desmuntar, verifica que l'espai és visible per adfi explica què hauria passat sense-r. - Entrada de
fstabsegura. Escriu la línia defstabper a un volum de pujades d'usuaris muntat a/opt/tramontana/shared/uploads, amb les opcions que un directori on escriuen tercers ha de tenir, i descriu com la validaries abans de reiniciar.
Solucions
1. Per ordre de probabilitat:
sudo lsof +L1 # (a) fitxer esborrat amb un procés que el manté obert
df -i / # (b) inodes esgotats: hi ha espai però no es pot crear res
sudo mount --bind / /mnt/arrel && sudo du -sh /mnt/arrel/* # (c) dades sota un muntatgeLa tercera és la més traïdora: si algú va escriure a /srv/tramontana/backups abans de muntar-hi el volum a sobre, aquells fitxers continuen ocupant espai a / però són invisibles perquè el muntatge els tapa. El bind mount de / en un altre punt els deixa a la vista. És el risc del pas 5 del cas Tramontana, i per això creem el directori buit en lloc de reutilitzar el que tenia dades.
2.
$ df -h /srv/tramontana/backups | tail -1
/dev/mapper/vg--dades-lv--backups 15G 4.9G 9.4G 35% /srv/tramontana/backups
$ sudo lvextend -L +3G -r /dev/vg-dades/lv-backups
Size of logical volume vg-dades/lv-backups changed from 15.00 GiB to 18.00 GiB.
$ df -h /srv/tramontana/backups | tail -1
/dev/mapper/vg--dades-lv--backups 18G 4.9G 12G 29% /srv/tramontana/backupsSense -r, lvs mostraria 18 GiB i df continuaria dient 15 GiB: el sistema de fitxers ext4 no sap que el dispositiu de sota ha crescut fins que se li diu amb resize2fs. L'operació és segura en calent perquè ext4 admet créixer muntat; reduir exigiria desmuntar i fer-ho en l'ordre invers.
3.
noexec és l'afegit clau respecte al volum de còpies: en un directori on escriuen tercers, impedir l'execució de binaris talla en sec que una pujada maliciosa es converteixi en codi en marxa. nodev i nosuid tanquen les altres dues vies, i nofail evita que un problema amb aquest volum impedeixi arrencar. Validació abans de reiniciar:
sudo cp -a /etc/fstab /etc/fstab.bak-$(date +%F) # còpia prèvia
sudo findmnt --verify --verbose # sintaxi i coherència
sudo mount -a && findmnt /opt/tramontana/shared/uploads # muntar i veure opcions efectivesFixa't que findmnt al final mostra les opcions efectives: és l'única prova que el que vas escriure és el que el nucli va aplicar.
Conclusió
Ja no hi ha una capa opaca entre els teus fitxers i el maquinari. Recorres la pila sencera —disc, taula de particions, partició, PV, VG, LV, sistema de fitxers, punt de muntatge— i saps quin problema resol cada esglaó; identifiques el maquinari amb lsblk -f, blkid i fdisk -l, i saps per què els noms /dev/sdX no són de fiar i l'UUID sí; tries GPT sense dubtar-ho, particiones amb parted en una línia i amb fdisk sabent que res no s'escriu fins a la w; compares ext4, XFS, Btrfs i ZFS amb criteri, ajustes amb tune2fs i reconeixes el desconcert d'un df -h amb lloc i un df -i al 100 %.
Muntes amb les opcions que un servidor necessita —noatime, nodev, nosuid, noexec, nofail—, llegeixes /etc/fstab camp a camp i saps que mount -a abans de reiniciar és la diferència entre un ajust i una nit perduda. Diagnostiques el disc ple en les seves tres variants, inclòs el fitxer esborrat que lsof +L1 delata. I domines LVM: crees PV, VG i LV, amplies en calent amb lvextend -r, saps per què reduir és perillós i fas servir instantànies per congelar un estat coherent. Coneixes mdadm i els seus nivells, i tens gravat que RAID no és una còpia de seguretat.
Sobretot, /srv/tramontana/backups viu ja al seu propi volum lògic de 15 GiB, ampliable en calent, muntat per UUID amb nofail, amb les còpies migrades byte a byte amb rsync -aHAX i verificades, i amb 5 GiB de marge al VG reservats per a instantànies.
I arribem al nucli del mòdul. Tens identitats, permisos, paquets i disc, però l'aplicació de Tramontana continua arrencant-se a mà: si el servidor es reinicia, no torna; si el procés mor, ningú no l'aixeca; desplegar.sh canvia l'enllaç simbòlic i continua sense reiniciar res; i la còpia de les 4:20 depèn d'una línia de cron sense control real de solapament ni registre decent. A systemd i la Gestió de Serveis s'acaba tot això: escriuràs tramontana.service des de zero i enfortit, entendràs la diferència real entre ordre i dependència, convertiràs copia_tramontana.sh en un .service amb el seu .timer i Persistent=true, i desplegar.sh farà per fi el systemctl restart que li faltava.
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
