I miei progetti si sa quando iniziano ma non si sa mai quando finiscono…
È stato così anche per il GoFlexNet, di cui avevo parlato a inizio gennaio, ma finalmente sono riuscito a comprare i dischi e a dargli una sistemata.
Hardware
Benché inizialmente li avessi esclusi, alla fine ho scelto dei dischi da 3.5”: i WD Blue 5400 RPM.
La scelta dei Blue è dovuta al fatto che Western Digital ha deciso di unificare i Green e i Blue, creando i due profili Blue 7200RPM e Blue 5400RPM.
Per la scelta dell’alimentazione, anziché stagnare la linea dei 12V sul Goflex, ho comprato delle prolunghe sata e un alimentatore da 12V. Ho tagliato la linea 12V dalle prolunghe e l’ho attaccata direttamente l’alimentatore. È una fortuna che la tecnologia LED si sia diffusa parecchio nell’illuminazione, fino a qualche anno fa non si trovavano mica alimentatori da 12V e 5A a meno di 10€.
A questo punto rimaneva ancora il problema della protezione meccanica dei dischi, ovvero una scatola dove mettere il tutto. Ho recuperato lo chassis di un sistema di antifurto dismesso, ed ecco il risultato:
Mi pare una buona soluzione: i dischi sono abbastanza protetti e il contenitore è ignifugo e ci sono delle aperture che permettono il raffreddamento. Sarebbe interessante monitorare la temperatura, ma purtroppo OpenWRT nella sua essenzialità non ha il tool hddtemp.
Formattazione e filesystem
Come partizionamento ho deciso di fare 1,5TiB in RAID 1, 2GB di swap per ogni disco e il resto un RAID 0.
La creazione di un RAID è abbastanza semplice, ma vi rimando alle guide ufficiali.
Personalmente l’ho fatto tramite un PC fisso, ma è possibile farlo anche tramite OpenWRT: l’utilty mdadm
è già presente in OpenWRT, mancano però i moduli del kernel per il raid. Io ho usato RAID 0 e RAID 1, quindi ho insallato i pacchetti kmod-md-raid0
e kmod-md-raid1
.
Affidandomi alla guida per Pogoplug v4 che avevo già linkato nel post precedente, ho scelto di usare il file system XFS. A cose fatte un po’ mi pento perché, seppur supportato a livello di kernel, a livello di configurazione in OpenWRT lo è meno: viene ignorato dalla specie di fstab
di OpenWRT, non viene montato hotplug e non si possono usare gli UUID. Ext4 invece avrebbe tutte queste possibilità.
Stando così le cose, ho dovuto creare uno script che monti le partizioni XFS. Non essendo in fstab non si possono modificare le opzioni per l’fsck
, ma secondo le man pages per XFS il controllo viene fatto ogni volta che si monta il disco, precisamente:
fsck.xfs - do nothing, successfully
Questa è un’altra delle cose che mi spaventano di XFS: il recovery potrebbe bloccare una macchina come il GoflexNet per la scarsa RAM, ragione per cui ho impostato lo script che monta i volumi solo dopo che ho aggiunto lo swap, sperando serva comunque a qualcosa. Dover staccare i dischi per ripararli sarebbe una seccatura enorme per me.
Vi allego una copia del mio script. Vi servirà anche se usate Ext, perlomeno per l’assemblaggio dei raid, in quanto mdadm, a differenza di quanto avviene distribuzioni come Debian, non offre un servizio su OpenWRT.
Lo script va messo in /etc/init.d/
e dopo va abilitato dalle impostazioni di avvio di LuCI o semplicemente passandogli enable
come azione.
#!/bin/sh /etc/rc.common # Load my RAIDs START=45 start() { mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 mdadm --assemble /dev/md1 /dev/sda3 /dev/sdb3 mount -o noatime /dev/md0 /mnt/raid1 mount -o noatime /dev/md1 /mnt/raid0 }
Come si può vedere come livello di start ho messo 45, in modo che sia dopo fstab
, che è 40.
Un’altra nota se usate Ext: se usate gli UUID probabilmente potete fare a meno di passare in quell’orrenda maniera i dati sui dischi e chiamare una sola volta mdadm con mdadm --assemble --scan
, ma non ho fatto alcun test, dunque non posso dirlo con certezza.
In ogni caso dovrete installare i pacchetti contenenti i moduli per il filesystem da voi scelto.
Ottimizzazioni del networking
Prima di installare i vari servizi, ho applicato alcune configurazioni che dovrebbero migliorare le prestazioni di TCP, prese sempre dalla guida di prima. Questo al fine di concentrarsi prima qui, poi eventualmente su miglioramenti dei singoli servizi. L’unica cosa richiesta è aggiungere le seguenti righe a /etc/sysctl.conf
:
net.core.rmem_max = 2801664 net.core.wmem_max = 2097152 net.ipv4.tcp_rmem = 4096 87380 2801664 net.ipv4.tcp_wmem = 4096 16384 2097152 net.ipv4.tcp_timestamps = 0 net.core.optmem_max = 65535 net.core.netdev_max_backlog = 5000
Onde evitare imprecisioni, vi rimando alla guida per i particolari.
Le altre modifiche della guida, che è scritta per Arch, in OpenWRT sono molto più complicate a causa dell’assenza di udev, e nel mio caso non miglioravano in modo sensibile le prestazioni.
Utenti
In generale non è consigliabile di lasciare libero accesso a tutti all’intero NAS, soprattutto vista la gran verità di dispositivi che oggigiorno si connettono a una rete, perlomeno non in scrittura.
Sia Samba che FTP permettono la configurazione sia tramite utenti di sistema, che tramite utenti virtuali.
Io ho adottato la prima: pur non piacendomi completamente, devo dire che è molto comoda, in quanto i demoni che ho usato assumono i privilegi di quell’utente, quindi la sicurezza delle condivisioni viene direttamente dai permessi UNIX delle directory. Inoltre OpenWRT per impostazione predefinita non assegna una shell valida agli utenti, dunque non funzionano né SSH, né Luci.
Se volete scegliere questa via, dovrete installare alcuni pacchetti, quanto meno shadow-useradd
.
L’alternativa degli utenti virtuali invece richiederebbe una configurazione più dettagliata a livello di applicazione e può essere più tediosa.
Samba
Per l’accesso ai file ho scelto due grandi classici: Samba e FTP.
Smb è un must, in quanto è supportato dalla maggior parte dei sistemi esistenti.
Su OpenWRT Chaos Calmer è fornito dal pacchetto samba36-server
, ma vi consiglio di installare anche il pacchetto luci-app-samba
, per configurarlo tramite LuCI.
Una volta installati bisogna modifcare il template della configurazione di Samba, sulla pagina apposita:
# Righe da mofificare socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 # Righe da aggiungere aio read size = 0 aio write size = 0 oplocks = yes max xmit = 65535 strict allocate = Yes read raw = Yes write raw = Yes strict locking = No create mask = 0644
Servono per migliorare le prestazioni, tranne l’ultima, che serve a non dare il permesso di esecuzione ai file creati tramite Samba.
La configurazione delle condivisioni può avvenire direttamente tramite la GUI su LuCI, invece per la password degli utenti dovete eseguire da SSH il comando smbpasswd -a username
, dove lo username è di un utente del sistema. È abbastanza scomoda questa gestione, devo dire… Perlomeno potrebbero aggiungere anche la gestione degli utenti alla GUI.
Come prestazioni sono arrivato agli stessi valori della guida, pur avendo una CPU più potente: 26MB/s in scrittura e 42MB/s in lettura. Questi su un computer con Windows 10 collegato in gigabit ethernet, tramite il TD-W8970. Su Debian purtroppo il client smb è più scarso e sulla stessa macchina sono arrivato sui 30MiB/s in lettura, mi pare uguale velocità invece di scrittura.
Onestamente speravo meglio, perché ho comunque dei computer con cui vorrei fare dei backup sul NAS collegati in gigabit.
FTP
Anche FTP è molto interessante per i NAS.
Su Chaos Calmer c’è solo vsftpd come demone.
Io ho deciso di usarlo con gli utenti di sistema, dunque non ho dovuto modificare quasi nulla della configurazione, se non l’aggiunta di una linea a /etc/vsftpd.conf
:
chroot_local_user=YES
Serve per bloccare gli utenti nella loro home e impedire loro di esplorare tutto il sistema.
Personalmente ho deciso di mettere agli utenti che uso con FTP /mnt
come home. In alternativa per dare una serie di directory è necessario usare mount -o bind
, magari inserirlo in uno script al boot.
FTP è davvero potente come prestazioni: sono arrivato a 75MiB/s di lettura e 50MiB/s di scrittura, ovvero 600Mbps solo di dati. Veramente notevole.
A questo punto il collo di bottiglia è costituito dall’archiviazione, visto che più o meno anche con DD le velocità erano quelle.
DLNA
Oltre alla funzione di condivisione di file, un ruolo veramente interessante per il Goflex è quello di server DLNA per la condivisione dei file multimediali anche con Smart TV e dispositivi simili, o comunque senza passare per SMB o FTP.
I pacchetti da installare sono minidlna
e luci-app-minidlna
.
L’unica configurazione da fare è quella dell’interfaccia, che deve essere una fisica e non un gruppo: se non la impostate il demone non parte, senza scrivere nulla nei log, invece se mettete ad esempio @lan
come avevo fatto io, il demone risponderà alle richieste, ma non manderà nulla in broadcast, e quindi non verrà visto dai dispositivi. Questo errore mi ha portato via diverse ore, anche perché non c’è scritto da nessuna parte!
Il Goflex, essendo più potente di un router, permette di fare l’indicizzazione direttamente, senza passare per un’altra macchina come suggerito nel wiki di OpenWRT. Tuttavia consiglio lo stesso di impostare come directory del database un percorso dei dischi esterni al posto di quello predefinito, che è in RAM e dunque viene eliminato ad ogni riavvio.
MiniDLNA può mandare in stream i file a dei dispositivi, senza però farne la transcodifica, ma comunque il GoflexNet non avrebbe la potenza richiesta.
Con la mia televisione (Sony Bravia di 5-6 anni) ho avuto un successo parziale: riproduce tranquillamente la musica in MP3, ma non i video, penso per incompatibilità di codec. Totem invece riproduce i video anche in H.265.
Mi pare curioso il fatto che MiniDLNA è impostato per mandare un Tux come icona della condivisione.
Adesso mancherebbero solo alcuni piccoli dettagli, come i LED bianchi, cui si può accedere tramite UCI oppure direttamente da /sys/devices/gpio-leds/leds/
.
Anche la temperatura sarebbe parecchio interessante da monitorare, magari più avanti potrei vedere di cross compilare hddtemp, ma per il momento mi riengo più che soddisfatto di quello che ho fatto 😊 .
3 commenti
Finalmente ci sono riuscito ho recuperato il tutto con la seriale e sono riuscito anche a configurare l'indirizzo statico.
Ho creato il raid1 e adesso sto copiando i file da un pc al nas tramite samba.
La velocità che rilevo però è mediamente di 7 o 8 Mb/s che arriva a 11 quando ci sono file di grosse dimensioni.
Considera che ho una rete FastEthernet però mi sembra un poco rispetto a quanto hai ottenuto tu.
Adesso farò qualche prova per vedere dove è il collo di bottiglia.
Grazie per tutto.
P.S. Hai provato ad istallare Transmission per gestitre i torrents?
Ciao, non ho installato nessun client Torrent, in particolare poi non sono un amante di Transmission…
Come test ti consiglio innanzitutto di fare un dd + sync, così innanzitutto vedi se c'è qualche problema anche in locale.
Poi ti consiglio di provare anche con FTP, purché tu non usi quello integrato di esplora risorse. Su Windows meglio se provi con FileZilla, su Linux invece vanno bene un po' tutti.
Vedevo che accennavia ai file grossi come velocità massima: dovresti sempre provare con file di grosse dimensioni, tipo 1GB o più, in modo che ci metta un po' di tempo e il trasferimento possa andare a regime.
Se puoi magari prova a fare il test con una rete gigabit, magari collegando direttamente il PC al NAS.
L'ultima volta avevo avuto anche io qualche calo di velocità, ma riavviando mi pare si fosse sistemato tutto.
La cosa bella di un apparecchio dedicato come il GoFlexNet è il ridotto consumo energetico, però il SoC è abbastanza vecchio, quindi le prestazioni talvolta sono ridotte…
Oggi ho fatto dei test e la velocità risultava alquanto limitata: meno di 2MB/s tramite FTP.
Collegandomi in SSH ho scoperto che c'era il processo di Samba che occupava più del 50% di CPU, dopo che l'ho stoppato la velocità è passata tra i 60 e i 75MB/s…