Perché RAID 0 non può utilizzare tutto lo spazio su disco su due dischi di dimensioni diverse?


10

Per citare l'articolo di Wikipedia su RAID :

È possibile creare un RAID 0 con dischi di dimensioni diverse, ma lo spazio di archiviazione aggiunto all'array da ciascun disco è limitato alle dimensioni del disco più piccolo. Ad esempio, se un disco da 100 GB viene sottoposto a striping insieme a un disco da 350 GB, la dimensione dell'array sarà di 200 GB (100 GB × 2).

L'articolo, tuttavia, non spiega perché non è possibile RAID insieme e utilizzare l'intero spazio su disco. Capisco che lo striping scrive tra i due, ma sicuramente non dovrebbe impedire di scrivere nei settori successivi del secondo disco, mentre funziona con prestazioni degradate? Esiste un sistema RAID alternativo (ad esempio RAID software) che offre tale funzionalità?


Non sono sicuro che funzionerebbe con alcuni raid hardware ma con raid software. Per sfruttare alcuni aspetti del raid 0 mentre si utilizza più spazio disponibile su due unità di dimensioni diverse come una da 100 GB e una da 350 GB, è possibile provare a creare 3 Partizioni da 100 GB sull'unità più grande e striping la partizione da 100 KB sulla prima e le 3 partizioni da 100 GB sulla seconda unità. Il livello di raid 0 ti darà 400 concerti da utilizzare fornendo un aumento delle prestazioni di lettura / scrittura, ma probabilmente sarebbe inferiore rispetto a quando si eseguono il striping di due unità da 200 GB.
Keith Reynolds,

Normalmente non vorrai farlo, a scopo dimostrativo ho impostato un RAID0 usando una 1G e 16G flash drive. Ho creato una partizione estesa riempiendo ogni disco. Quindi ho creato partizioni da 981 MB su ciascuna unità fino a quando non sono state riempite. Poi ho fatto un raid usando le 16 partizioni con il comando su linux mdadm --create --verbose /dev/md0 --chunk=512 -l0 -n16 /dev/sdd5 /dev/sde5 /dev/sde6 /dev/sde7 /dev/sde8 /dev/sde9 /dev/sde10 /dev/sde11 /dev/sde12 /dev/sde13 /dev/sde14 /dev/sde15 /dev/sde16 /dev/sde17 /dev/sde18 /dev/sde19. Ho finito con meno spazio di quanto avessi appena usato l'unità da 16 GB
Keith Reynolds

Risposte:


11

Il motivo per cui le dimensioni sono limitate alle dimensioni del disco più piccolo ha a che fare con il fatto che le strisce sono scritte "alternativamente" e devono avere le stesse dimensioni.

In un sistema a due dischi, tutte le strisce dispari si trovano su un disco, le pari sull'altro. Scrive alternate tra dischi, dispari / pari / dispari / pari / ...

Poiché le strisce devono avere le stesse dimensioni e accoppiate (per due dischi), si è limitati a uno spazio massimo utilizzabile di 2 * (dimensione del disco più piccolo).


3

È possibile utilizzare lo spazio rimanente. È possibile creare un volume utilizzando lo spazio rimanente o persino utilizzarlo come parte di un altro RAID. Tuttavia, l'utilizzo di questo spazio aggiuntivo peggiorerà le prestazioni fornite da RAID 0, poiché due diversi processi potrebbero tentare di accedere allo stesso controller e disco fisici.

Perché non puoi aggiungere questo spazio extra al RAID originale? Bene, senza entrare nei dettagli, è a causa degli algoritmi che usano i RAID. RAID 0 scrive sul primo disco nel RAID, quindi sul successivo. Ciò aumenta le prestazioni, in quanto non è necessario attendere che il disco precedente termini la lettura o la scrittura. Se venissero utilizzati 250 GB nel tuo post, la maggior parte della scrittura verrebbe sul primo disco, praticamente eliminando qualsiasi guadagno in termini di prestazioni.

RAID potrebbe non essere la soluzione che stai cercando, se vuoi usare tutto lo spazio delle unità dovresti occuparti dei volumi. Spanning ti consente di prendere molti volumi e concatenarli insieme in un unico grande volume. Spanning non offre alcun aumento delle prestazioni o ridondanza.


Questo non spiega perché non può utilizzare tutte e due le unità in un volume. Inoltre, la parte dei volumi separati non causerà affatto un problema di prestazioni: il controllo IO del disco a basso livello viene gestito da interruzioni tramite disk.sys, quindi le richieste di lettura / scrittura vengono pipeline comunque e Windows supporta anche l'IO sovrapposto.
Polinomio

