RAID

RAID (באנגלית: Redundant Array of Independent Disks, מערך יתיר של דיסקים עצמאיים, לשעבר Redundant Array of Inexpensive Disks, מערך יתיר של דיסקים זולים) היא שיטה שבה מאחדים מספר דיסקים קשיחים ליחידה לוגית אחת. איחוד זה מאפשר גישה במקביל למספר דיסקים, המשפרת את מהירות העבודה, ושמירת מידע יתיר, המאפשר לשחזר מידע שאבד בתקלה. ישנן שיטות שונות לניהול מערך הדיסקים. שיטות אלו מכונות רמות RAID (באנגלית RAID levels) וכל אחת מהן מספקת יתרונות שונים (כפי שמפורט בהמשך).

מערכת ההפעלה ויישומים הפועלים על המחשב מתייחסים למערך ה-RAID כדיסק קשיח אחד, ואינם צריכים לעסוק בניהולו. לרוב, על ניהול ה-RAID אחראי רכיב חומרה או רכיב תוכנה ייעודי.

בדרך-כלל, כל הדיסקים המחוברים למערך הם מאותו סוג ובפרט בעלי אותו נפח אחסון.

== תכונות RAID ==
=== מהירות ===
בעוד השיפור במהירויות המעבדים והזיכרון הנדיף הוא מהיר מאוד לאורך הזמן מדגם אחד לדגם הבא, השיפור במהירויות הדיסקים הקשיחים הוא אטי, יחסית. השימוש במספר דיסקים קשיחים כיחידה אחת מאפשר לבצע קריאה וכתיבה בו-זמנית על ידי מספר תוכנות הרצות על אותו מחשב בריבוי משימות, או אף לבצע פעולה אחת כמספר פעולות בו-זמניות. לדוגמה, אם ב-RAID מחוברים שני דיסקים קשיחים, ניתן לבצע פעולת כתיבה ארוכה אחת כשתי פעולות כתיבה נפרדות ובו-זמניות, כל אחת על דיסק קשיח אחר. כך, הזמן שתיקח הפעולה יהיה, בקירוב, חצי מזמן פעולת כתיבה ארוכה אחת לדיסק קשיח אחד.

=== אמינות ===
דיסקים קשיחים מרכזים בתוכם מידע רב. לכן, תקלה בדיסק קשיח עשויה לגרום לאיבוד כמות גדולה של מידע. ישנן שלוש שיטות המסייעות להקטין את הסיכוי לאובדן מידע ב-RAID:
# שכפול - שמירת כל המידע בשני עותקים (או יותר), כל עותק נשמר בדיסק קשיח אחר. שיטה זו גורמת לבזבוז מקום, שכן לכל כמות של מידע, דרושה כמות כפולה (או יותר) של נפח אחסון על הדיסקים הקשיחים.
# שמירת עותק אחד של המידע, בתוספת של קוד תיקון שגיאות, המאפשר שחזור המידע במקרה של אובדן חלקי. לדוגמה: ב-RAID בו מחוברים שבעה דיסקים, ניתן לנהל אותו כך ששישה דיסקים משמשים לשמירת מידע, ובשביעי כל סיבית מכילה את סיבית הזוגיות של הסיביות המאוחסנים באותו מקום בשאר הדיסקים. בצורה זו, אם אחד הדיסקים מתקלקל, ניתן לשחזר כל בית של מידע שהיה עליו באמצעות פעולת XOR בין הבתים שבשאר הדיסקים.
# מחליף חם (באנגלית Hot Spare) - מערך ה-RAID יכול להכיל דיסק קשיח נוסף, שבתחילה אינו בשימוש. במקרה של תקלה, המידע שנשמר בדיסק שהתקלקל משוחזר אל הדיסק שלא היה בשימוש עד כה - כל זאת בלי לגרום להפסקה בפעולת המערך. לאחר שדיסק אחד התקלקל, ניתן להחליפו בחדש, כך שהוא יהווה את המחליף הבא.

== סוגי RAID ==
=== RAID 0 ===
מערך של שני דיסקים קשיחים לפחות, שבהם כל המידע מחולק שווה בשווה בין הדיסקים. כאשר יישום שומר פיסת מידע, היא מחולקת לחלקים בגודל קבוע מראש, כך שהחלק הראשון נשמר בדיסק אחד, השני נשמר בדיסק הבא וכו' עד הדיסק האחרון. החלק הבא יישמר שוב בדיסק הראשון, וחוזר חלילה:

חיבור שני דיסקים ב-RAID 0.

