L'alternativa a RAID: mergerFS + SnapRAID

Aquest post ve per solventar un problema que personalment m’he trobat (i potser tu també), que és gestionar la redundància de dades en discos diferents.

Fa poc vaig fer home server amb espai de fins a 6 discos HDD i 2 SSD. En els 2 SSD tenia clar que hi instal·laria el sistema operatiu en RAID 1, però en la resta de discos tenia un problema: volia utilitzar-los conjuntament com si fossin un de sol, però tenen diferents mides i volia aprofitar-les al màxim.

I tot navegant i cercant vaig topar amb la solució que he triat per aquest post: SnapRAID i mergerFS, que ofereixen un sol punt de muntatge per un array de discos i paritat per aquest array.

En aquest post t’explicaré breument les funcions d’aquests programes i com instal·lar-los, configurar-los i gestionar-los perquè tu també ho puguis fer al teu entorn.

SnapRAID és un programa que ofereix paritat a un array de discos. L’ús que se li pot donar és semblant a un RAID 5 o 6, ja que ofereix paritat per l’array de discos, però té dues diferències importants:

  • La paritat no es calcula en temps real, s’ha d’executar una comanda. Això pot no ser útil per determinats casos d’ús, com en entorns crítics.

  • Permet fer un array de discos de diferents mides, tenint com a requisit que el disc més gran ha de ser el de paritat.

A més, la paritat la calcula a nivell de fitxers, pel que podem utilitzar discos formatats en diferents sistemes de fitxers dins el mateix array.

mergerFS és un sistema de fitxers en espai d’usuari (FUSE) dissenyat per combinar diferents volums en un sol punt de muntatge.

Primer de tot instal·larem els paquets que necessitem, que només són dos. Si tenim debian, farem:

bash

$ sudo apt install snapraid mergerfs

En el meu cas, ho faré amb una màquina virtual amb 5 discos: 3 de dades per SnapRAID, un de paritat i un de hot-spare (si falla un disc dels que estem utilitzant, podrà entrar aquest en joc per substituir-lo).

Primer muntarem els discos al sistema, afegint el següent a l’arxiu /etc/fstab:

fstab

UUID="fc562508-74dd-4847-ba11-b309e78303fd"     /mnt/hdd1       ext4     defaults        0       2
UUID="a90a9cef-7b63-4ec1-85a4-049bf508294d"     /mnt/hdd2       ext4     defaults        0       2
UUID="56af6e8a-5361-487a-a61f-ff5e7b0a0b24"     /mnt/hdd3       ext4     defaults        0       2
UUID="b3b119d5-1aa2-474d-9cbe-f41ec0033d14"     /mnt/pdisk      ext4     defaults        0       2

IMPORTANT: El disc de paritat ha de ser el més gran dels discos, sinó no podrà funcionar correctament.

I ara afegirem a /etc/fstab la línia de mergerfs per muntar aquests directoris en un de sol:

fstab

/mnt/hdd*     /home   fuse.mergerfs   defaults,allow_other,moveonenospc=true,minfreespace=5G,fsname=storage  0       0

Amb això muntarem primer els discos a /mnt/hdd1, hdd2 i hdd3, i el de paritat a /mnt/pdisk, i desprès amb mergerFS muntarem tots els discos /mnt/hdd a /home.

Ara configurarem SnapRAID per tenir la paritat.

Crearem un arxiu /etc/snapraid.conf amb el següent:

snapraid.conf

parity  /mnt/pdisk/paritat.parity

content /mnt/hdd1/snapraid.content
content /mnt/hdd2/snapraid.content
content /mnt/hdd3/snapraid.content

data d1 /mnt/hdd1
data d2 /mnt/hdd2
data d3 /mnt/hdd3

On parity serà el disc de paritat, content són arxius que guardaran les rutes dels arxius protegits per SnapRAID, i data seran els volums que guardin les dades.

Normalment es recomana tenir almenys un arxiu de contingut més que discos de paritat, però tampoc fa mal tenir-ne més.

Ara farem snapraid sync per actualitzar el contingut dels discos. La sortida del programa hauria de ser com aquesta:

I podem veure que, a més dels arxius que haguem creat, s’han creat arxius d’SnapRAID (contingut i paritat).

Ara si tinguéssim algun problema, podriem recuperar les dades amb snapraid fix.

Per verificar que el nostre setup amb SnapRAID i mergerFS funciona correctament farem el següent:

Crearem arxius buits a un directori dins el sistema de fitxers creat amb mergerFS:

bash

$ for i in ($seq 1 100); do
    touch $i
done

Verificarem que s’ha creat:

Sincronitzarem els arxius amb SnapRAID:

bash

$ sudo snapraid sync

Verificarem quin disc té aquest contingut:

Desmuntem el disc i verifiquem que ja no tenim els arxius:

Com podem veure, no tinc ni el directori home de l’usuari (ja que també estava dins el disc hdd2).

Muntarem el disc buit que tenim (el que estava en spare) i li restaurarem les dades restants amb snapraid:

Restaurem les dades amb la comanda snapraid -d NOMDISC -l log.fix fix:

(Retornarà una sortida com aquesta, on al final, si tot va bé, ens dirà que no hi ha hagut errors)

I verifiquem que tornem a tenir els arxius.

A més, veiem que l’espai del directori creat amb mergerfs (/home en aquest cas) ha augmentat, ja que el nou disc és més gran:

Amb el disc original és:

Ara hauriem de canviar l’entrada de /etc/fstab amb l’UUID del nou disc i ja està.

Abans d’executar snapraid fix, podem fer snapraid fix -n per simular la restauració.

Si volem revisar l’estat de l’array, podem fer-ho amb snapraid status.

A més, si volem automatitzar el procès amb cron, hi ha scripts a GitHub per fer-ho enviant correus amb la sortida, l’estat,…

Com hem pogut veure, és una configuració fàcil de fer i de mantenir, que ofereix flexibilitat tan a l’hora de tenir diferents sistemes d’arxius com en la mida dels discos utilitzats.

I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!