Fins ara srv-tramontana sempre ha arrencat. Has instal·lat, configurat, enfortit i defensat un sistema partint de la premissa que, en encendre'l, apareix un indicador d'ordres. Aquesta lliçó trenca aquella premissa, i ho fa en els dos sentits: primer entendràs què passa exactament entre prémer el botó i veure l'indicador, i després aprendràs a intervenir quan aquella cadena es trenca.
És l'habilitat que separa qui reinstal·la de qui arregla. Un fstab amb un UUID equivocat, un initramfs que no inclou el mòdul de LUKS, un GRUB sobreescrit per un altre sistema operatiu, una contrasenya de root perduda: tots són problemes de cinc minuts si saps on intervenir, i una reinstal·lació de vuit hores si no ho saps. I com que el Mòdul 5 et va ensenyar a modificar fstab i el 6 a xifrar un volum amb LUKS, ja tens a la màquina exactament els ingredients que provoquen aquestes fallades.
Nota sobre el laboratori. Diversos dels procediments d'aquesta lliçó necessiten la consola de la VM, no una sessió SSH: quan el sistema no arrenca, no hi ha xarxa. Tingues clar com obrir la consola de VirtualBox abans de començar, i fes una instantània nova (06-abans-d-arrencada) — trencaràs l'arrencada a propòsit.
Contingut
- La cadena d'arrencada completa
- El microprogramari: UEFI i BIOS
- GRUB 2: el gestor d'arrencada
- L'initramfs: el sistema mínim intermedi
- El nucli i el pas de control a PID 1
- systemd i els targets
- Paràmetres de la línia d'ordres del nucli
- Recuperació: intervenir en l'arrencada
- Recuperar un sistema que no arrenca
- Reinstal·lar GRUB des d'un mitjà de rescat
La cadena d'arrencada completa
Arrencar un sistema és una successió de programes, cadascun amb més capacitat que l'anterior, en què cada baula carrega i cedeix el control a la següent. Se'n diu bootstrapping precisament per això.
graph TD
A["Microprogramari UEFI<br/>(a la placa)"] -->|"llegeix l'ESP"| B["GRUB 2<br/>shimx64.efi → grubx64.efi"]
B -->|"carrega a la RAM"| C["vmlinuz<br/>(nucli comprimit)"]
B -->|"carrega a la RAM"| D["initrd.img<br/>(initramfs)"]
C -->|"es descomprimeix<br/>i inicialitza"| E["Nucli<br/>controladors, memòria, planificador"]
D -->|"arrel temporal"| E
E -->|"munta l'arrel real<br/>i fa switch_root"| F["systemd<br/>PID 1"]
F -->|"activa dependències"| G["default.target<br/>= multi-user.target"]
G --> H["getty, sshd,<br/>tramontana.service"]
Les cinc baules i la seva responsabilitat, que convé tenir al cap perquè el diagnòstic consisteix a identificar en quina es va trencar:
| Baula | Què fa | Com saps que hi va arribar |
|---|---|---|
| Microprogramari | Inicialitza el maquinari, troba el gestor d'arrencada | Apareix el logotip de la placa o la pantalla de la BIOS |
| GRUB | Troba el nucli, el carrega a memòria, li passa paràmetres | Apareix el menú (o la pantalla es queda en negre amb GRUB en mode rescat) |
| Nucli | Inicialitza el maquinari de debò, munta l'arrel | Comencen els missatges de dmesg per pantalla |
| initramfs | Aporta els controladors i utilitats per poder muntar l'arrel | Una fallada aquí dona l'indicador (initramfs) |
| systemd | Arrenca els serveis en l'ordre correcte | Apareixen les línies [ OK ] Started ... |
Aquella taula és l'eina de diagnòstic més útil de la lliçó: quan algú et digui «el servidor no arrenca», la primera pregunta és fins on va arribar.
El microprogramari: UEFI i BIOS
El microprogramari (firmware) viu a la placa base, s'executa abans que qualsevol cosa que hi hagi al disc, i la seva feina és deixar el maquinari en un estat utilitzable i localitzar alguna cosa per arrencar. Hi ha dues generacions, i srv-tramontana fa servir la moderna:
| BIOS + MBR | UEFI + GPT | |
|---|---|---|
| Antiguitat | Des de 1981 | Des de 2005, universal des de 2012 |
| On busca l'arrencada | Els primers 446 bytes del disc (MBR) | Fitxers .efi a la partició ESP |
| Mida del carregador inicial | 446 bytes: obliga a una arrencada en dues fases | Un executable complet, sense límit pràctic |
| Taula de particions | MBR: 4 primàries, 2 TiB màxim | GPT: 128 particions, 8 ZiB |
| Sistema de fitxers que entén | Cap | FAT32 |
| Arrencada segura | No | Secure Boot: signatura criptogràfica del carregador |
| Gestió d'entrades | No n'hi ha | Variables NVRAM, gestionables amb efibootmgr |
La diferència clau és la tercera fila. A BIOS, el carregador havia de cabre en 446 bytes, cosa que obligava a un salt en dues fases i a col·locar codi a l'espai entre l'MBR i la primera partició. A UEFI, el microprogramari sap llegir FAT32, així que el carregador és un fitxer normal en una partició normal.
Aquella partició és l'ESP (partició del sistema EFI):
$ lsblk -f /dev/sda
NAME FSTYPE FSVER LABEL UUID MOUNTPOINTS
sda
├─sda1 vfat FAT32 A1B2-C3D4 /boot/efi
├─sda2 ext4 1.0 7c4e1f92-3a8b-4d15-9e26-8f3a0b7c1d54 /boot
└─sda3 ext4 1.0 3f8a2c19-6b4d-4e71-a835-1c9e5f2d0a87 /
$ ls /boot/efi/EFI/
BOOT ubuntu
$ ls -l /boot/efi/EFI/ubuntu/
-rwx------ 1 root root 126976 ago 18 09:14 grubx64.efi
-rwx------ 1 root root 108 ago 18 09:14 grub.cfg
-rwx------ 1 root root 955512 ago 18 09:14 shimx64.efi
-rwx------ 1 root root 1224264 ago 18 09:14 mmx64.efiTres fitxers que convé distingir, perquè l'ordre en què es criden importa quan alguna cosa falla:
shimx64.efiés la primera baula quan Secure Boot està actiu: està signat per Microsoft (la clau del qual ve de fàbrica a les plaques), i la seva única funció és verificar i carregar el següent. És el pont entre la cadena de confiança del fabricant i la de la distribució.grubx64.efiés GRUB pròpiament dit, signat per Canonical.mmx64.efi(MokManager) gestiona les claus pròpies, i és el que permet signar un mòdul del nucli propi (rellevant amb DKMS, que veuràs a 07-03).
Les entrades d'arrencada no són al disc, sinó a la NVRAM de la placa, i es gestionen amb efibootmgr:
$ sudo efibootmgr -v
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0001
Boot0000* ubuntu HD(1,GPT,a1b2c3d4-...,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0001* UEFI VBOX HARDDISK PciRoot(0x0)/Pci(0x1,0x1)/Ata(0,0,0)BootOrder és l'ordre en què el microprogramari prova les entrades. Poder reordenar-lo o crear una entrada nova des del sistema en marxa és el que salva la situació quan un altre sistema operatiu, o una actualització de microprogramari, ha deixat la teva entrada al final o l'ha esborrada:
# Crear una entrada nova apuntant al carregador d Ubuntu
$ sudo efibootmgr -c -d /dev/sda -p 1 -L "Ubuntu Tramontana" -l '\EFI\ubuntu\shimx64.efi'
# Posar aquella entrada primera
$ sudo efibootmgr -o 0002,0000,0001Un advertiment real: efibootmgr escriu a la NVRAM de la placa, i en alguns equips —sobretot portàtils de consum— un ús incorrecte ha arribat a deixar la placa inservible. En una VM és completament inofensiu, i és allà on has de practicar.
GRUB 2: el gestor d'arrencada
GRUB (GRand Unified Bootloader) resol un problema que el microprogramari no pot: saber llegir sistemes de fitxers de Linux, entendre LVM i RAID, presentar un menú, i carregar un nucli amb els paràmetres adequats.
Els fitxers, i el que no s'edita mai
$ head -6 /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#L'avís és literal i cal prendre-se'l així: grub.cfg es genera, i qualsevol canvi manual desapareix en la següent actualització del nucli, que executa update-grub com a part del seu script de mantenidor. Les dues fonts reals són:
/etc/default/grub: els ajustos en format clau-valor./etc/grub.d/: els scripts que generen cada secció del menú.
$ cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=falseLes directives que de debò es toquen en un servidor:
| Directiva | Què fa | Valor sensat en un servidor |
|---|---|---|
GRUB_TIMEOUT |
Segons d'espera al menú | 5: suficient per intervenir, no tant com per molestar |
GRUB_TIMEOUT_STYLE |
menu, hidden o countdown |
menu: ocult no serveix si no el pots veure per intervenir |
GRUB_DEFAULT |
Entrada per defecte | 0, o saved amb GRUB_SAVEDEFAULT=true |
GRUB_CMDLINE_LINUX_DEFAULT |
Paràmetres del nucli a l'arrencada normal | Veure l'apartat de paràmetres |
GRUB_CMDLINE_LINUX |
Paràmetres a totes les entrades, inclosa la de recuperació | Només l'imprescindible |
GRUB_DISABLE_RECOVERY |
Amaga les entrades de recuperació | false: són les que et salven |
GRUB_ENABLE_BLSCFG |
Format BootLoaderSpec (RHEL) | No s'aplica a Ubuntu |
I la regla operativa, amb la convenció del curs:
$ sudo cp -p /etc/default/grub /etc/default/grub.bak-$(date +%F)
$ sudo sed -i 's/^GRUB_TIMEOUT=5$/GRUB_TIMEOUT=10/' /etc/default/grub
$ sudo diff -u /etc/default/grub.bak-$(date +%F) /etc/default/grub
--- /etc/default/grub.bak-2026-08-18
+++ /etc/default/grub
@@ -3,7 +3,7 @@
-GRUB_TIMEOUT=5
+GRUB_TIMEOUT=10
$ sudo update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.0-41-generic
Found initrd image: /boot/initrd.img-6.8.0-41-generic
Found linux image: /boot/vmlinuz-6.8.0-39-generic
Found initrd image: /boot/initrd.img-6.8.0-39-generic
doneFixa't que en troba dos, de nuclis. Això no és casual i és una xarxa de seguretat important: si una actualització del nucli trenca alguna cosa —un controlador que desapareix, un mòdul de tercers incompatible—, el menú de GRUB t'ofereix l'anterior. La configuració que ho garanteix:
$ apt-mark showmanual | grep -c linux-generic
1
$ ls /boot/vmlinuz-*
/boot/vmlinuz-6.8.0-39-generic /boot/vmlinuz-6.8.0-41-genericUbuntu conserva per defecte els nuclis necessaris i apt autoremove neteja els antics. L'error a evitar és esborrar-los a mà per alliberar espai a /boot quan s'omple: si et quedes amb un de sol i aquell falla, no hi ha on tornar. La solució correcta quan /boot s'omple és sudo apt autoremove --purge, que respecta el nucli en ús i l'anterior.
L'estructura del menú
Els scripts s'executen en ordre numèric i cadascun aporta la seva part al grub.cfg. 10_linux genera les entrades dels nuclis instal·lats, 30_os-prober detecta altres sistemes operatius, i 40_custom és on es posen les entrades pròpies — perquè és l'únic que no es regenera.
Per consultar el menú actual sense reiniciar:
$ awk -F"'" '/^menuentry / {print NR": "$2}' /boot/grub/grub.cfg
6: Ubuntu
$ awk -F"'" '/^\s*menuentry / {print " - "$2}' /boot/grub/grub.cfg
- Ubuntu, with Linux 6.8.0-41-generic
- Ubuntu, with Linux 6.8.0-41-generic (recovery mode)
- Ubuntu, with Linux 6.8.0-39-generic
- Ubuntu, with Linux 6.8.0-39-generic (recovery mode)L'initramfs: el sistema mínim intermedi
Aquesta és la baula que menys s'entén i la que més problemes causa. El problema que resol és un cercle viciós:
Per muntar el sistema de fitxers arrel, el nucli necessita el controlador del controlador de disc, el mòdul del sistema de fitxers, i —a
srv-tramontana— els mòduls d'LVM i de LUKS, més les utilitatslvmicryptsetup. Però tot això és dins del sistema de fitxers arrel que encara no pot muntar.
L'initramfs trenca el cercle: és un arxiu comprimit amb un sistema de fitxers mínim que GRUB carrega a memòria juntament amb el nucli. El nucli el munta com a arrel temporal, executa el seu script d'arrencada, que carrega els mòduls, desbloqueja LUKS, activa els volums LVM i munta l'arrel real; i aleshores fa switch_root per canviar-hi i executar el systemd de debò.
$ ls -lh /boot/initrd.img-*
-rw-r--r-- 1 root root 74M ago 18 09:14 /boot/initrd.img-6.8.0-41-generic
-rw-r--r-- 1 root root 74M jul 22 11:02 /boot/initrd.img-6.8.0-39-generic
# Que hi ha a dins: cryptsetup i lvm son els que importen aqui
$ lsinitramfs /boot/initrd.img-6.8.0-41-generic | grep -E 'cryptsetup$|/lvm$|sd_mod|ext4'
usr/lib/x86_64-linux-gnu/libcryptsetup.so.12
usr/sbin/cryptsetup
usr/sbin/lvm
usr/lib/modules/6.8.0-41-generic/kernel/drivers/scsi/sd_mod.ko.zst
usr/lib/modules/6.8.0-41-generic/kernel/fs/ext4/ext4.ko.zst
$ lsinitramfs /boot/initrd.img-6.8.0-41-generic | wc -l
4127Que cryptsetup i lvm hi siguin no és automàtic: els scripts d'initramfs-tools els inclouen perquè llegeixen /etc/crypttab i /etc/fstab en el moment de generar l'initramfs. I d'aquí en surt la regla operativa més important d'aquest apartat:
Després de tocar
/etc/crypttab, la configuració d'LVM o l'esquema de discos d'arrencada, cal regenerar l'initramfs. Si no, el sistema arrencarà amb un initramfs que no sap res del canvi i es quedarà a l'indicador(initramfs).
$ sudo update-initramfs -u # el nucli actual
$ sudo update-initramfs -u -k all # tots els nuclis instal·lats
update-initramfs: Generating /boot/initrd.img-6.8.0-41-generic
update-initramfs: Generating /boot/initrd.img-6.8.0-39-genericEl -k all és el que salva: si només regeneres l'actual i després necessites arrencar amb l'anterior, et trobes la mateixa fallada des de l'altre nucli.
La configuració viu a /etc/initramfs-tools/:
$ grep -v '^#' /etc/initramfs-tools/initramfs.conf | grep -v '^$'
MODULES=most
BUSYBOX=auto
COMPRESS=zstd
DEVICE=
NFSROOT=auto
RUNSIZE=10%MODULES=most inclou una selecció àmplia de controladors; MODULES=dep inclou només els que la màquina actual necessita, i produeix un initramfs molt més petit — a canvi que deixi d'arrencar si mous el disc a un altre maquinari. En un servidor virtual estable pot tenir sentit; com a valor per defecte, most és l'elecció prudent.
El nucli i el pas de control a PID 1
Quan GRUB carrega vmlinuz, aquest es descomprimeix i pren el control del maquinari de debò: detecta CPU i memòria, inicialitza el planificador, munta /proc i /sys, carrega els controladors integrats i executa l'initramfs.
Els paràmetres amb què es va arrencar queden registrats i es poden consultar:
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.8.0-41-generic root=UUID=3f8a2c19-6b4d-4e71-a835-1c9e5f2d0a87 ro quiet splashAquell fitxer és la primera cosa que cal mirar quan l'arrencada es comporta de forma inesperada: diu amb què es va arrencar realment, no amb què et penses que es va arrencar. Un single, un nomodeset o un init= oblidat a GRUB_CMDLINE_LINUX hi apareixen.
I dmesg és el diari del nucli durant l'arrencada:
$ sudo dmesg | head -3
[ 0.000000] Linux version 6.8.0-41-generic (buildd@lcy02-amd64-045) ...
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-6.8.0-41-generic root=UUID=3f8a...
[ 0.000000] KERNEL supported cpus: Intel AMD Hygon Centaur zhaoxin
# Errors i avisos de l arrencada actual
$ sudo journalctl -k -b -p warning --no-pager | head -5
# I de l arrencada ANTERIOR: el que necessites quan el sistema va caure i va tornar
$ sudo journalctl -k -b -1 -p err --no-pagerPoder consultar l'arrencada anterior és exactament la raó per la qual a 05-06 vas fer persistent el journal. Sense /var/log/journal, -b -1 no existeix i el diagnòstic d'una arrencada fallida es perd en reiniciar.
Al final de la seva inicialització, el nucli executa el procés init —avui /sbin/init, que és un enllaç a systemd— i li lliura el control com a PID 1. Des d'aquell moment el nucli només atén crides al sistema; l'arrencada la dirigeix l'espai d'usuari.
systemd i els targets
Ja coneixes systemd des de 05-05: unitats, dependències, temporitzadors. El que hi afegeix aquesta lliçó és el seu paper com a director de l'arrencada.
systemd activa default.target i, cap enrere, tot el que aquest necessita:
$ systemctl get-default
multi-user.target
$ systemctl list-dependencies default.target | head -12
default.target
● ├─tramontana.service
● ├─cron.service
● ├─fail2ban.service
● ├─ssh.service
● ├─basic.target
● │ ├─sysinit.target
● │ │ ├─systemd-journald.service
● │ │ ├─cryptsetup.target
● │ │ └─local-fs.target
● │ └─sockets.target
● └─timers.targetEls targets que cal conèixer, perquè són els que es fan servir en recuperació:
| Target | Què activa | Per a què serveix |
|---|---|---|
emergency.target |
Només una shell; l'arrel muntada en només lectura, sense /usr |
L'últim recurs; fstab trencat |
rescue.target |
Shell + sistemes de fitxers locals muntats | Arreglar la majoria de problemes |
multi-user.target |
Tot, sense entorn gràfic | L'estat normal d'un servidor |
graphical.target |
multi-user + gestor de sessions |
Escriptori |
I les dues eines d'anàlisi de l'arrencada:
$ systemd-analyze
Startup finished in 3.412s (kernel) + 8.847s (userspace) = 12.259s
multi-user.target reached after 8.712s in userspace.
$ systemd-analyze blame | head -6
4.218s [email protected]
2.104s snapd.service
1.882s cryptsetup@backups\x2dxifrat.service
947ms tramontana.service
612ms systemd-udev-settle.service
388ms fail2ban.service
$ systemd-analyze critical-chain
multi-user.target @8.712s
└─tramontana.service @7.765s +947ms
└─postgresql.service @7.762s
└─network-online.target @3.541s
└─systemd-networkd-wait-online.service @1.104s +2.437sLa diferència entre les dues és conceptual i decideix on optimitzar: blame ordena per temps que va trigar cada unitat, i critical-chain mostra la cadena de dependències que determina el temps total. snapd.service triga 2 segons, però no és a la cadena crítica: arrenca en paral·lel i no endarrereix res. En canvi systemd-networkd-wait-online sí, i allà sí que val la pena investigar.
Paràmetres de la línia d'ordres del nucli
Els paràmetres que GRUB passa al nucli són la palanca d'intervenció en l'arrencada. Els que cal conèixer:
| Paràmetre | Efecte | Quan es fa servir |
|---|---|---|
ro / rw |
Munta l'arrel en només lectura / lectura-escriptura | rw amb init=/bin/bash |
quiet |
Silencia els missatges del nucli | Treu-lo per veure on falla |
splash |
Pantalla gràfica d'arrencada | Treu-lo pel mateix motiu |
single o 1 |
Arrenca en rescue.target |
Mode manteniment |
systemd.unit=<target> |
Arrenca en el target indicat | emergency.target, rescue.target |
init=/bin/bash |
Substitueix PID 1 per una shell | Contrasenya de root perduda; systemd no arrenca |
systemd.mask=<unitat> |
Emmascara una unitat només en aquesta arrencada | Un servei que penja l'arrencada |
nomodeset |
Desactiva els controladors gràfics del nucli | Pantalla en negre per vídeo |
noapic / acpi=off |
Desactiva gestió d'interrupcions / energia | Bloqueigs per microprogramari |
emergency |
Equival a systemd.unit=emergency.target |
Últim recurs |
debug systemd.log_level=debug |
Registre exhaustiu | Diagnòstic fi de l'arrencada |
El primer consell pràctic de recuperació és el més simple: treure quiet splash. La pantalla d'arrencada bonica amaga precisament els missatges que et dirien on es va trencar.
Recuperació: intervenir en l'arrencada
Editar l'entrada del menú
Al menú de GRUB, amb l'entrada seleccionada, la tecla e obre l'editor. És un editor efímer: els canvis afecten només aquesta arrencada i no toquen res del disc. És la propietat que el fa segur per experimentar.
El procediment:
- Encén la VM i, si el menú no apareix, mantén premuda
Shift(BIOS) o premEscrepetidament (UEFI). - Selecciona l'entrada d'Ubuntu i prem
e. - Localitza la línia que comença per
linux /vmlinuz-.... - Modifica el que necessitis al final d'aquella línia.
Ctrl+XoF10per arrencar amb aquells paràmetres.
La línia original i les tres variants més útils:
# Original linux /vmlinuz-6.8.0-41-generic root=UUID=3f8a2c19-... ro quiet splash # Veure que passa de debo linux /vmlinuz-6.8.0-41-generic root=UUID=3f8a2c19-... ro # Arrencar en mode de rescat (shell de root, sistemes de fitxers muntats) linux /vmlinuz-6.8.0-41-generic root=UUID=3f8a2c19-... ro systemd.unit=rescue.target # Saltar-se systemd del tot: una shell com a PID 1 linux /vmlinuz-6.8.0-41-generic root=UUID=3f8a2c19-... rw init=/bin/bash
rescue davant d'emergency
rescue.target |
emergency.target |
|
|---|---|---|
| Sistemes de fitxers locals | Muntats (local-fs.target) |
Només l'arrel, en només lectura |
/usr, /var en particions a part |
Muntats | No muntats |
| Serveis | Cap més enllà del bàsic | Cap |
| Xarxa | No | No |
| Requereix contrasenya de root | Sí | Sí |
| Quan fer-lo servir | Gairebé sempre | Quan rescue tampoc no arrenca |
rescue és el que es fa servir el 90 % de les vegades: tens els sistemes de fitxers muntats i les eines disponibles. emergency és per quan el problema és al muntatge mateix —un fstab trencat és el cas típic—, i allà el primer és fer escrivible l'arrel:
# A emergency.target, l arrel esta en nomes lectura
root@srv-tramontana:~# mount -o remount,rw /
root@srv-tramontana:~# nano /etc/fstabinit=/bin/bash i l'arrel en només lectura
init=/bin/bash és el recurs més potent: substitueix PID 1 per una shell, així que systemd no arriba a executar-se. Serveix quan el problema és a systemd o a l'autenticació mateixa.
I té dues peculiaritats que desconcerten la primera vegada:
El PATH no està configurat, perquè no ha corregut cap script d'inici. S'arregla a mà:
bash-5.2# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
bash-5.2# mount | head -1
/dev/mapper/... on / type ext4 (ro,relatime)I l'arrel està en només lectura, perquè el paràmetre ro continua vigent i ningú no l'ha remuntada:
bash-5.2# mount -o remount,rw /
bash-5.2# touch /prova && echo "ja s hi pot escriure"
ja s hi pot escriureEn acabar, i això és important: no reiniciïs amb reboot, perquè no hi ha systemd per atendre la petició i les dades poden quedar sense sincronitzar. La seqüència correcta:
bash-5.2# sync
bash-5.2# mount -o remount,ro /
bash-5.2# exec /sbin/init # arrencar systemd des d aqui
# o, si prefereixes reiniciar:
bash-5.2# echo b > /proc/sysrq-triggerRecuperar la contrasenya de root
Un escenari clàssic, i una demostració incòmoda de per què l'accés físic —o a la consola de l'hipervisor— equival al control del sistema:
# 1. Menu de GRUB → e → afegir al final de la linia linux:
# (canviar 'ro' per 'rw')
# rw init=/bin/bash
# 2. Ctrl+X
bash-5.2# export PATH=/usr/sbin:/usr/bin:/sbin:/bin
bash-5.2# mount -o remount,rw /
bash-5.2# passwd root
New password:
Retype new password:
passwd: password updated successfully
# 3. Si hi ha SELinux (RHEL), cal reetiquetar; a Ubuntu amb AppArmor no cal
bash-5.2# sync
bash-5.2# exec /sbin/initLa lliçó de seguretat que cal extreure'n: qualsevol amb accés a la consola de la màquina pot fer això en dos minuts. Les contramesures —contrasenya a GRUB amb grub-mkpasswd-pbkdf2, xifratge complet del disc amb LUKS incloent-hi /boot, Secure Boot, i control d'accés físic— són precisament les que al model d'amenaces de 06-06 van quedar fora d'abast. Ara entens per què aquella decisió havia de ser explícita.
Recuperar un sistema que no arrenca
L'escenari que 05-04 va anunciar: fstab trencat
El provocaràs a propòsit, perquè és la fallada més comuna després d'un canvi de discos i perquè a 06-05 vas modificar fstab per al volum LUKS.
# Provocar la fallada: un UUID que no existeix, sense nofail
$ sudo cp -p /etc/fstab /etc/fstab.bak-$(date +%F)
$ echo 'UUID=00000000-0000-0000-0000-000000000000 /dades ext4 defaults 0 2' \
| sudo tee -a /etc/fstab
$ sudo mkdir -p /dades
$ sudo rebootEn arrencar, en lloc de l'indicador d'inici de sessió apareix:
[ FAILED ] Failed to mount /dades. [DEPEND] Dependency failed for Local File Systems. You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, ... Press Enter for maintenance (or press Control-D to continue):
Això és exactament el que mount -a hauria evitat. El diagnòstic i la reparació:
# 1. Entrar en manteniment amb la contrasenya de root
Give root password for maintenance:
# 2. Confirmar la causa
root@srv-tramontana:~# systemctl --failed --no-pager
UNIT LOAD ACTIVE SUB DESCRIPTION
● dades.mount loaded failed failed /dades
● local-fs.target loaded failed failed Local File Systems
root@srv-tramontana:~# journalctl -xb -u dades.mount --no-pager | tail -3
mount: /dades: can't find UUID=00000000-0000-0000-0000-000000000000.
# 3. Fer escrivible l arrel i arreglar
root@srv-tramontana:~# mount -o remount,rw /
root@srv-tramontana:~# nano /etc/fstab # comentar o corregir la linia
# 4. VERIFICAR abans de reiniciar: la mateixa xarxa de seguretat de 05-04
root@srv-tramontana:~# systemctl daemon-reload
root@srv-tramontana:~# mount -a && echo "fstab correcte"
fstab correcte
# 5. Continuar l arrencada sense reiniciar
root@srv-tramontana:~# systemctl defaultI les dues lliçons, que cal anotar al manual d'operació (runbook):
mount -aabans de reiniciar, sempre. És una comprovació de dos segons que evita aquesta situació.nofailen tot muntatge que no sigui imprescindible per arrencar. Ambnofail, un dispositiu absent produeix un avís al journal i el sistema arrenca. És exactament per això que la línia del volum de còpies el porta:
L'indicador (initramfs)
Una fallada diferent i més profunda: l'initramfs no ha aconseguit muntar l'arrel.
Gave up waiting for root file system device. ALERT! UUID=3f8a2c19-... does not exist. Dropping to a shell! BusyBox v1.36.1 (Ubuntu 1:1.36.1-6ubuntu3) built-in shell (ash) (initramfs)
Les causes, amb la seva comprovació:
# 1. Veure quins dispositius detecta el nucli: el problema es que falta el controlador?
(initramfs) cat /proc/partitions
(initramfs) ls /dev/sd* /dev/nvme* 2>/dev/null
# 2. Si el disc hi es pero es LVM: activar els volums a ma
(initramfs) lvm vgscan
(initramfs) lvm vgchange -ay
(initramfs) ls /dev/mapper/
# 3. Si es LUKS: desbloquejar a ma
(initramfs) cryptsetup luksOpen /dev/sda3 arrel-xifrada
(initramfs) lvm vgchange -ay
# 4. Si es pot muntar a ma, el problema es de configuracio, no de maquinari
(initramfs) mkdir /arrel && mount /dev/mapper/vg-root /arrel && ls /arrel
(initramfs) exit # BusyBox intenta continuar l arrencadaSi el pas 4 funciona, saps que el disc i el sistema de fitxers estan bé i que el que falta és a l'initramfs o al crypttab. S'arrenca amb el nucli anterior des del menú de GRUB —l'initramfs del qual és el d'abans del canvi— i es regenera:
És la raó per la qual conservar dos nuclis és una mesura de recuperació, no un malbaratament d'espai.
Reinstal·lar GRUB des d'un mitjà de rescat
L'escenari més greu: GRUB no apareix en absolut. El microprogramari no troba res per arrencar, o arrenca directament un altre sistema. Passa després d'instal·lar un altre sistema operatiu, després de clonar un disc, o després d'una actualització de microprogramari que va esborrar l'entrada de la NVRAM.
Es resol arrencant des d'un mitjà extern (l'ISO d'Ubuntu en mode Try Ubuntu), muntant el sistema instal·lat i entrant-hi amb chroot — que és l'operació conceptualment interessant d'aquesta lliçó, perquè és la mateixa primitiva sobre la qual es construeixen els contenidors de 07-05.
# 1. Identificar les particions
ubuntu@ubuntu:~$ lsblk -f
NAME FSTYPE FSVER LABEL UUID MOUNTPOINTS
sda
├─sda1 vfat FAT32 A1B2-C3D4
├─sda2 ext4 1.0 7c4e1f92-3a8b-4d15-9e26-8f3a0b7c1d54
└─sda3 ext4 1.0 3f8a2c19-6b4d-4e71-a835-1c9e5f2d0a87
# 2. Muntar l arrel, i despres /boot i la ESP A DINS seu
ubuntu@ubuntu:~$ sudo mount /dev/sda3 /mnt
ubuntu@ubuntu:~$ sudo mount /dev/sda2 /mnt/boot
ubuntu@ubuntu:~$ sudo mount /dev/sda1 /mnt/boot/efi
# 3. Els quatre muntatges bind imprescindibles.
# /dev -> acces als dispositius reals
# /proc -> informacio de processos i nucli
# /sys -> interficie del nucli
# /sys/firmware/efi/efivars -> ESCRIURE a la NVRAM (sense aixo,
# grub-install falla a UEFI)
ubuntu@ubuntu:~$ for d in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do
sudo mount --bind "$d" "/mnt$d"
done
# 4. Entrar al sistema instal·lat
ubuntu@ubuntu:~$ sudo chroot /mnt /bin/bash
root@ubuntu:/#Aquell quart muntatge és el que fa fracassar la meitat dels intents de reparació de GRUB a UEFI: sense efivars accessible en escriptura, grub-install no pot crear l'entrada d'arrencada i avorta amb un error que no explica la causa.
# 5. Reinstal·lar GRUB i regenerar la configuracio
root@ubuntu:/# grub-install --target=x86_64-efi --efi-directory=/boot/efi \
--bootloader-id=ubuntu --recheck
Installing for x86_64-efi platform.
Installation finished. No error reported.
root@ubuntu:/# update-grub
root@ubuntu:/# update-initramfs -u -k all
# 6. Comprovar que l entrada existeix a la NVRAM
root@ubuntu:/# efibootmgr -v | grep -i ubuntu
Boot0000* ubuntu HD(1,GPT,...)/File(\EFI\ubuntu\shimx64.efi)
# 7. Sortir netament: desmuntar en ORDRE INVERS
root@ubuntu:/# exit
ubuntu@ubuntu:~$ for d in /run /sys/firmware/efi/efivars /sys /proc /dev/pts /dev; do
sudo umount "/mnt$d"
done
ubuntu@ubuntu:~$ sudo umount /mnt/boot/efi /mnt/boot /mnt
ubuntu@ubuntu:~$ sudo rebootL'ordre invers en desmuntar no és una formalitat: desmuntar /mnt abans de /mnt/dev falla amb target is busy, i forçar-ho pot deixar el sistema de fitxers marcat com a brut.
Per a un sistema amb BIOS/MBR en lloc d'UEFI, el pas 5 canvia i els muntatges d'efivars no s'apliquen:
Errors Comuns i Consells
- Editar
/boot/grub/grub.cfga mà. El fitxer ho diu a la tercera línia. Els canvis desapareixen en la següent actualització del nucli. S'edita/etc/default/grubi s'executaupdate-grub. - Oblidar
update-gruboupdate-initramfsdesprés d'un canvi. Editar/etc/default/grubsenseupdate-grubno fa res. Tocarcrypttabo LVM senseupdate-initramfs -u -k allprodueix l'indicador(initramfs)en la següent arrencada. - Regenerar l'initramfs només del nucli actual. Si després necessites arrencar amb l'anterior, et trobes la mateixa fallada. Sempre
-k all. - Esborrar nuclis antics a mà per alliberar
/boot. Quedar-te amb un de sol elimina la teva xarxa de seguretat. Fes servirapt autoremove --purge, que respecta el nucli en ús i l'anterior. - Muntatges sense
nofailafstab. Un dispositiu absent impedeix arrencar. Només l'arrel i/boothan de poder bloquejar l'arrencada. - No executar
mount -aabans de reiniciar. És la comprovació de dos segons que separa un avís d'una sessió en mode emergència amb la consola de l'hipervisor. GRUB_TIMEOUT_STYLE=hiddenen un servidor. Un menú ocult no es pot fer servir per intervenir. IGRUB_TIMEOUT=0és pitjor: elimina la possibilitat de recuperació per menú.- Deixar
quiet splashen diagnosticar. Treu-los: els missatges que amaguen són exactament els que diuen on falla. - Oblidar
--bind /sys/firmware/efi/efivarsal chroot.grub-installfalla a UEFI amb un error poc descriptiu. És la causa més comuna de reparacions fallides. - Reiniciar amb
rebootdes d'init=/bin/bash. No hi ha systemd que atengui la petició.sync, remuntar en només lectura, iexec /sbin/initoecho b > /proc/sysrq-trigger. - Consell de mètode. Practica els tres procediments —
fstabtrencat, contrasenya de root, reinstal·lar GRUB— al laboratori i amb instantània prèvia, avui, amb calma. La primera vegada que els necessitis serà a les 3 de la matinada amb un servei caigut, i aquell no és moment d'aprendre.
Exercicis
Exercici 1
Provoca deliberadament l'indicador (initramfs) al teu laboratori i recupera'l. Parteix del fet que /srv/tramontana/backups està xifrat amb LUKS i la seva clau es declara a /etc/crypttab. Descriu el canvi que provoca la fallada, per què el sistema no arrenca, com el diagnostiques des de l'indicador de BusyBox, i les dues maneres de recuperar-lo.
Exercici 2
L'arrencada de srv-tramontana triga 47 segons, quan abans en trigava 12. Descriu el procediment de diagnòstic fent servir les eines de systemd, explicant quina informació aporta cadascuna i com distingeixes una unitat lenta que no importa d'una que sí.
Exercici 3
La Marta et demana un procediment escrit de recuperació de l'arrencada per al manual d'operació, que pugui seguir algú que no siguis tu. Redacta'l com un arbre de decisió: què observar, què preguntar-se i què fer a cada branca, cobrint els quatre escenaris que has vist a la lliçó.
Solucions
Solució 1
Provocar la fallada. L'escenari realista és un canvi a crypttab sense regenerar l'initramfs. Com que el volum xifrat és el de còpies i porta nofail, perquè la fallada sigui d'arrencada cal tocar alguna cosa que sí que la bloquegi. La manera neta de reproduir-ho és eliminar els mòduls de LUKS i LVM de l'initramfs:
$ sudo cp -p /etc/initramfs-tools/initramfs.conf{,.bak-$(date +%F)}
$ sudo cp -p /etc/crypttab /etc/crypttab.bak-$(date +%F)
# Buidar crypttab: initramfs-tools el llegeix per decidir si inclou cryptsetup
$ sudo truncate -s 0 /etc/crypttab
$ sudo sed -i 's/^MODULES=most/MODULES=dep/' /etc/initramfs-tools/initramfs.conf
$ sudo update-initramfs -u -k all
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep -c cryptsetup
0
$ sudo rebootPer què no arrenca. L'initramfs és l'únic entorn que existeix abans de muntar l'arrel, i el seu script d'arrencada necessita cryptsetup per desbloquejar el volum LUKS i lvm per activar els volums lògics. En no estar-hi inclosos —perquè crypttab estava buit quan es va generar—, l'script no troba el dispositiu arrel, espera el temps màxim i cau a la shell de BusyBox. És el cercle viciós de l'apartat de l'initramfs en la seva forma més pura: les eines per muntar l'arrel són dins de l'arrel que no es pot muntar.
Diagnòstic des de BusyBox. Descartant de fora cap a dins:
# 1. Veu el nucli el disc fisic? Si no, falta un CONTROLADOR
(initramfs) cat /proc/partitions
major minor #blocks name
8 0 26214400 sda
8 1 524288 sda1
8 2 976562 sda2
8 3 24712550 sda3El disc i les seves tres particions hi són. Descartat el controlador.
Sense sortida: aquí està la causa. Cap de les dues no és a l'initramfs.
# 3. Confirmar que el sistema de fitxers esta sa muntant-lo a ma
(initramfs) blkid /dev/sda3
/dev/sda3: UUID="3f8a2c19-..." TYPE="ext4"
(initramfs) mkdir /arrel && mount -o ro /dev/sda3 /arrel
(initramfs) ls /arrel
bin boot dev etc home lib opt proc root run sbin srv sys tmp usr varEl sistema està intacte. El problema és exclusivament de l'initramfs, que és la conclusió que orienta la reparació.
Les dues maneres de recuperar-lo.
Manera A — arrencar amb el nucli anterior (la ràpida). L'initramfs del nucli 6.8.0-39 es va generar abans del canvi, així que continua complet... llevat que hagis fet servir -k all, que és exactament el que vam fer. Si l'update-initramfs hagués estat només de l'actual, aquesta seria la sortida en trenta segons: menú de GRUB → Advanced options → nucli 6.8.0-39 → arrenca → regenerar. La lliçó és doble: -k all és el correcte per no deixar un nucli trencat, però significa que un error de configuració afecta tots els nuclis alhora. Per això la comprovació (lsinitramfs | grep cryptsetup) va abans del reinici, no després.
Manera B — chroot des d'un mitjà de rescat (la que sempre funciona).
# Arrencar des de l ISO en mode Try Ubuntu
ubuntu@ubuntu:~$ sudo cryptsetup luksOpen /dev/sda3 arrel # si l arrel esta xifrada
ubuntu@ubuntu:~$ sudo mount /dev/sda3 /mnt
ubuntu@ubuntu:~$ sudo mount /dev/sda2 /mnt/boot
ubuntu@ubuntu:~$ sudo mount /dev/sda1 /mnt/boot/efi
ubuntu@ubuntu:~$ for d in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do
sudo mount --bind "$d" "/mnt$d"; done
ubuntu@ubuntu:~$ sudo chroot /mnt /bin/bash
# Restaurar la configuracio des de les copies .bak que SI vas fer
root@ubuntu:/# cp /etc/crypttab.bak-2026-08-18 /etc/crypttab
root@ubuntu:/# cp /etc/initramfs-tools/initramfs.conf.bak-2026-08-18 \
/etc/initramfs-tools/initramfs.conf
root@ubuntu:/# update-initramfs -u -k all
# VERIFICAR abans de reiniciar
root@ubuntu:/# lsinitramfs /boot/initrd.img-6.8.0-41-generic | grep -c 'sbin/cryptsetup'
1
root@ubuntu:/# lsinitramfs /boot/initrd.img-6.8.0-39-generic | grep -c 'sbin/cryptsetup'
1
root@ubuntu:/# exit
ubuntu@ubuntu:~$ for d in /run /sys/firmware/efi/efivars /sys /proc /dev/pts /dev; do
sudo umount "/mnt$d"; done
ubuntu@ubuntu:~$ sudo umount /mnt/boot/efi /mnt/boot /mnt && sudo rebootI les dues conclusions que van al manual d'operació: les còpies .bak-$(date +%F) de la convenció del curs són el que va fer trivial la reparació —sense elles caldria reconstruir la configuració de memòria—, i la verificació amb lsinitramfs va abans del reinici, no després. El patró és idèntic al mount -a de fstab: comprovar al sistema en marxa el que només es manifestaria en arrencar.
Solució 2
El procediment comença per separar l'arrencada del nucli de l'arrencada de l'espai d'usuari, perquè són problemes diferents:
$ systemd-analyze
Startup finished in 3.398s (kernel) + 43.612s (userspace) = 47.010s
multi-user.target reached after 43.487s in userspace.El nucli triga el mateix de sempre (3,4 s); els 35 segons extra són a l'espai d'usuari. Això descarta maquinari, controladors i initramfs, i centra la cerca en les unitats de systemd.
$ systemd-analyze blame | head -8
35.041s systemd-networkd-wait-online.service
4.187s [email protected]
2.098s snapd.service
1.874s cryptsetup@backups\x2dxifrat.service
938ms tramontana.service
610ms systemd-udev-settle.service
384ms fail2ban.service
122ms apparmor.serviceblame dona el sospitós, però no n'hi ha prou, i aquí està el contingut de l'exercici: una unitat lenta només importa si és a la cadena crítica. Cal comprovar-ho:
$ systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.
multi-user.target @43.487s
└─tramontana.service @42.540s +938ms
└─postgresql.service @42.536s
└─network-online.target @42.530s
└─systemd-networkd-wait-online.service @7.489s +35.041s
└─systemd-networkd.service @7.203s +281msConfirmat. systemd-networkd-wait-online és a la cadena, triga 35 s, i arrossega tot el que depèn de la xarxa: PostgreSQL espera network-online.target, i tramontana.service espera PostgreSQL. Els 35 s es propaguen íntegres al total.
El contrast que demana l'enunciat el dona snapd.service: triga 2 segons i no apareix a la cadena crítica, perquè arrenca en paral·lel i res no l'espera. Optimitzar-lo no estalviaria ni una dècima del temps total. Aquesta és la diferència entre les dues eines:
| Eina | Què respon | Risc de malinterpretar-la |
|---|---|---|
systemd-analyze |
Nucli o espai d'usuari? | Cap; és el primer filtre |
blame |
Quina unitat va trigar més? | Alt: una unitat lenta en paral·lel no endarrereix res |
critical-chain |
Què determina el temps total? | Baix; és on cal optimitzar |
journalctl -b |
Per què va trigar? | Cap; és la causa arrel |
La causa arrel, amb el journal:
$ journalctl -b -u systemd-networkd-wait-online --no-pager
systemd-networkd-wait-online[701]: Timeout occurred while waiting for network connectivity.
systemd-networkd-wait-online[701]: Event loop failed: Connection timed out.
$ networkctl status enp0s3 | grep -E 'State|Online'
State: routable (configured)
Online state: online
$ networkctl list
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0s3 ether routable configured
3 virbr0 bridge no-carrier configuredAquí està: virbr0, el pont de libvirt, està configured però sense enllaç, perquè no hi ha cap màquina virtual arrencada connectada a ell. systemd-networkd-wait-online espera per defecte que totes les interfícies gestionades estiguin en línia, i aquella no ho estarà mai. Els 35 segons són el seu temps d'espera màxim esgotant-se.
La correcció és dir-li quina interfície importa de debò:
$ sudo mkdir -p /etc/systemd/system/systemd-networkd-wait-online.service.d
$ sudo tee /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf >/dev/null <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --interface=enp0s3 --timeout=30
EOF
$ sudo systemctl daemon-reloadL'ExecStart= buit abans del nou és obligatori: sense ell, systemd afegeix una segona ordre en lloc de substituir la primera, i la unitat falla. És el mateix mecanisme de reinicialització de llista que vas veure amb SystemCallFilter a 06-06.
I la verificació, amb la disciplina de mesurar abans i després:
$ sudo reboot
# ... despres del reinici
$ systemd-analyze
Startup finished in 3.402s (kernel) + 9.118s (userspace) = 12.520s
$ systemd-analyze critical-chain | head -5
multi-user.target @8.993s
└─tramontana.service @8.046s +938ms
└─postgresql.service @8.041s
└─network-online.target @8.034s
└─systemd-networkd-wait-online.service @7.492s +541ms
$ ~/scripts/revisio_salut.sh; echo "estat: $?"
estat: 0De 47 s a 12,5 s, i el servei verificat. I una reflexió de mètode: el símptoma («l'arrencada triga més») va aparèixer després d'instal·lar libvirt, i ningú no va relacionar les dues coses. Anotar al manual d'operació el temps d'arrencada com a part de la línia base de 05-07 és el que converteix «em sembla que va més lent» en una dada amb data.
Solució 3
MANUAL D'OPERACIÓ — Recuperació de l'arrencada de
srv-tramontanaVersió 1.0 · 18 d'agost de 2026 · Autor: Operacions de sistemes Aquest document es guarda FORA del servidor. Còpia al portàtil d'administració i al gestor de contrasenyes de l'equip.Requisits previs. Accés a la consola de la màquina a VirtualBox (no val SSH: si no arrenca, no hi ha xarxa). Contrasenya de root, disponible a
pass tramontana/produccio/root. ISO d'Ubuntu Server 24.04 accessible per al cas 4.
PAS 0 — L'única pregunta que importa: fins on va arribar?
Encén la màquina i observa. No toquis res encara. Anota l'hora i el que veus a la pantalla.
El que veus Es va trencar a Ves al cas Pantalla negra, sense logotip, sense menú Microprogramari o GRUB Cas 4 Menú de GRUB, però no passa d'aquí GRUB o nucli Cas 4 Indicador (initramfs)initramfs Cas 3 Missatges d'arrencada i després emergency modeMuntatge de sistemes de fitxers Cas 1 Arrenca però no pots entrar Autenticació Cas 2 Arrenca, però molt lent Cap; és una unitat lenta Cas 5
CAS 1 — «You are in emergency mode» (el més freqüent)
Gairebé sempre és
/etc/fstab, després d'un canvi de discos.
- Prem
Enteri introdueix la contrasenya de root.- Identifica què va fallar:
systemctl --failed- Llegeix la causa:
journalctl -xb | tail -30- Fes escrivible l'arrel:
mount -o remount,rw /- Corregeix
/etc/fstabambnano. Si dubtes, comenta la línia sospitosa anteposant-hi#: és reversible i et torna el servei.- Verifica sense reiniciar:
systemctl daemon-reload && mount -a
- Sense errors → pas 7.
- Amb errors → torna al pas 5. No reiniciïs amb
mount -afallant.- Continua l'arrencada:
systemctl default- Comprova el servei:
/home/operador/scripts/revisio_salut.sh(ha de retornar 0).Nota: si la línia problemàtica és de
/srv/tramontana/backups, hauria de portarnofaili no bloquejar l'arrencada. Si la va bloquejar, afegeix-hinofailcom a part de la correcció.
CAS 2 — Arrenca però no es pot iniciar sessió
- Reinicia. Al menú de GRUB, amb l'entrada d'Ubuntu seleccionada, prem
e. (Si el menú no apareix: manténShifto premEscrepetidament en encendre.)- A la línia que comença per
linux /vmlinuz-, canviaroperrwi afegeix al final:init=/bin/bashCtrl+Xper arrencar.- A l'indicador
bash-5.2#:export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin mount -o remount,rw / passwd root # o: passwd operador- Si la causa va ser un canvi a PAM (
/etc/pam.d/), restaura la còpia:cp /etc/pam.d/common-auth.bak-<data> /etc/pam.d/common-auth- Sortida neta — no facis servir
reboot, no hi ha systemd:sync exec /sbin/init
CAS 3 — Indicador
(initramfs)Sol venir d'un canvi a
crypttab, LVM o discos sense regenerar l'initramfs.
- Comprova si el nucli veu el disc:
cat /proc/partitions
- No apareix el disc → problema de maquinari o de controlador. Escala; comprova la configuració d'emmagatzematge de la VM.
- Apareix → continua.
- Comprova si hi són les eines:
which cryptsetup lvm
- Sense sortida → falta a l'initramfs. Ves al pas 4.
- Intenta muntar a mà per confirmar que les dades estan bé:
lvm vgchange -ay mkdir /arrel && mount -o ro /dev/mapper/<volum> /arrel && ls /arrel- Recuperació ràpida: reinicia, i al menú de GRUB entra a Advanced options for Ubuntu i tria el nucli anterior. Si arrenca:
sudo update-initramfs -u -k all sudo lsinitramfs /boot/initrd.img-$(uname -r) | grep -c sbin/cryptsetup # ha de donar 1- Si el nucli anterior tampoc no arrenca: ves al Cas 4 (chroot) i executa-hi les ordres del pas 4.
CAS 4 — No hi ha GRUB, o res del que hi ha abans no funciona: chroot de rescat
Procediment universal. Requereix l'ISO d'Ubuntu 24.04 muntat a la VM i arrencar en mode Try Ubuntu.
- Identifica les particions:
lsblk -fReferència desrv-tramontana:sda1= ESP (FAT32),sda2=/boot,sda3= arrel.- Munta, en aquest ordre:
⚠️sudo mount /dev/sda3 /mnt sudo mount /dev/sda2 /mnt/boot sudo mount /dev/sda1 /mnt/boot/efi for d in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount --bind "$d" "/mnt$d" doneefivarsno és opcional. Sense ell,grub-installfalla a UEFI amb un error poc clar.- Entra:
sudo chroot /mnt /bin/bash- Repara el que correspongui:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck update-grub update-initramfs -u -k all efibootmgr -v | grep -i ubuntu # ha d aparèixer l entrada- Sortida neta, desmuntant en ordre invers:
exit for d in /run /sys/firmware/efi/efivars /sys /proc /dev/pts /dev; do sudo umount "/mnt$d" done sudo umount /mnt/boot/efi /mnt/boot /mnt sudo reboot
CAS 5 — Arrenca, però triga molt més del normal
No és una emergència. Referència normal: ~12 segons.
systemd-analyze→ separa nucli d'espai d'usuari.systemd-analyze critical-chain→ aquesta és la que importa, noblame: una unitat lenta que arrenca en paral·lel no endarrereix el total.journalctl -b -u <unitat>→ la causa concreta.- Corregeix amb un drop-in a
/etc/systemd/system/<unitat>.d/override.conf, mai editant la unitat original. Si substitueixes unExecStart, recorda la líniaExecStart=buida abans.- Reinicia i torna a mesurar. Anota el nou temps a la línia base.
REGLES QUE EVITEN ELS QUATRE PRIMERS CASOS
Abans de… Fes sempre Reiniciar després de tocar fstabmount -ai comprovar que no dona errorReiniciar després de tocar crypttab, LVM o discosupdate-initramfs -u -k alli verificar amblsinitramfs | grep cryptsetupTocar PAM o sshd_configSegona sessió oberta; validar amb sshd -t;reload, norestartQualsevol canvi de configuració Còpia .bak-$(date +%F)idiff -udesprésQualsevol mòdul delicat Instantània de la VM, numerada Mai:
GRUB_TIMEOUT=0,GRUB_TIMEOUT_STYLE=hidden, esborrar nuclis a mà, ni muntatges sensenofailllevat de l'arrel i/boot.Si res no funciona. No improvisis més de 30 minuts. Reconstrueix: l'RTO acordat és de 8 hores, el manual de reconstrucció és en aquest mateix document, i les dades són a
resticamb restauració provada. Avisa Operacions abans de començar.
Conclusió
Ja no arrenques un servidor: saps què passa quan ho fas. Coneixes la cadena completa —microprogramari UEFI, l'ESP i efibootmgr, GRUB amb les seves fonts reals de configuració, l'initramfs i el cercle viciós que resol, el nucli i el seu pas de control a PID 1, i systemd activant default.target— i, sobretot, saps fer servir aquella cadena com a eina de diagnòstic: la primera pregunta davant d'un servidor que no arrenca és sempre fins on va arribar. Has intervingut al menú de GRUB, has distingit rescue d'emergency, has arrencat amb una shell com a PID 1 i has entès per què l'arrel està en només lectura. Has reparat un fstab trencat —l'escenari que 05-04 va deixar anunciat—, has recuperat una contrasenya de root en dos minuts (i amb això has vist per què l'accés físic quedava fora del model d'amenaces de 06-06), i has reinstal·lat GRUB des d'un mitjà de rescat amb el chroot complet, inclòs el --bind d'efivars que fa fracassar la meitat dels intents. El manual d'operació té ara un arbre de decisió que pot seguir algú que no siguis tu, que és la definició d'un procediment útil.
I pel camí has fet servir chroot per entrar en un sistema de fitxers aliè i executar-hi programes com si fos l'arrel. Recorda-ho: és la primitiva sobre la qual es construeix tot el que veuràs a 07-05, quan descobreixis que un contenidor no és una màquina petita.
Saps mirar l'arrencada, però encara no saps mirar dins d'un procés en marxa. Al Mòdul 5 vas aprendre a mesurar amb el mètode USE: vmstat, iostat, free, sar et diuen que la CPU està al 80 %, que el disc té latència alta o que la memòria s'esgota. Això respon a quant, però no a què. Quan revisio_salut.sh comenci a retornar 1 perquè l'aplicació triga 400 ms a respondre en lloc de 40, i els comptadors diguin que la CPU està ociosa, el disc tranquil i la memòria de sobres, necessitaràs una altra classe d'eines. A la lliçó 07-02: Diagnòstic Avançat aprendràs a preguntar al sistema què està fent exactament un procés: strace per veure les seves crides al sistema una per una —tancant el cercle amb les capes del Mòdul 1—, perf per perfilar on consumeix cicles de debò i llegir un gràfic de flama, i eBPF amb bpftrace i les eines de bpfcc-tools per instrumentar el nucli en producció sense el cost prohibitiu d'strace. I et trobaràs de cara amb una conseqüència de la teva pròpia feina: el kernel.yama.ptrace_scope = 1 que vas aplicar a 06-06 t'impedirà adjuntar-te als teus propis processos, i entendre per què això està bé és part de la lliçó.
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