כפי שניתן לראות בשרטוט, המדגים מערך RAID 0 בן שני דיסקים, הבלוקים (יחידות המידע הקטנות ביותר שהדיסק מסוגל לקרוא או לכתוב) מאוחסנים לסירוגין על שני הדיסקים.

כלומר, הדיסקים עובדים בו זמנית על פעולת הכתיבה וכל דיסק כותב או קורא חלק מידע אחר מתוך כל המידע. מערך מסוג זה מגביר את ביצועי המערכת, משום שנדרש הרבה פחות זמן על מנת לקרוא או לכתוב מתוך מספר דיסקים בו זמנית מאשר מדיסק אחד. RAID 0 לא היה חלק מרמות ה-RAID בתחילה, משום שהוא לא מוסיף אמינות למערך, אלא רק שיפור ביצועים (להפך - הסיכוי לתקלה באחד משני דיסקים גבוה יותר מהסיכוי לתקלה בדיסק אחד). עם זאת, מערך RAID 0 מנצל את כל השטח של הדיסקים המחוברים לשמירת מידע, בניגוד לרמות אחרות שמשתמשות בחלק מהנפח לאחסון מידע נוסף להגדלת אמינות המערך.

=== RAID 1 ===
מערך של שני דיסקים לפחות, שבהם כל חלק מהמידע נכתב לכל הדיסקים בו זמנית; כלומר, נוצר גיבוי על דיסקים נוספים. נקרא גם בלשון העם "מירור" (mirror) משמעותו "דיסק ראי" מכיוון שהנתונים נכתבים בו זמנית ל־2 הדיסקים בצורה שווה.

חיבור שני דיסקים ב-RAID 1.

מערך מסוג זה מגביר את שרידות המידע משום שכל פיסת מידע כתובה מספר פעמים - המערך מיושם בעיקר כאשר שרידות המידע חשובה יותר מנפח האחסון הכולל. מערך כזה מנצל רק 1 חלקי מספר הדיסקים מנפח האחסון הנתון.

=== RAID 2 ===
מערך של שבעה דיסקים לפחות, בו המידע מחולק בין הדיסקים סיבית אחר סיבית, כלומר הסיבית הראשונה של המערך מאוחסנת בדיסק הראשון, השנייה בשני וכו'. כך, כל קריאה או כתיבה של סיבית אחת, גוררת קריאה וכתיבה מכל הדיסקים.
ממוזער
השיטה כוללת שימוש בקוד המינג כקוד לתיקון שגיאות. קוד זה דורש 3 סיביות על כל 4 סיביות מידע ולכן מנצל רק <math>\frac{4}{7}</math> (כ-57%) מנפח האחסון הנתון (השאר משמש לקוד לתיקון השגיאות).

שיטה זו היא היחידה המאפשרת זיהוי ותיקון מידע משובש (מידע שחלה שגיאה בקריאתו אך לא זוהתה על ידי הדיסק הקורא) תוך-כדי עבודה.

ב-RAID 2 נדרש שכל הדיסקים יסתובבו בסנכרון מלא, זה מול זה, כדי שפעולות הקריאה והכתיבה יתבצעו ביעילות.

הדרישה לשבעה דיסקים לפחות נובעת מכך, שקוד המינג הקטן ביותר בשימוש מקודד 4 סיביות מידע באמצעות 7 סיביות. מכאן, שיחידת המידע הקטנה ביותר היא 7 סיביות. ברמה 2, מערך ה-RAID צריך להכיל דיסק לכל סיבית ביחידת המידע הקטנה ביותר - שגודלה, כאמור, 7 סיביות. בצורה דומה, ניתן להרכיב מערך RAID 2 מ-14 דיסקים, 49 דיסקים וכו', על-פי קוד המינג המתאים.

=== RAID 3 ===
מערך של שלושה דיסקים לפחות, שבו דיסק אחד של זוגיות ושאר הדיסקים מאחסנים מידע.
הבדיקה נכתבת ברמת הבית; כלומר, מול כל בית בדיסקי המידע יישמר בית זוגיות בדיסק הזוגיות.

חיבור ארבעה דיסקים ב-RAID 3.

בדוגמה שבשרטוט, הדיסקים Disk 0, Disk 1, Disk 2 מאחסנים מידע, ולכל שלישיית בתים הנמצאים במיקומים מקבילים, Disk 3 מאחסן את בית הזוגיות. ניתן לראות שלבלוק A, המכיל שני בתים בדיסקים המאחסנים מידע, שני בתי זוגיות ב-Disk 3, שהוא דיסק הזוגיות.