Ok, l'aggiornamento non lo ha ancora spiegato. Conosco bene come funziona lo striping, ma ciò non spiega perché non possa semplicemente passare alla modalità a disco singolo (con prestazioni standard a disco singolo) quando il disco più piccolo è pieno. Grazie per aver menzionato lo spanning del volume - sembra utile.
Polinomio

1
Perché è così che funziona RAID. Se lo volessi davvero, potresti RAID 0 quello che potresti, quindi creare un volume con lo spazio libero, quindi estendere il RAID e il volume extra. Ma non credo che nessun controller RAID ti permetterà di farlo. Potresti essere in grado di farlo con una combinazione di RAID hardware e software.
Keltari,

1
-1 "Ciò aumenta le prestazioni, in quanto non deve attendere che il disco precedente finisca di leggere o scrivere" lo stesso si può dire per due dischi rigidi di dimensioni diverse in RAID 0
Celeritas

2
@Polynomial Quello non sarebbe RAID 0. Hai chiesto perché RAID 0 non può usare tutto lo spazio su disco e poi rispondi "perché non è possibile ...". Non può perché è RAID 0. Se avesse fatto qualcos'altro, sarebbe qualcos'altro.
David Schwartz,

0

RAID è uno pseudo standard che descrive come i dati possono essere archiviati su una matrice di dischi. Lo standard descrive quattro diversi modi per archiviare i dati (tecnicamente di più, ma per lo più a nessuno importa degli altri):

Raid-0: Striping. Ogni blocco di dati è suddiviso tra ciascun membro del dispositivo RAID. Nessuna ridondanza, quindi è più una semplice matrice di dischi economici, non una matrice ridondante di dischi economici.

Raid-1: Mirroring. Ogni blocco di dati è archiviato su ogni disco dell'array. Questo lo rende davvero solo da quando con due dischi. RAID 1/0 o solo RAID 10 è una combinazione di mirroring e striping e può essere utilizzato per sfruttare più di due dischi.

Raid-5: Parity. Ogni blocco di dati è suddiviso tra ciascun membro del dispositivo RAID + un disco è dedicato alla parità.

Raid-6: Double Parity: uguale a Raid-5, ma con due dischi di parità.

Questo è tutto. Raid non descrive cosa fare delle dimensioni errate o altro, ma lo striping funziona davvero solo con dischi di dimensioni uguali. In genere il modo per aggirare questo è che è possibile utilizzare lo spazio rimasto come unità disco separata.

Allontanandosi dal RAID come modo per creare un array di dischi di grandi dimensioni, è possibile utilizzare cose come ZFS e aggiungere semplicemente dischi a un pool di archiviazione. ZFS cercherebbe sempre di utilizzare entrambi i dischi nel modo più efficiente possibile e potresti dire a ZFS di quale livello di ridondanza sei soddisfatto.

Le tecnologie precedenti sono cose come la mappatura del volume (cioè LVM o l'equivalente di Windows), che astraggono l'idea di mappare i blocchi su disco a un livello superiore. Con LVM è possibile estendersi su dischi, espandere partizioni, avere partizioni non contigue e così via. La mappatura del volume non è RAID, e piuttosto che aumentare le prestazioni man mano che aumenti i dischi, sceglierà casualmente di scrivere su un disco o l'altro a seconda di dove ti trovi nel file system. Questo è indicato come spanning ed è in genere migliore di RAID se si utilizza IOPS anziché prestazioni non elaborate.


0
A RAID 0 can be created with disks of differing sizes, but the storage
space added to the array by each disk is limited to the size of the
smallest disk.

Questo può essere vero e sarà vero per la maggior parte delle implementazioni RAID0. Tuttavia non per tutti.

Esistono due motivi per utilizzare RAID 0:

  1. Concatena più dischi in un unico grande volume.
  2. Prestazione.

L'opzione 2 è la più comune e penso che sia utilizzata in quasi tutte le attuali implementazioni RAID 0. La spiegazione tecnica è che le informazioni sono scritte alternando tra i dischi.

IN un modo non tecnico: pensa ai dischi come a due libri. Questi libri hanno velocità di accesso limitate (lettura / scrittura). Quindi, piuttosto che due libri di 100 pagine, li riformattiamo in due libri, ma rinumeriamo le pagine in modo che tutti i numeri pari siano scritti in un libro e tutti i numeri dispari nell'altro libro.

Ora il nostro nuovo "libro R0" si comporta come se fosse un singolo libro con il doppio del numero di pagine e il doppio della velocità.


L'opzione 1 può essere semplice come 'colla per i libri schiena contro schiena'. Nel qual caso non hai alcun guadagno di velocità ma puoi incollare libri con un numero di pagine diverso. Mi sembra di ricordare alcune implementazioni "RAID0" come quella intorno al 1990. Ma non è quello che la maggior parte delle persone considererebbe "RAID 0 corretto".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.