OpenWRT: ext4 e RAID

Circa un mese fa avevo parlato del mio setup sul GoflexNet con OpenWRT. Avevo scelto di usare XFS influenzato da una guida trovata online, ma poi avevo avuto delle titubanze al riguardo. Allora, aprofittando del ponte lungo, ho deciso di fare un cambio di filesystem e passare ad Ext4.

Il procedimento è abbastanza semplice, ma può diventare lungo se volete conservare i file, poiché non esiste un modo (affidabile) per passare da XFS a Ext4.

Nel mio caso ci ho impiegato almeno una dozzina di ore, avendo spostato circa 650GB tra una partizione e l’altra del mio RAID.

Lo spostamento dei file può essere effettuato tramite SSH. È una buona idea usare screen, in modo da lasciare lavorare tranquillamente il vostro dispositivo senza tenere aperta una connessione SSH attiva.

La creazione del filesystem può essere effettuata direttamente su OpenWRT, previa installazione del pacchetto e2fsprogs. A questo punto basta un classico mkfs.ext4:

mkfs.ext4 -L etichetta /dev/mio_dispositivo

Sebbene opzionale, consiglio di mettere sempre un’etichetta, specialmente quando avete più partizioni.

Ext4 ha il vantaggio di essere supportato molto meglio da OpenWRT. In primo luogo non serve più uno script per montare i filesystem, ma il tutto è controllato tramite UCI. L’unica cosa da fare è inserire i dettagli dei vostri dischi in /etc/config/fstab. Se non avete nulla da perdere in quel file, lo potete generare automaticamente (ciò causerà una sua completa riscrittura):

block detect > /etc/config/fstab

Rispetto al file creato in automatico, ho preferito modificare, oltre ai vari mount point, la voce check_fs abilitandola e aggiungere su ogni partizione ext4:

option  options 'rw,noatime'

in modo da disabilitare la scrittura dell’ora cui si accede ad ogni file.

Il problema del mount e unmount è sistemato, però rimane ancora quello del riconoscimento del RAID, per cui serve uno script apposito.

L’uso dell’ext4 però ci avvantaggia anche in questo: infatti, anziché dover specificare manualmente le partizioni che compongono il RAID, possiamo fare una scansione generale di tutti quelli presenti. Questa genererà i block device per montare le partizioni, in stile /dev/mdN. Il problema con XFS era che N è un numero arbitrario. Con ext4 non lo è più, perché OpenWRT può usare gli UUID con questo filesystem, ed è pure la scelta predefinita in block detect.

Lo script per far caricare i RAID va piazzato in /etc/init.d/raid (il nome può anche essere cambiato) e questo è il suo contenuto:

#!/bin/sh /etc/rc.common
# Load RAID volumes

START=39

start() {
	mdadm --assemble --scan
}

Dopo la creazione, va abilitato: /etc/init.d/raid enable. Su start ho messo 39 perché, seppur considerato deprecato, il file di init di fstab, che monta le partizioni, è ancora su start 40. In questo modo quando viene chiamato le partizioni sono già state riconosciute.

XFS, secondo l’articolo che avevo letto, doveva avere prestazioni migliori di Ext4, così ho fatto un test veloce.

La macchina con OpenWRT è un Seagate GoFlex Net, con dischi WD Blue da 5400RPM, collegati con SATA 2. I test con DD sono stati effettuati con il comando time, che misurava sia dd, che il sync finale. I test in FTP sono stati fatti con wget in lettura e ftp in scrittura. Il Goflex e il computer erano collegati in gigabit ethernet tramite il mio TP-Link TD-W8970. In lettura ho usato sempre file di 3,8GiB circa, per la scrittura un file di 1GiB.

Partizione Lettura Scrittura
DD
Raid 0 75,82 MiB/s 63,26 MiB/s
Raid 1 67,71 MiB/s 57,12 MiB/s
FTP
Raid 0 68,6 MiB/s media
70,2 MiB/s picco
39,67 MiB/s
Raid 1 62,4 MiB/s media
64,4 MiB/s picco
32,55 MiB/s

Con Nemo (il file manager di Cinnamon) e lo stesso computer i risultati (istantanei) in scrittura di FTP sono stati leggermente migliori con il RAID 0, abbastanza migliori con il RAID 1 (sui 38 MiB/s), ma non mi ha dato dei risultati mediati con l’inizio del processo, quindi non li ho considerati validi per il test.

I risultati con DD sono in linea con quelli avuti precedentemente. Non li avevo salvati, quindi non posso fare un confronto preciso.

Quelli di FTP che avevo scritto probabilmente erano dei picchi. In questo caso sono stati minori, sia in lettura, che in scrittura, ma non so di preciso quali siano i motivi, visto che con DD comunque ho avuto risultati coerenti.

Una cosa cui ho pensato è che i risultati potrebbero essere stati un po’ abbassati dal basso tempo di spin down dei dischi WD. Ho notato che questo influisce per esempio anche nel tempo di ls: se ne eseguo due di seguito, anche su due directory diverse (per escludere influenze da parte della cache), il primo è sempre molto più lento, mentre il secondo è istantaneo.

Per il momento sono abbastanza soddisfatto: perdere 2 MiB/s in operazioni sequenziali non mi importa molto, mi interessa di più avere un supporto migliore da parte del sistema e non avere l’incubo di un fsck di XFS. Mi turba un po’ la velocità di scrittura di FTP, ma casomai più avanti farò degli ulteriori test, anche se tutto sommato è comunque leggermente maggiore di quella di USB 2.0.

21 commenti