Alla ricerca di un computer adatto a virtualizzare i servizi che uso mi sono imbattuto sul Fujitsu Futro S920, un thin client apprezzato soprattutto per progetti con pfSense o OPNSense per via della sua espandibilità e il basso consumo energetico.

Ho provato quindi a utilizzarlo come Homelab Server con Proxmox Virtual Environment, ZFS e una strategia di backup su cloud.

Specifiche e upgrade

Il Futro S920 nella sua principale configurazione ha un processore AMD GX-415GA con 4 core e 4 threads, supporta fino a 16 GB di RAM e ha una porta PCI Express che con l’ausilio di un riser permette di espanderlo ad esempio con una scheda di rete aggiuntiva.

Il tutto per un costo di circa 40/50 euro su Ebay.

Il mio modello è arrivato con un disco mSATA da 16GB che ho upgradato con uno da 128GB preso su Aliexpress per circa 12 euro, 4GB di RAM che ho upgradato a 16.

Per il mio Homelab Server volevo uno storage SSD in mirror da realizzare con ZFS, il Futro ha una sola porta SATA molto scomoda montata sotto al dissipatore, ha però uno slot di espansione mini PCI Express che ho sfruttato aggiungendo una scheda con due porte SATA come questa.

E’ possibile alimentare i due dischi SATA utilizzando la porta 4pin floppy drive e un cavo a due porte SATA come questo:

Cavo 4pin floppy a due porte SATA

Il risultato finale è il seguente:

Futro S920 Homelab setup

NIC a 2.5Gb/s

Dopo aver fatto un upgrade al mio router per sfruttare a pieno la mia FTTH 2.5Gb/s ho deciso di effettuare un upgrade alla scheda di rete del mio Futro.

Ho acquistato questa scheda di rete basata su controller Intel I225-V e per connetterla ho usato un riser PCIe x1 preso da Aliexpress, è preferibile sia flessibile così da non rischiare di non riuscire a chiudere il case.

Futro NIC upgrade

Effettuati i primi test però ho iniziato a notare che le performance non sembravano delle migliori, negli speedtest riuscivo a raggiungere solo 1.7Gb/s quando dai test fatti dal mio router il massimo era 2.2Gb/s.

      Server: TIM SpA - Ancona (id: 54071)
         ISP: Telecom Italia
Idle Latency:     1.73 ms   (jitter: 0.39ms, low: 1.69ms, high: 2.46ms)
    Download:  1700.13 Mbps (data used: 959.7 MB)                                                   
                  5.49 ms   (jitter: 1.05ms, low: 2.08ms, high: 11.39ms)
      Upload:  1003.23 Mbps (data used: 700.9 MB)                                                   
                  7.20 ms   (jitter: 0.49ms, low: 5.17ms, high: 8.53ms)
 Packet Loss:     0.0%

Effettuando delle ricerche e arrivando ad un post sul forum ServeTheHome sembra che lo slot PCIe sul Futro sia impostato alla velocità Gen1 di default.

E’ possibile confermare questa cosa usando il comando lspci -vvv e controllare LnkSta sulla scheda di rete:

LnkSta: Speed 2.5GT/s (downgraded), Width x1

Fortunatamente è possibile impostare sul BIOS la Gen2 sulla PCIe, per farlo è necessario utilizzare il tool Editcmos.exe eseguendolo da FreeDOS.

FreeDOS è un sistema operativo compatibile DOS che ci permetterà di fare l’upgrade del nostro BIOS ed eseguire Editcmos.exe anche se non abbiamo un sistema operativo Windows.

Prepariamo un’unità USB scaricando l’immagine FullUSB e flashandola con dd

dd if=FD13FULL.img of=/dev/sdb bs=4M

Al termine dell’operazione copiamo l’aggiornamento del BIOS reperibile dal download center di Fujitsu e il tool Editcmos.exe nella root di FreeDOS.

Effettuiamo il boot dell’ambiente DOS e dopo aver effettuato l’aggiornamento del BIOS diamo questo comando per abilitare la velocità Gen2 sulla PCIe

> EditCMOS.exe SetID:0x01B7=0x0151

Torniamo su Proxmox e verifichiamo

