In questo articolo vedremo come installare un array di 4 dischi ssd sata III da 512 GB in configurazione RAID5 su Raspberry PI 3 modello B+. E’ una soluzione poco performante, ma economica sia come hardware che come consumi, in attesa di poter acquistare una vera docking station per i dischi sata, con controller raid ed ethernet. Il Raspberry unitamente ai dischi SSD inoltre, ci permettono di avere un sistema di archiviazione molto silenzioso da tenere in casa.
Premessa
Certamente l’ hardware del Raspberry non è la soluzione migliore per gestire un raid, i due limiti principali sono dovuti alla corrente disponibile per alimentare i dispositivi collegati e le 4 porte usb che appartengono ad un unico hub USB2.0 che limita la velocità di trasferimento a circa 10 MB/s Non sufficienti per vedere un film in 4k ma abbastanza per tenere i propri documenti, foto e video in uno spazio capiente ed assicurato contro i malfunzionamenti grazie al raid ed al controllo costante di smartd. Avendo a disposizione 4 porte usb possiamo utilizzare “solo” 4 dischi. Un raid 6 sarebbe certamente più sicuro, ma utilizzare 2 dischi su 4 per la parità non avrebbe senso, tanto varrebbe realizzare un raid 1 o un raid 10. Con il raid 5 invece possiamo usare 3 dischi su 4 per i dati. Il Raspberry non riesce ad alimentare 4 dispositivi, quindi i 4 cavi adattatori SATA3 USB con cui collegheremo i dischi devono essere dotati di alimentazione esterna. Anche l’alimentatore collegato alla porta micro USB del Raspberry deve essere in grado di fornire la corrente necessaria, quindi ne occorre uno almeno da 3A ( reali ) con un buon cavetto di collegamento ( corto e spesso ) in grado di trasportarli
Preparazione e controlli preliminari
Partiamo da una distribuzione raspbian perfettamente aggiornata
1 2 3 4 5 |
# apt install rpi-update # rpi-update # apt update # apt upgrade # apt dist-upgrade |
Inseriamo nella configurazione di boot del Raspberry la direttiva che permette di aumentare il limite di erogazione di corrente sulle porte USB a 1.2 A
1 |
max_usb_current=1 |
Riavviamo il raspberry
1 |
# reboot |
Una volta riavviato, verifichiamo che il supporto multi device del kernel sia già caricato tramite la presenza del file mdstat in /proc
1 |
# ls /proc/mdstat |
Se non fosse presente dobbiamo caricare il modulo md-mod
1 2 3 4 5 |
# modprobe -v md-mod insmod /lib/modules/4.19.27-v7+/kernel/drivers/md/md-mod.ko start_ro=1 # ls /proc/mdstat /proc/mdstat |
Verifichiamo che sia prente un device md in /dev
1 |
# ls /dev/md* |
Se non fosse presente, per il momento creiamolo noi con mknod
1 2 3 |
# mknod -m 0660 /dev/md0 b 9 0 # ls /dev/md* /dev/md0 |
Colleghiamo i dischi con i loro alimentatori e verifichiamo che siano stati rilevati tramite la presenza dei file sd* in /dev
1 2 |
# ls /dev/sd* /dev/sda /dev/sdb /dev/sdc /dev/sdd |
Installazione del software
Abbiamo bisogno di mdadm per l’amministrazione del raid, xfsprogs per formattare il filesystem xfs e smartmontool per monitorare i dischi
1 |
# apt install mdadm xfsprogs smartmontools |
Monitoraggio dei dischi
Con il nostro array abbiamo la possibilità di perdere un disco prima di compromettere il contenuto dell’archivio ma è meglio avere il tempo di ordinarne uno per poterlo sostituire
Commentiamo le righe che cominciano per DEVICESCAN nel file /etc/smartd.conf. Questa operazione è necessaria altrimenti l’inserimento delle righe dedicate alla configurazione dei check per ciascun device verrebbero ignorate
1 |
# sed -i 's/^DEVICESCAN/#DEVICESCAN/g' /etc/smartd.conf |
Poi inseriamo nel file di configurazione di smartd 4 righe per tenere sotto controllo i nostri dischi e ricevere una mail in caso di problemi. Faremo eseguire gli short self test tutti i giorni ad orari diversi tra mezzanotte e le 4, i long self test invece in giorni divesi dopo le 5 in modo da non avere 2 dischi contemporaneamente rallentati per i test
1 2 3 4 5 6 |
# cat >> /etc/smartd.conf << ! /dev/sda -a -S on -H -s (S/../.././00|L/../../1/05) -m mia.email@gmail.com /dev/sdb -a -S on -H -s (S/../.././01|L/../../2/05) -m mia.email@gmail.com /dev/sdc -a -S on -H -s (S/../.././02|L/../../3/05) -m mia.email@gmail.com /dev/sdd -a -S on -H -s (S/../.././03|L/../../4/05) -m mia.email@gmail.com ! |
Ora riavviamo smartd
1 |
# systemctl restart smartd |
Creazione del raid 5
1 2 3 |
# mdadm --create --verbose /dev/md0 \ --level=5 \ --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd |
E’ stato creato l’array, i primi 3 dischi sono già disponibili mentre il quarto rimane spare fino a che avrà completato la fase si sync che impiegherà molte ore
1 2 |
# mdadm /dev/md0 /dev/md0: 1430.44GiB raid5 4 devices, 1 spare. Use mdadm --detail for more detail. |
Possiamo osservare le informazioni sul completamento di questa fase tramite /proc/mdstat
1 2 3 4 5 6 7 8 |
# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd[4] sdc[2] sdb[1] sda[0] 1499928576 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_] [>....................] recovery = 2.8% (14477484/499976192) finish=875.7min speed=9239K/sec bitmap: 0/4 pages [0KB], 65536KB chunk unused devices: <none> |
La situazione finale sarà questa
1 2 3 4 5 6 7 |
# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd[4] sdb[1] sdc[2] sda[0] 1499928576 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] bitmap: 0/4 pages [0KB], 65536KB chunk unused devices: <none> |
Ora possiamo salvare le informazioni per la costruzione dell’array all’avvio tramite i servizi mdadm
1 |
# mdadm --brief --detail --verbose /dev/md0 >> /etc/mdadm/mdadm.conf |
Creazione del filesystem
Come filesystem utilizziamo xfs che è particolarmente adatto agli ambienti RAID
1 2 3 4 5 6 7 8 9 10 |
# mkfs.xfs /dev/md0 meta-data=/dev/md0 isize=512 agcount=32, agsize=11718272 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=374982144, imaxpct=5 = sunit=128 swidth=384 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=183096, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 |
Terminata la formattazione, creiamo un mountpoint e montiamo l’array
1 2 3 4 5 6 7 |
# mkdir -p /mnt/raid # mount /dev/md0 /mnt/raid/ # df -h /mnt/raid/ File system Dim. Usati Dispon. Uso% Montato su /dev/md0 1,4T 1,5G 1,4T 1% /mnt/raid |
Inseriamo in fstab il riferimento per montare il raid al boot
1 |
/dev/md0 /mnt/raid xfs defaults 0 0 |
Condivisione su SAMBA
Creiamo un utente dedicato alla condivisione dei files chiamandolo raiduser
1 |
# adduser --system raiduser |
Assegnamo l’ownership del mountpoint a raiduser
1 |
# chown -R raiduser:nogroup /mnt/raid/ |
Configuriamo smb.conf creando una nuova share pubblica RAID dove è possibile leggere e scrivere files tramite l’utente raiduser
1 2 3 4 5 6 7 8 9 |
[RAID] comment = Raspberry Raid 5 path = /mnt/raid writable = yes browseable = yes public = yes create mask = 0644 directory mask = 0755 force user = raiduser |
Riavviamo samba
1 |
# systemctl restart smbd |