Così ho deciso di creare 2 gruppi RAID6 di 16HDD o 4 di 8 HDD.
Questo non è il modo migliore per fare le cose. Potrebbe funzionare abbastanza bene, ma a seconda delle esigenze prestazionali potrebbe non funzionare.
La dimensione ideale per un array RAID5 / 6 sarà tale che un multiplo esatto della quantità di dati che "abbraccia" l'array corrisponda alla dimensione del blocco del file system costruito su di esso.
Gli array RAID5 / 6 funzionano come dispositivi a blocchi: un singolo blocco di dati si estende sui dischi dell'array e quel blocco contiene anche dati di parità. La maggior parte dei controller RAID scriverà una grande quantità di dati di due dimensioni su ciascun disco dell'array - il cui valore esatto è configurabile in sistemi RAID migliori - e l'unità Dot Hill è uno di quei "sistemi RAID migliori". È importante.
Quindi ci vuole N x (quantità di dati memorizzati per pezzo di disco) per estendere l'array, dove N è il numero di dischi di dati. Un array RAID5 a 5 dischi ha 4 dischi "dati" e un array RAID6 a 10 unità ha 8 dischi dati.
Perché quando i dati vengono scritti su un array RAID5 / 6, se il blocco di dati è tale da essere sufficientemente grande da coprire l'intero array, la parità viene calcolata per quei dati - di solito nella memoria del controller - quindi l'intero stripe viene scritto su disco. Semplice e veloce.
Ma se il blocco di dati in fase di scrittura non è abbastanza grande per coprire l'intero array, cosa deve fare il controller RAID per calcolare i nuovi dati di parità? Pensaci: ha bisogno di tutti i dati nell'intero intervallo per ricalcolare i nuovi dati di parità.
Pertanto, se si crea un array RAID6 a 16 unità con il blocco predefinito per disco di 512 kb, ciò significa che sono necessari 7 MB per "estendere" l'array.
ZFS funziona generalmente in blocchi da 128kb.
Quindi ZFS scrive un blocco da 128 kB - su un array RAID6 a 16 unità. Nella configurazione che stai proponendo, ciò significa che il controller RAID deve leggere quasi 7 MB dall'array e ricalcolare la parità tra quei 7 MB. Quindi riscrivi gli interi 7 MB sul disco.
Se sei fortunato, è tutto nella cache e non subisci un enorme successo in termini di prestazioni. (Questo è uno dei motivi principali per cui la posizione "non utilizzare RAID5 / 6" ha un seguito simile: RAID1 [0] non ne soffre.)
Se sei sfortunato e non hai allineato correttamente le tue partizioni del filesystem, quel blocco da 128kB si estende su due strisce RAID che non sono nella cache e il controller deve leggere 14 MB, ricalcolare la parità, quindi scrivere 14 MB. Tutto per scrivere un blocco da 128 kB.
Questo è ciò che deve accadere logicamente . Ci sono molte ottimizzazioni che i buoni controller RAID possono prendere per ridurre l'IO e il carico computazionale di tali schemi IO, quindi potrebbe non essere così male.
Ma sotto un pesante carico di scrittura di blocchi da 128 kB in posizioni casuali, ci sono davvero buone probabilità che le prestazioni di un array RAID6 a 16 unità con una dimensione di striscia di 7 MB siano assolutamente terribili.
Per ZFS, i LUN RAID5 / 6 "ideali" sottostanti per un file system per uso generale in cui la maggior parte degli accessi sono effettivamente casuali avrebbe una dimensione della striscia che è un divisore uniforme di 128 kB, come 32 kB, 64 kB o 128 kB. In questo caso, ciò limita il numero di dischi di dati in un array RAID5 / 6 a 1 (il che è privo di senso - anche se possibile da configurare, è meglio usare solo RAID1 [0]), 2, 4 o 8. Prestazioni migliori nel migliore dei casi sarebbe utilizzare una dimensione di striping di 128 kB per gli array RAID5 / 6, ma nel migliore dei casi non si verifica spesso nei file system di uso generale, spesso perché i file system non memorizzano i metadati allo stesso modo in cui memorizzare i dati del file.
Consiglierei di impostare array RAID5 a 5 dischi o array RAID6 a 10 dischi, con la dimensione del blocco per disco impostata abbastanza piccola da contenere 64 KB per la quantità di dati su un intero array di array (sì, l'ho fatto prima per ZFS - molte volte). Ciò significa che per un array RAID con 4 dischi di dati, la dimensione del blocco per disco dovrebbe essere di 16 KB, mentre per un array RAID con 8 dati, la dimensione del blocco per disco dovrebbe essere di 8 KB.
Quindi consenti a ZFS di utilizzare l' intero array, senza partizionarlo. ZFS si allineerà correttamente a un'intera unità, sia che si tratti di un semplice disco singolo o di un array RAID presentato da un controller RAID.
In questo caso, e senza conoscere i requisiti esatti di spazio e prestazioni, ti consiglio di impostare tre array RAID6 a 10 unità o sei array RAID5 a 5 unità con dimensioni della striscia di 64 kB, configurare un paio di hot spare e salvare quattro dei tuoi dischi per qualunque cosa accada in futuro. Perché qualcosa lo farà.
Sicuramente non userei quel sistema di dischi in modalità JBOD: è un dispositivo completamente conforme a NEBS di livello 3 che offre significative protezioni di affidabilità e disponibilità integrate direttamente nell'hardware. Non buttarlo via solo perché "ZFS !!!!". Se si tratta di un pezzo di hardware economico che metti insieme dalle parti? Sì, la modalità JBOD con ZFS che gestisce il RAID è la cosa migliore, ma NON è l'hardware che hai. UTILIZZARE le funzionalità fornite dall'hardware.