LnkSta: Speed 5GT/s, Width x1

Dopo questo comando lo speedtest arriva al massimo delle performance

   Speedtest by Ookla

      Server: Vodafone IT - Milan (id: 4302)
         ISP: Telecom Italia
Idle Latency:    11.34 ms   (jitter: 0.81ms, low: 10.90ms, high: 12.19ms)
    Download:  2156.85 Mbps (data used: 2.4 GB)                                                   
                 37.78 ms   (jitter: 33.07ms, low: 9.85ms, high: 335.34ms)
      Upload:  1029.52 Mbps (data used: 998.2 MB)                                                   
                 23.81 ms   (jitter: 1.74ms, low: 10.82ms, high: 36.42ms)
 Packet Loss:     0.0%

Proxmox Virtual Environment

Ho scelto di utilizzare un hypervisor come PVE perchè volevo utilizzare i container LXC e per il supporto a ZFS.

Installato Proxmox il primo passo da fare se non si vuole acquistare una licenza di supporto è quella di disabilitare i repository enteriprise e abilitare quelli no-subscription.

L’unica differenza è che quelli enterprise sono più adatti ad ambienti di produzione perchè sono più testati.

Per farlo basta recarsi nel proprio nodo > Updates > Repositories

Repositories

Rimanendo nel nodo ho quindi crearo un poll ZFS in mirror andando su Disks > ZFS, la compressione permette di risparmiare spazio su disco a discapito di un leggero aumento di carico sulla CPU

Poll ZFS

Il mio server attualmente ospita 3 container LXC: PiHole, HomeAssistant e Grocy e le performance sembrano buone.

Performance

Backup su cloud

Impostati su PVE i classici backup dei container sullo storage interno, in questo caso due dischi in mirror con ZFS volevo avere anche una copia dei backup su cloud in caso di disaster recovery.

Ho utilizzato rclone, un client che permette di sincronizzare file con più di 70 storage providers tra cui Google Drive, OneDrive e Proton Drive (il mio caso).

Tramite la shell di PVE ho installato rclone

curl https://rclone.org/install.sh | bash

e configurato il mio remote

rclone config

Proxmox permette di avviare uno script alla fine dei processi di backup passando come parametro job-end allo script alla fine del processo.

Ho quindi preparato questo script che sincronizza la cartella dei backup con il mio remote sul cloud al termine della creazione dei backup.

#!/bin/sh

write_msg()
{
  echo $(date +"20%y-%m-%d %H:%M:%S") $1
}

duration()
{
DURATION=$2
HOUR=$((DURATION/3600))
HOURINSEC=$((HOUR*3600))
DURATION=$((DURATION-HOURINSEC))
MINUTE=$(((DURATION/60)))
SECOND=$((DURATION%60))
write_msg "$1 finished took $HOUR hours, $MINUTE minutes, $SECOND seconds"
}

if [ $1 = "job-end" ]
then

START=$(date +%s)

write_msg "Starting rclone sync"
CMD="rclone sync --progress --stats-one-line --stats=30s --config /root/.config/rclone/rclone.conf /Storage/VMBACKUPS/ ProtonDrive:/Homelab/PVE"
write_msg "using command: $CMD"
$CMD
END=$(date +%s)
duration  "rclone" $((END-START))

fi

exit 0

/Storage/VMBACKUPS/ è la directory dei miei backups su PVE, ProtonDrive è il nome del mio remote su rclone e /Homelab/PVE è la directory in cui voglio salvare i miei backup sul cloud.

Ho salvato lo script con il nome di rclone_backup.sh nella mia root e gli ho dato i permessi di esecuzione

chmod +x rclone_backup.sh

per avviarlo al termine dei backup è necessario modificare il file /etc/vzdump.conf togliendo il commento dalla voce script e inserendo il percorso

script:/root/rclone_backup.sh

Conclusioni

Il Futro S920 è un thin client interessante come homelab server senza troppe pretese, il vero collo di bottiglia sono però gli 8GB di RAM che con PVE e ZFS possono essere pochini.

Per ora soddisfa le mie esigenze, in futuro sarebbe interessante acquistarne un altro da mettere in cluster o chissà, magari altri due così da sperimentare un cluster in HA.