מכיוון שהיחידה הקטנה ביותר אותה ניתן לקרוא או לכתוב בדיסק קשיח היא גזרה שנפחה גדול בהרבה ממספר קטן של בתים, כל קריאה וכתיבה ב-RAID 3 חייבת להתבצע בו-זמנית בכל הדיסקים, כך שיישומים שונים אינם יכולים להשתמש במערך בו-זמנית. עם זאת, פעולות הקריאה והכתיבה עצמן מואצות.

עבור n דיסקים, רמה זו מאפשרת לשמור <math>\frac{n-1}{n}</math> מנפח האחסון הנתון.

=== RAID 4 ===
כמו RAID 3, מערך של שלושה דיסקים לפחות, שבו דיסק אחד של זוגיות ושאר הדיסקים מאחסנים מידע. בניגוד ל-RAID 3, כאן המידע מחולק ברמה של בלוק בגודל מסילה (מעגל על הדיסק ברדיוס מסוים) או גזרה (חלק ממסילה). בשיטה זו, קריאה של בלוק אחד תיגש לדיסק אחד בלבד. כתיבה של בלוק דורשת קריאה של הבלוק שיוחלף ושל בלוק הזוגיות המתאים וכתיבה של הבלוק החדש ושל בלוק הזוגיות החדש.

חיבור ארבעה דיסקים ב-RAID 4.

גם בדוגמה זו, כמו בדוגמה שהובאה עבור RAID 3, שלושת הדיסקים הראשונים מאחסנים מידע, והרביעי את הזוגיות, אלא שכאן ניתן לראות כי הזוגיות נשמרת לכל בלוק ולא לכל בית - הבלוקים המקבילים בצבע אחד, ולכל קבוצת בלוקים מקבילים בלוק זוגיות משלה ב-Disk 3.

חיסרון עיקרי של שיטה זו היא שכל כתיבה גורמת גם לכתיבה לדיסק הזוגיות, דבר היוצר עומס גדול יותר עליו ומגדיל את הסיכוי לתקלה בו וגם יוצר בו תלות בכל פעולת כתיבה, כך שלא ניתן לבצע מספר כתיבות בו-זמנית.

ניצול המקום הוא כמו במערך RAID 3.

=== RAID 5 ===
מערך של שלושה דיסקים לפחות, שבהם המידע והזוגיות מפוזרים בין כל הדיסקים, והזוגיות נכתבת ברמת הבלוק כמו ב-RAID 4. מכיוון שהזוגיות מפוזרת בין כל הדיסקים, הכתיבה אינה תלויה בדיסק אחד וניתן לבצע מספר פעולות כתיבה בו-זמנית. גם כאן, ניצול המקום הוא כמו במערך RAID 3.

חיבור ארבעה דיסקים ב-RAID 5.

כפי שהשרטוט מדגים, לכל קבוצת בלוקים מקבילים, בלוק הזוגיות נשמר בדיסק אחר: בלוק הזוגיות של השורה הראשונה יישמר ב-Disk 3, של השורה השנייה ב-Disk 2 וכו', בצורה מחזורית, כלומר בלוק הזוגיות של בלוק E יישמר ב-Disk 3.

=== RAID 6 ===
מערך של ארבעה דיסקים לפחות, בו על כל מספר בלוקים כמספר הדיסקים נשמרים שני בלוקים של תיקון שגיאות בקוד ריד-סולומון. פיזור המידע נעשה כמו ב-RAID 5.

חיבור חמישה דיסקים ב-RAID 6.

כפי שניתן לראות בשרטוט, לכל קבוצת בלוקים יש שני בלוקים של זוגיות, המפוזרים בדיסקים השונים בצורה מחזורית.

שיטה זו מאפשרת התאוששות מתקלה בו-זמנית בשני דיסקים, ולא רק מתקלה בדיסק אחד כמו בשיטות האחרות.

עבור n דיסקים, רמה זו מאפשרת לשמור <math>\frac{n-2}{n}</math> מנפח האחסון הנתון.

=== רמות RAID מקוננות ===
ברמות RAID מקוננות, הדיסקים מחולקים לקבוצות שוות המנוהלות בשיטה אחת וכל קבוצה מהווה דיסק ב-RAID המנוהל בשיטה אחרת. גם RAID זה עשוי להיות חלק מקבוצה יותר גדולה.

שיטות מקוננות בשימוש:
==== RAID 0+1 ====
הדיסקים מקובצים למערכי RAID 0 המנוהלים כדיסקים במערך RAID 1. כלומר, המידע מחולק לקטעים כדי לאפשר גישה מקבילית ומשוכפל בין קבוצות הדיסקים.

