Piero V.

GoflexNet: si va avanti

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:

I dischi nel case...
La sistemazione finale

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