Recuperant sistema FreeBSD 13 a la Raspberry Pi 4 per una corrupció de la partició d'arranc

Recuperant sistema FreeBSD 13 a la Raspberry Pi 4 per una corrupció de la partició d'arranc

En aquest xicotet article explique com he pogut solventar un problema que vaig tindre la setmana passada al meu servidor FreeBSD 13 en la Raspberry Pi 4.

Al servidor FreeBSD 13 de la Raspberry Pi 4 amb 8GB de RAM tinc uns quants projectes web amb Drupal corrent sobre bases de dades MariaDB i PHP 8.2. I per tal d'alliberar memòria tinc programat cada nit un reinici, i jo no sé perquè però entre el dijous i el divendres FreeBSD 13 no arrencava el servei SSH ni les webs.

Vaig connectar el cable HDMI a la Raspberry Pi 4 per a veure què passava i durant l'arranc el sistema em mostrava l'error WARNING: / was not properly dismounted i es quedava congelat.

Intentava trobar alguna alternativa des de l'arranc de U-BOOT, però no hi ha manera d'executar fsck per netejar el sistema de fitxer ni res:

Recuperant arranc MicroSD a la Raspberry Pi 4 amb FreeBSD 13

Vaig llevar la microSD de la Raspberry i la vaig muntar en un altre ordinador amb FreeBSD per tal d'analitzar la tarjeta (que apareix en el dispositiu /dev/da0) i vaig veure dues particions, una de 50M i una altra gran amb tots els directoris que penjen de l'arrel del sistema opeartiu (/):

# gpart show /dev/da0
=> 63 244481985 da0 MBR (117G)
63 1985 - free - (993K)
2048 102400 1 fat32lba [active] (50M)
104448 124626944 2 freebsd (59G)
124731392 119750656 - free - (57G)

Com que tinc automount al FreeBSD de l'ordinador, em va muntar aquestes dues parcions a /media/da0s1 i la segona més gran a /media/da0s2a:

Recuperant arranc MicroSD a la Raspberry Pi 4 amb FreeBSD 13

Si volem saber el tipus de sistema de fitxers de la partició, podem fer fstyp.

# fstyp /dev/da0s1
msdosfs

Doncs bé, com que pensava que el problema de corrupció del sistema de fitxers estaria en la partició gran on es trobaven totes les dades del sistema operatiu, les webs, les bases de dades, etc, vaig poder fer un fsck a la segona partició gran amb:

fsck -y /media/da0s2a

I es va fer ràpidament:

Recuperant arranc MicroSD a la Raspberry Pi 4 amb FreeBSD 13

EL PROBLEMA

Però a la primera partició /dev/da0s1, la de 50Mb, em donava error. Podia muntar-la i escriure curiosament, però no arrencava FreeBSD a la Raspberry i al fer fsck em mostrava el següent error:

# fsck -y /dev/da0s1
** /dev/da0s1 (NO WRITE)
** Phase 1 - Read FAT and checking connectivity
** Phase 2 - Checking Directories
** Phase 3 - Checking for Lost Files
92 files, 25 MiB free (6508 clusters)
MARK FILE SYSTEM CLEAN? no
.
***** FILE SYSTEM IS LEFT MARKED AS DIRTY *****

Per si no tenia ben muntada aquesta partició i no estava en mode escriptura, la vaig desmuntar (perquè l'havia muntat automàticament automount) i la vaig muntar manualment en mode escriptura i lectura (-o rw) per tal de poder escriure canvis i fer un fdisk:

mount -t msdosfs -o rw /dev/da0s1 /media/da0s1

Però no, seguia dient-me que el sistema de fitxers no estava net.

Després vaig fer una còpia de seguretat de la partició en una imatge:

dd if=/dev/da0s1 of=/home/joan/particio_da0s1.img bs=1M conv=sync status=progress

També es podria fer més fàcilment amb la utilitat safecopy:

safecopy /dev/da0s1 /home/joan/particio.img

I ara em vaig crear un disc virtual amb mdconfig:

mdconfig -f /home/joan/particio.img -u 0

I ara el vaig muntar en /media/md0 per tal d'intentar netejar-ho amb fsck i veure si el problema estava en les dades o en la pròpia MicroSD:

mount -t msdosfs /dev/md0 /media/md0

Però al fer el fsck seguia dient-me que no estava net. Aleshores, estava clar que el problema estava en les dades, no en la MicroSD.

LA SOLUCIÓ
Aleshores estava convençut de que anava a perdre els canvis des del dijous i hauria de recuperar el sistema agafant una altra MicroSD que tinc clonada com a còpia de seguretat completa i refer manualment els canvis. Però vaig pensar un truquet. Vaig pensar en clonar nomès la primera partició de 50Mb de la Raspberry Pi 4 del mes passat funcionant en la partició de 50Mb d'aquesta nova MicroSD que per algun motiu no arrencava.

Vaig agafar la MicroSD de desembre 2023 en l'ordinador amb FreeBSD i vaig clonar /dev/da0s1 així:

dd if=/dev/da0s1 of=/home/joan/particio_da0s1.img bs=1M conv=sync status=progress

Recuperant arranc MicroSD a la Raspberry Pi 4 amb FreeBSD 13

Ara vaig tornar a ficar la MicroSD amb el problema d'arranc i vaig cremar la imatge "particio_da0s1.img" en la partició /dev/da0s1 d'aquesta microSD:

dd if=/home/joan/particio_da0s1.img of=/dev/da0s1 bs=1M conv=sync status=progress

Recuperant arranc MicroSD a la Raspberry Pi 4 amb FreeBSD 13

I ara vaig tornar a ficar aquesta MicroSD a la Raspberry Pi 4 i ja va arrencar sense problemes, va agafar la IP i va alçar tots els serveis amb normalitat (SSH, MariaDB, Nginx, etc..).

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.

Utilitats

NAVEGACIÓ SENSE RATOLÍ

- Tab següent enllaç.
- Shift+Tab anterior enllaç.
- Enter activa l'enllaç.
- Alt+esquerra anar arrere.

CONTRAST DE COLORS

Accessibilitat - Color Negre
Accessibilitat - Color Groc
Accessibilitat - Color Verd

Accessibilitat - Color Blau
Accessibilitat - Color Crema
Accessibilitat - Color Blanc

 

PORTADES ALTERNATIVES