חיבור ארבעה דיסקים ב-RAID 0+1

שיטה זו מכונה גם RAID 01.
==== RAID 10 ====

הדיסקים מקובצים למערכי RAID 1 המנוהלים כדיסקים במערך RAID 0. כלומר, המידע משוכפל בכל קבוצה בין הדיסקים ומחולק לקטעים בין הקבוצות. כלומר, הקטע הראשון במערך יישמר בקבוצה אחת, הבא יישמר בקבוצה הבאה וכו'. כאמור, כל קבוצה משכפלת את המידע כמספר הדיסקים בקבוצה.

חיבור ארבעה דיסקים ב-RAID 10.

שיטה זו מכונה גם RAID 1+0 ו-1E

==== RAID 100 ====
בשיטה זו נעשה קינון כפול - הדיסקים מקובצים למערכי RAID 1, הקבוצות מקובצות למערכי RAID 0 שמקובצים בתורם למערך RAID 0. בשיטה זו יש שיפור בזמן הקריאה האקראית יחסית ל-RAID 10.

==== רמות מקוננות נוספות ====
בצורה דומה לרמות שתוארו, קיימות גם רמות RAID 0+3, RAID 30, RAID 50 ו-RAID 60.

=== סיכום רמות RAID ===

{| align="center" id="toc" style="clear: both; margin-top: 0.5em; margin-left: auto; margin-right: auto; width: 90%;"|
|-
!bgcolor="#ddddee" style="padding-left:5px;"|רמה
!bgcolor="#ddddee" style="padding-left:5px;"|שיטה
!bgcolor="#ddddee" style="padding-left:5px;"|שיפור מהירות
!bgcolor="#ddddee" style="padding-left:5px;"|אמינות
!bgcolor="#ddddee" style="padding-left:5px;"|יחידת פיזור
!bgcolor="#ddddee" style="padding-left:5px;"|מינימום דיסקים
|-
|bgcolor="#ddddee" style="padding-left:5px;padding-top:5px"|0
|bgcolor="#eeeeff" style="padding-left:5px;"|פיזור מידע
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|לא
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|2
|-
|bgcolor="#ddddee" style="padding-left:5px;"|1
|bgcolor="#eeeeff" style="padding-left:5px;"|שכפול
|bgcolor="#eeeeff" style="padding-left:5px;"|לא
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|אין
|bgcolor="#eeeeff" style="padding-left:5px;"|2
|-
|bgcolor="#ddddee" style="padding-left:5px;"|2
|bgcolor="#eeeeff" style="padding-left:5px;"|פיזור סיבית בכל דיסק+קוד המינג
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|סיבית
|bgcolor="#eeeeff" style="padding-left:5px;"|7
|-
|bgcolor="#ddddee" style="padding-left:5px;"|3
|bgcolor="#eeeeff" style="padding-left:5px;"|בית בכל דיסק+זוגיות
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בית
|bgcolor="#eeeeff" style="padding-left:5px;"|3
|-
|bgcolor="#ddddee" style="padding-left:5px;"|4
|bgcolor="#eeeeff" style="padding-left:5px;"|פיזור+זוגיות בדיסק ייעודי
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|3
|-
|bgcolor="#ddddee" style="padding-left:5px;"|5
|bgcolor="#eeeeff" style="padding-left:5px;"|פיזור+זוגיות מפוזרת
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|3
|-
|bgcolor="#ddddee" style="padding-left:5px;"|6
|bgcolor="#eeeeff" style="padding-left:5px;"|פיזור+קוד ריד-סולומון
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|4
|-
|bgcolor="#ddddee" style="padding-left:5px;"|0+1
|bgcolor="#eeeeff" style="padding-left:5px;"|1 בתוך 0
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|4
|-
|bgcolor="#ddddee" style="padding-left:5px;"|10
|bgcolor="#eeeeff" style="padding-left:5px;"|0 בתוך 1
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|4
|-
|bgcolor="#ddddee" style="padding-left:5px;"|100
|bgcolor="#eeeeff" style="padding-left:5px;"|1 בתוך 0 בתוך 0
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|כן
|bgcolor="#eeeeff" style="padding-left:5px;"|בלוק
|bgcolor="#eeeeff" style="padding-left:5px;"|8
|}

== יישום מערך RAID ==
=== יישום בתוכנה ===
בתוכנה, המערך מיושם על ידי מערכת ההפעלה - מערכת הקבצים היא האחראית הבלעדית על מערך ה-RAID והכל יתבצע דרכה. מימוש כזה קיים כיום (2007) ברוב מערכות ההפעלה.

