21
Mar 29 2016

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

  • Ciao,
    Complimenti x il lavoro, sarei tentato anche io di acquistare il giocattolino, anche xche si trova a 14 euro circa spedito.
    Volevo però togliermi dei dubbi visto che non sono esperto di linux: il tutto funzionerebbe anche in una lan con solo macchine windows?
    Avrei comunque a disposizione un portatile con Linux x le operazioni di configurazione
    Grazie

  • Ciao, grazie dei complimenti :-) .
    14€ in effetti sono proprio pochi, sarebbe quasi da prenderne un altro, anche se costa praticamente meno il Goflex dei cavetti per attaccarlo ai dischi da 3.5” :mrgreen: .

    Ti confermo che puoi usarlo anche con macchine solo Windows, in quanto con Samba viene visto come una normale condivisione Windows.
    Anche gli altri protocolli (FTP e UPnP) sono pienamente compatibili con le macchine Windows.
    Personalmente preferisco usare FTP, perché il protocollo SMB ha maggior overhead, quindi prestazioni inferiori, che però superano lo stesso USB 2.0, o lo eguagliano.

    L’installazione stessa può essere fatta completamente sotto Windows, come client SSH puoi usare PuTTY, come server TFTP va bene uno qualsiasi e di Netcat esiste anche la versione per Windows, che dovrebbe andare più che bene per l’installazione di OpenWRT.
    Dopo i filesystem li puoi creare direttamente da OpenWRT, usando al più gli strumenti da linea di comando.

    Una macchina Linux può essere utile nel momento in cui fosse necessario accedere ai dischi senza il NAS, se usi il filesystem Ext4. Se usi i dischi indipendentemente a dir la verità te la puoi cavare anche in quel caso con Windows, però per i RAID con Mdadm non penso ci siano i driver. Al massimo puoi sempre usare una live.

  • Grazie per la risposta rapida, non sono molto esperto di linux e quindi qualche dubbio mi rimane nel fare la procedura.
    Con il fatto che con Mdadm non esistano i driver cosa intendi ?
    Mdadm è l’utility di openwrt per la gestione del raid è corretto?
    Scusa se ne approfitto ma nella configurazione raid1 la capacità max dipende dal disco più piccolo, nel caso avessi 2 dischi differenti per la parte che eccede è possibile creare un altra partizione da usare separatamente senza raid?
    Buona notte

  • La non esistenza dei driver intendevo solo su Windows, su Linux mdadm è un tool standard da molti anni e sulle distribuzioni desktop è sempre presente, su quelle embedded solo quando serve.
    Su OpenWrt non ricordo se sia installato di default, al più lo puoi installare con il gestore di pacchetti opkg.

    Per la questione del raid, essendo software, è visto come una normale partizione, quindi la grandezza è arbitraria, basta che sia uguale, infatti io ho partizionato i dischi con due raid diversi, un raid 1 e un raid 0.
    Quindi puoi tranquillamente usare due dischi di dimensione diversa e fare il raid 1 grande come il più piccolo e mettere anche altre partizioni nell’altro.

    Il mio consiglio è anche di creare anche una partizione di swap. Non dovrebbe servire, infatti sul mio nas è sempre libera, però non si sa mai che non possa servire.

  • Ieri è arrivato il gioiellino: messo in rete e registrato su pogoplug ok, vedo i file sulla chiavetta inserita sull’usb sia sull’account pogoplug che in rete LAN. non riesco ad attivare SSH in sicurezza non mi appare la spunta ssh.
    Ho provato a disabilitare fire Wall su router ed abilitare porta 22 ma Nada.
    Qualche idea?
    Scusa se approfitto della disponibilità, grazie.

  • Ciao, purtroppo è un problema riscontrato anche da altri.

    Le opzioni sono o la seriale (anche se non hanno più commentato se si riesce a fare il login), oppure potresti provare a vedere con la console del browser se la spunta è presente ma nascosta (ho letto anche questo su internet).

    A me invece è arrivato il wattmetro e l’ho collegato al Goflexnet, sono curioso di vedere i risultati.

  • Grazie come sempre,
    la risposta su consolle alla richiesta è questa:
    cerpc_5_1.js:49 POST https://pogoplug.com/svc/api/json/featureCommand 500 (Internal Server Error

    sembra un errore del loro server?

  • Decisamente, ma la spunta per SSH allora non c’è neanche nascosta?

  • Ho provato anche con altri browser ma è sempre uguale.
    Per vedere se fosse nascosta in che modo dovrei cercarla?
    Ho scritto anche al supporto pogoplug ma mi ha risposto un rispondiTore invitandomi a consultare la FAQ e chiudendo il ticket, bel servizio!
    Seconde te è possib5fare un downgrade del firmware (trovandone uni + vecchio)?

  • Con la console del browser, facendo ispeziona dove dovrebbe esserci la scritta della spunta (vedi lo screenshot qui: https://www.pierovdfn.it/2016/01/01/seagate-goflex-net-e-openwrt/ ).

    Secondo me non è una questione di firmware, ma proprio di servizio.
    La richiesta POST che fallisce, cosa cerca di fare in particolare?

    Sarebbe interessante fare una specie di hack alla kolofonium, l’hack per la Fonera di tanti anni fa, che ti permetteva di abilitare SSH cambiando l’IP del router e i DNS, però immagino usino HTTPS, quindi è impossibile per il Goflex…

  • Ciao,

    ho seguito la tua guida per installare openwrt sul goflex net. Sono riuscito tramite collegamento seriale a fare l installazione.
    Ora ho openwrt funzinante con 2 dischi 2.5 collegati e samba funzionante.

    Ora vorrei creare il raid. ma non capisco bene cosa devo fare.
    Ho seguito i tuoi passi qui, ma dopo /etc/init.d/raid enable cosa bisogna fare? ed il script in /etc/init.d/raid esattamente a cosa serve?

    Grazie del aiuto!

  • Ciao, lo script serve per far caricare il raid, perché non viene automaticamente caricato al boot.

    Quando viene invocato, Linux crea il file device del RAID /dev/mdX, dove X è il numero che viene assegnato automaticamente.
    Questo file è analogo a /dev/sdxY, con x una lettera e Y un numero, che individua la partizione Y sul disco x.

    Oltre che creare il file speciale del dispositivo, viene anche mandato un evento che è stata trovata la nuova partizione.
    Quindi il sistema di OpenWRT si arrangia a montare la partizione, ammesso che sia presente nel file /etc/config/fstab e tu abbia lasciato l’automount abilitato.

    Per la creazione del RAID la guida ufficiale spiega veramente bene tutto il procedimento: https://raid.wiki.kernel.org/index.php/RAID_setup .
    In pratica devi formattare i due dischi e creare delle partizioni di tipo Linux RAID.
    Adesso non ricordo precisamente, mi pare che su OpenWRT sia presente il tool cfdisk, o che tu lo possa installare tramite opkg e da lì puoi procedere alla creazione.

    Dopo devi dare il comando in base al RAID che vuoi ottenere, per esempio per un RAID 1 usando le partizioni sda1 e sdb1 puoi fare così:

    mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1

    Così ottieni una partizione non formattata però, quindi tramite mkfs.ext4 devi creare la partizione e dato che ci sei buttarla dentro fstab, il tutto come scritto nella guida:

    mkfs.ext4 -L Nome_partizione /dev/md0
    block detect > /etc/config/fstab

    Quindi procedi alla creazione dello script di cui abbiamo già discusso, ma mi pare che per questo tu non abbia problemi.

  • Ciao Piero.

    Grazie mille, ci sono riuscito. il mio raid sta facendo il sync proprio in questo momento ;)

    Praticamente avevo installato il modulo mdadm, ma non sapevo di avere anche bisogno di kmod-md-mod e kmod-md-raid1.
    Quindi la creazione dell’array mi dava errore.

    Dopo l installazione di questi 2 moduli tutto è filato lisco!

    Praticamente con 15euro ora ho il mio primo Nas di casa con 500gb in mirror :) (ho usato due hd da 2.5 che avevo tolto a due portatili mettendo la ssd).

    Grazie ancora per le tue guide!
    Ciao

  • Ciao Piero,
    finalmente sono riuscito a creare il tutto: ho collegato 2 dischi da 3,5 creato il raid1 montato e lo vedo dai pc della rete.
    Purtroppo quando cerco di fare qualche operazione mi risponde: “accesso alla cartellla di destinazione negato”.
    sicuramente è un problema di configurazione utenti e permessi ma mi sono perso.
    In Luci c’è la possibilità di inserire Allowed user ma non so se è la via giusta.
    Grazie.

  • Ciao, immagino tu acceda tramite SAMBA, no?

    Il problema in caso è che il filesystem di Linux ha i permessi, quindi li devi impostare lì in base anche alla configurazione che hai dato a SAMBA.
    Per i guest mi pare l’account che deve poter eseguire operazioni è nobody, invece per gli utenti dovresti avere il rispettivo utente aggiunto al tuo sistema con adduser.

    In ogni caso per impostare i permessi devi ricordarti di dare, da root tramite SSH uno di questi comandi:

    chown nomeutente /cartella/condivisa
    chgrp nomegruppo /cartella/condivisa
    chmod 777 /cartella/condivisa

    Il primo se vuoi che una directory sia di un preciso utente, il secondo se vuoi che un gruppo di utenti possa scriverci, il terzo se invece vuoi che tutti gli utenti di sistema possano scriverci.
    Ricordati inoltre che in base alla politica da te scelta dovrai applicare anche la mask a SAMBA.

  • Ciao,
    si uso Samba da pc Windows, devo creare un utente per ogni pc che accederà oppure basta un utente per tutti ?
    Considera che il nas deve essere accessibile a tutti gli appartenenti alla rete lan quindi mi conviene inserire: chgrp nomegruppo /cartella/condivisa
    dove al posto di nomegruppo inserisco per esempio WORKGROUP e al posto di /cartella/condivisa devo mettere il nome che ho creato per il raid ?
    Scusa se abuso della tua pazienza ma manca proprio l’ultimo passo per concludere.
    grazie

  • Dunque, basta un utente per tutti e se vuoi può anche essere il guest.
    A quel punto ti conviene fare

    chown nomeutente /cartella/condivisa

    con /cartella/condivisa appunto il percorso del RAID.

    Solo per guest non dovrai mettere guest, ma dovrai mettere nobody, anche se ti sconsiglio di usare guest, perché sarebbe come dare accesso ai file a chiunque si connetta alla tua rete.

  • Ciao,
    alla fine ho fatto la c.. siccome il mio router non mi assegnava ip statico (non so perché si resettava sempre la mia configurazione) allora ho pensato bene di provare da Luci e in Network ho cambiato da dhcp a static ed ho inserito in ipv4 il mio indirizzo ip.
    Bene adesso il router gli assegna l’indirizzo che ho scelto ma in compenso non riesco più ad accedere ne con Luci ne con ssh.
    Sicuramente dovrò riesumare il collegamento seriale, ma poi cosa dovrò modificare?
    in quale file è presente la configurazione per la rete.
    Pensavo di avere concluso ma purtroppo sono ancora qui.
    grazie

  • Ciao, accedere in seriale è come accedere in SSH.
    Il file da modificare è /etc/config/network e devi usare l’editor vi…
    Se non lo hai mai usato ti consiglio di leggere una mini guida su internet.

    Comunque mal che vada puoi provare ad assegnare anche al computer un indirizzo IP statico diverso da quello del Goflexnet ma nella stessa rete, da lì dovresti riuscire a fare qualcosa. Senza riesumare il collegamento seriale puoi provare ad andare in fallback, ci sono tutte le informazioni sul wiki di OpenWRT…
    Magari qualcosa riesci a ottenere senza dover aprire.

  • Ciao, è da qualche mese che il sistema è in funzione con il raid e sono abbastanza soddisfatto.
    Volevo approfittare ancora della tua gentilezza e preparazione: con un sistema windows quando apro esplora risorse il disco in rete risulta con una x rossa, cliccandolo poi diventa verde e accessibile.
    Il mio problema è che vorrei accedervi in automatico con programmi tipo kodi o altri per leggere file mp3
    senza dover prima cliccare in esplora risorse.
    Esiste qualche settaggio che mi permetterebbe di fare ciò?
    Grazie

  • Ciao, sapresti descrivermi meglio il tuo problema?
    Purtroppo non sono solito usare Samba, quindi non so bene cosa tu intenda.
    Io solitamente uso FTP e lì ci mette un po’ al primo accesso perché ho impostato i dischi affinché vadano in sospensione, tuttavia dopo questo primo accesso il contenuto è subito disponibile…

Aggiungi un commento

Completa la form sottostante per aggiungere un commento

CAPTCHA
Scarica il CAPTCHA in wav.