Standard för notation av nätverks-RAID (SAM RAID-notation)
I takt med att RAID-landskapet blir alltmer komplext i och med framväxten av nätverks-RAID finns det ett viktigt behov av ett mer avancerat och koncist notationssystem för RAID-nivåer som omfattar en nätverkskomponent.
Traditionell RAID anges med ensiffrig notation och de tillgängliga nivåerna är 0, 1, 2, 3, 4, 5, 6, 7. Nivå 7 är inofficiell men allmänt accepterad som RAID med trippelparitet (den naturliga utökningen av RAID 5 och RAID 6), och RAID 2 och RAID 3 är i praktiken oanvända idag.
Nästlad RAID, en RAID-nivå inuti en annan, hanteras genom att sätta samman ensiffriga RAID-nivåer såsom RAID 10, 50, 61, 100 och så vidare. Dessa kan alternativt skrivas med ett plustecken som skiljer nivåerna åt, exempelvis RAID 1+0, 5+0, 6+1, 1+0+0 och så vidare.
Det finns två stora problem med detta notationssystem, utöver det uppenbara problemet att inte alla RAID-typer eller utökningar täcks av det ensiffriga systemet, där många aspekter av proprietära RAID-system såsom ZRAID, XRAID och BeyondRAID saknas i notationssystemet. Det första är avsaknaden av notation för nätverks-RAID och det andra är avsaknaden av en specifik beteckning för intern RAID-konfiguration.
Nätverks-RAID förekommer i två huvudtyper, synkron och asynkron. Synkron nätverks-RAID fungerar i praktiken identiskt med sin icke-nätverksanslutna motsvarighet. Asynkron fungerar på samma sätt men medför extra risker eftersom data kanske inte är synkroniserade mellan enheterna vid tidpunkten för ett enhetsfel. Skillnaden mellan de två behöver därför vara synlig i notationen.
Synkron RAID bör betecknas med parenteser. Två lokala RAID 10-system speglade över nätverket (i stil med DRBD) skulle alltså betecknas RAID 10(1). Den effektiva RAID-nivån för risk- och kapacitetsberäkningar skulle vara densamma som för vilken RAID 101 som helst, men detta informerar alla parter med en blick om att spegeln sker över ett nätverk.
Asynkron RAID bör betecknas med hakparenteser. Två lokala RAID 10-system som speglas asynkront över nätverket skulle alltså betecknas RAID 10[1], vilket gör det tydligt att det finns en riskfylld fördröjning i systemet.
Det finns ett ytterligare behov av en annan typ av replikering på en högre nivå, på filsystemsnivå (i stil med rsync), som, även om den inte är direkt besläktad med RAID, fyller en liknande funktion för kalla data och ofta används i RAID-diskussioner. Jag anser att lagringsingenjörer behöver kunna beteckna även detta på ett enkelt sätt. Denna asynkrona replikering på filsystemsnivå kan betecknas med klamrar. Endast en notation behövs eftersom replikering på filsystemsnivå alltid är asynkron. Som exempel skulle två RAID 6-arrayer som synkroniseras automatiskt med ett system för blockdifferentiell filsystemsreplikering betecknas RAID 6{1}.
För att ytterligare förenkla RAID-notationen och för att förkorta det uppenbara behovet av att upprepade gånger skriva ordet “RAID”, samt för att frigöra oss från de traditionella distraktionerna kring vad akronymen står för så att vi kan fokusera på de relevanta replikeringsaspekterna av den, bör ett enkelt “R”-prefix användas. RAID 10 skulle alltså helt enkelt bli R10. Eller en rent nätverksbaserad spegel skulle kunna vara R(1).
Detta lämnar en viktig aspekt av RAID-notationen kvar att hantera, nämligen storleken på varje komponent i arrayen. Ofta är detta underförstått, men vissa RAID-nivåer, särskilt de som är nästlade, kan ha komplexiteter som missas av traditionell notation. Att känna till det totala antalet diskar i en array anger inte alltid uppsättningen för en specifik array. Till exempel antas en R10 med 24 diskar bestå av tolv par speglar i en R0-stripe. Men den skulle kunna vara åtta uppsättningar trippelspeglar i en R0-stripe. Eller den skulle till och med kunna vara sex fyrfaldiga speglar. Eller fyra sexfaldiga speglar. Eller tre åttafaldiga speglar. Eller två tolvfaldiga speglar. Även om de flesta av dessa är ytterst osannolika finns det ett behov av att beteckna det. För uppsättningsstorleken använder vi en upphöjd siffra för att ange storleken på den uppsättningen. I allmänhet behövs detta endast för en aspekt av arrayen, inte alla, eftersom de övriga kan härledas, men när det råder tvivel kan det betecknas explicit.
En R10-array som använder trevägsspeglar skulle alltså vara R130. Om du saknar möjligheten att skriva en upphöjd siffra kan du även skriva det som R1^3+0. Denna notation anger inte den fullständiga arraystorleken, endast dess konfigurationstyp. Om alla möjliga upphöjda siffror inkluderas kan en fullständig arraystorlek beräknas utan något ytterligare. Om vi har en R10 med fyra uppsättningar trevägsspeglar kan vi skriva den R1304, vilket skulle informera oss om att hela arrayen består av tolv diskar – eller i den alternativa notationen R1^3+0^4.
Notation med upphöjda siffror för uppsättningar är endast nödvändig när det inte är uppenbart. R10 utan annan notation innebär att R1-komponenten består av spegelpar, till exempel. R55 kräver nästan alltid ytterligare notation, utom när arrayen endast består av nio medlemmar.
En ytterligare aspekt att överväga är att beteckna arraystorleken. Detta är betydligt enklare än notationen med upphöjda siffror och är nästan alltid fullt tillräckligt. Detta undanröjer behovet av att skriva i långform “En RAID 10-array med fyra diskar.” Istället kan vi använda ett prefix för detta. 4R10 skulle beteckna en RAID 10-array med fyra diskar.
För att återvända till vårt exempel ovan skulle alltså RAID 10 med tolv diskar och trevägsspeglar kunna skrivas ut som 12R1304. Men användningen av alla tre siffrorna blir överflödig. Vilken som helst av siffrorna kan utelämnas. Vanligtvis är detta den sista, eftersom den är minst sannolik att vara användbar. R1-uppsättningens storlek är användbar för att fastställa den grundläggande risken, och den inledande 12:an används för kapacitets- och prestandaberäkningar samt för dimensionering och inköp av chassin. Den avslutande fyran är underförstådd av de andra två siffrorna och i praktiken oanvändbar på egen hand. Det bästa sättet att skriva detta vore alltså helt enkelt 12R130. Om samma array istället skulle använda den vanliga spegelparsmetoden snarare än trevägsspegeln skulle vi helt enkelt skriva 12R10 för att beteckna en standardiserad RAID 10-array med tolv diskar.