מערך מסוג זה גוזל משאבי מעבד הנדרשים לצורכי הקלט/פלט, מכיוון שנדרשת הפעלה של שכבת תוכנה נוספת בכל גישה לדיסקים: בכל פעולת קריאה או כתיבה למערך ה-RAID, מערכת ההפעלה צריכה לחשב את מיקום המידע שיש לקרוא או את המיקום אליו יש לכתוב ואולי גם לחשב זוגיות מתאימה. זאת, בניגוד לגישה לדיסק קשיח רגיל, בה ההוראה מועברת ישירות לדיסק.

=== יישום בחומרה ===
בחומרה, המערך מיושם על ידי בקר, שדרכו מתקשרת מערכת ההפעלה עם הדיסקים הקשיחים. בקר כזה יכול להיות חלק מלוח האם של המחשב, או כרטיס הרחבה נפרד.

כאשר מערך ה-RAID מיושם בחומרה, מערכת ההפעלה אינה עוסקת בניהולו (ומכך, גם המעבד המרכזי). בזמן פעולת קריאה או כתיבה, הבקר מחשב בעצמו את מיקום המידע וכן את הזוגיות - אם יש צורך - ובכך חוסך עבודה למעבד הראשי של המחשב.

==== זיכרון מטמון ====
למערך RAID המיושם בחומרה ניתן להוסיף גם זיכרון מטמון כדי להאיץ את הגישה אליו: בכל גישת כתיבה, המידע נכתב ראשית לזיכרון המטמון, שהגישה אליו מהירה יותר מן הגישה לדיסקים הקשיחים, ולאחר מכן נכתב לדיסקים עצמם. במקרה ומתקבלת בקשה לקריאה מאותו המיקום אליו נכתב מידע שקיים בזיכרון המטמון, מערך ה-RAID יכול להחזיר את המידע למערכת ההפעלה ללא גישה איטית לדיסקים הקשיחים עצמם. אף על פי שזיכרון המטמון קטן בהרבה מגודל הדיסקים הקשיחים במערך - ולכן רק חלק קטן מהמידע נשמר בו - שיטה זו משפרת את ביצועי מערך ה־RAID במידה ניכרת, מכיוון שבמקרים רבים יישומים ניגשים למידע שנכתב לדיסקים בזמן האחרון.

כדי למנוע מקרה בו כיבוי פתאומי של המתח למערך ה-RAID (למשל, בעת הפסקת חשמל) גורם לאיבוד מידע, המידע שהיה נמצא בזיכרון המטמון היה נשמר באמצעות בטריה עד 72 שעות בדומה לבטריה של ה־BIOS, כיום מקובל להשתמש בזיכרון לא נדיף, כדוגמת זיכרון הבזק (Flash) בתור גיבוי ברגע שהמתח נופל כל המידע שנמצא בזיכרון המטמון נשמר שם, בדרך הזאת אתה לא מוגבל בזמן וכו'.

== היסטוריה ==
נורמן קן אוצ'י מ-IBM, רשם בשנת 1978 פטנט

על RAID תחת הכותרת "מערכת לשחזור מידע שאוחסן ביחידת זיכרון שכשלה". תוכן הפטנט מתאר מערכת RAID בה המידע מחולק לרצועות, בדומה ל-RAID רמה 5. בנוסף, מתוארת מערכת עם שכפול ומערכת עם הגנת זוגיות, כפי שתוארה לעיל.

המונח "RAID" נטבע בשנת 1987 על ידי דוד פטרסון, גארת' גיבסון ורנדי כץ באוניברסיטת ברקלי שבקליפורניה, ארצות הברית. במאמר של השלושה משנת 1988 הוגדרו לראשונה רמות ה-RAID התאורטיות בין 1 ל-5. למעשה, מימושי ה-RAID שבאו מאוחר יותר שונים מהותית מההגדרות המקוריות, אף שהם עדיין מסומנים במספרים הרמות המקוריים.

== ראו גם ==
* דיסק קשיח
* SAN
* מערך יתיר של זיכרון עצמאי

== קישורים חיצוניים ==

* [http://webcourse.cs.technion.ac.il/234322/Winter2006-2007/ho/WCFiles/02-raid_1x1.pdf מערך RAID], הרצאה מתוך הקורס "מערכות קבצים" של הפקולטה למדעי המחשב בטכניון
* [http://www.acnc.com/raid.html רמות RAID באיורים] 
* [http://wintelguy.com/raidcalc.pl RAID Capacity Calculator] - מחשבון RAID 

==הערות שוליים==

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:דיסקים קשיחים
קטגוריה:חומרה