הקדמה
לינוקס יש מערכות חזקות וכלי כלים לניהול מכשירי חומרה, כולל כונני אחסון. במאמר זה נכסה, ברמה גבוהה, איך לינוקס מייצגת את המכשירים הללו ואיך אחסון גולמי הופך למרחב משתמש על השרת.
מהו אחסון בלוקים?
אחסון בלוקים הוא שם נוסף למה שלינוקס קוראת לו: מכשיר בלוק. מכשיר בלוק הוא חלק חומרה שניתן להשתמש בו לאחסון נתונים, כמו כונן קשיח רגיל (HDD) הפועל במסתורת, כונן קשיח סולידי (SSD), דיסק זיכרון פלאש וכדומה. הוא נקרא מכשיר בלוק מכיוון שהקרנל מתקשר עם החומרה על ידי הפנייה לבלוקים בגודל קבוע, או חתיכות של מרחב.
במילים אחרות, אחסון בלוקים הוא מה שאתה חושב עליו כאחסון דיסק רגיל במחשב. לאחר שהוא מוגדר, הוא פועל כהרחבה של עץ הקבצים הנוכחי ואתה צריך להיות מסוגל לכתוב או לקרוא מידע מכל כונן באופן דחוף.
מהם מפרטי הדיסקים?
המחיצות של דיסק הן דרך לחלק כונן אחסון ליחידות קטנות יותר שימושיות. מחיצה היא חלק מכונן אחסון שניתן לטפל בו בדיוק באותו אופן שיכול לטפל בכונן עצמו.
המחיצות מאפשרות לך לקטן את המקום הזמין ולהשתמש בכל מחיצה למטרה שונה. זה נותן למשתמש גמישות נוספת, מאפשר לו לחלק דיסק יחיד למספר מערכות הפעלה, מרחב תחליפין או מערכות קבצים מתקדמות.
בעוד ניתן לפורמט ולהשתמש בדיסקים בלעדיים, סביר לצפות ממערכות הפעלה למצוא טבלת מחיצות, גם אם יש רק מחיצה אחת כתובה לדיסק. כללית נמלץ לחלק דיסקים חדשים למעמד גמיש יותר.
MBR נגד GPT
בעת חלוקת דיסק, חשוב לדעת איזו פורמט המחיצה תשמש. בדרך כלל זה ניכר כבר בבחירה בין MBR (Master Boot Record) ו-GPT (GUID Partition Table).
MBR יש לו יותר מ-30 שנה. בגלל זיקתו, יש לו מגבלות רציניות. לדוגמה, אי אפשר להשתמש בו עבור דיסקים בנפח מעל 2TB ואפשר ליצור עד ארבע מחיצות פרמאריות בלבד.
GPT הוא מערכת מחילוק דיסקים יותר מודרנית המפתורת חלק מהבעיות הטמונות ב-MBR. מערכות הפעלה העוברות על GPT יכולות לכלול מספר רב יותר של מחילוקים לכל דיסק. זה נגזר בדרך כלל רק מהמגבלות שהוטלו על ידי מערכת ההפעלה עצמה. בנוסף, אין הגבלה על גודל הדיסק כאשר משתמשים ב-GPT ומידע הטבלת המחילוקים זמין במקומות מרובים כדי להגן עליו מפגיעה. GPT יכול גם לכתוב "MBR מגן" לתאימות עם כלים התומכים רק ב-MBR.
ברוב המקרים, GPT הוא הבחירה הטובה יותר אלא אם המערכת ההפעלה שלך מונעת אותך מלהשתמש בו.
פורמט ומערכות קבצים
בעוד שליבת הלינוקס יכולה לזהות דיסק גולמי, עליו להיות מופורמט כדי להשתמש בו. פורמט הוא התהליך שבו נכתבת מערכת קבצים לדיסק ומוכן לפעולות קבצים. מערכת קבצים היא המערכת שמבנה את המידע ושולטת באופן שבו מתבצעת כתיבה וחיפוש של מידע מהדיסק התחתון. ללא מערכת קבצים, לא הייתה מסוגלת להשתמש במכשיר האחסון לכל פעולות מערכת קבצים סטנדרטיות.
קיימים רבים מיני פורמטים של מערכות קבצים, כל אחת עם התמרות, כולל תמיכה במערכות הפעלה. כולן מציגות למשתמש תצוגה דומה של הדיסק, אך התכונות והפלטפורמות שהן תומכות בהן יכולות להיות שונות מאוד.
חלק מהמערכות הקבצים הפופולריות יותר עבור לינוקס הן:
- Ext4: המערכת הקבצים המובילה ביותר ברירת המחדל היא Ext4, היורשת של Ext2 ו- Ext3. מערכת הקבצים Ext4 היא מקובלת עם יומן, תואמת לאחור מערכות מקוריות, יציבה ויש בה תמיכה וכלי מבוגרים. זו בחירה טובה אם אין לך צרכים מתמחים.
- XFS: XFS מתמחה בביצועים וקבצים גדולים. היא מתבנתת מהר ויש לה תכונות עבודה טובות כאשר מתמודדים עם קבצים גדולים וכאשר עובדים עם דיסקים גדולים. למערכת יש גם תכונות ליצירת צילומי רגע חי. XFS משתמשת ביומן מטא ולא בכתיבת יומן לשני הנתונים והמטא. זה גורם לביצועים מהירים, אך עשוי לגרום לפגיעה בנתונים במקרה של אובדן כוח פתאומי.
- Btrfs: Btrfs היא מערכת קובץ מודרנית ועשירה בתכונות של העתק על הכתב. הארכיטקטורה הזו מאפשרת לשוכב הנתונים של הקובץ לאפשר פונקציות ניהול נפח בתוך שכבת הקובץ, כולל צילומי רגע ושכפול. היא משמשת כברירת המחדל בקצה צרכני ומסחרי של חומרת NAS (אחסון מקושר לרשת), ופופולרית למערכות מרובות דיסקים מוקדשות
- ZFS: ZFS היא מערכת קובץ של העתק על הכתב נוספת ומנהל נפח עם סט תכונות חזק ובשל. היא מתחרה בצורה פורה עם Btrfs, יש בה תכונות של תקינות נתונים, היא יכולה לטפל בגדלי מערכת קבצים גדולים, יש לה תכונות נפח רגילות כמו צילומי רגע ושכפול, ויכולה לארגן נפחים למערכות RAID ודומות לRAID לרעננות וביצועים. ZFS יש לה היסטוריה מדוברת בשל השוקל רישיונות, אך היא לא הרבה יותר או פחות פופולרית מ- Btrfs כאשר משקללים תמיכה מסחרית.
בנוסף, Windows בעיקר משתמשת ב-*NTFS* ו־ExFAT וְmacOS בעיקר משתמשת ב־HFS+ ו־APFS. בדרך כלל, אפשר לקרוא ולפעמים גם לכתוב בפורמטים האלו של מערכות קבצים בפלטפורמות שונות, אך ייתכן וידרושו כלי תאימות נוספים.
איך Linux ניהלת מכשירי אחסון
קבצי מכשיר ב־/dev
ב-Linux, כמעט כל דבר מיוצג כקובץ במערכת הקבצים. זה כולל חומרה כמו כונני אחסון, המיוצגים במערכת כקבצים בתיקיית /dev
. לרוב, קבצים המייצגים מכשירי אחסון מתחילים עם sd
או hd
ואחריהם אות. לדוגמה, הכונן הראשון בשרת הוא בדרך כלל משהו כמו /dev/sda
.
המחיצות על הכוננים האלו גם יש להן קבצים בתוך /dev
, המיוצגים על ידי הוספת מספר המחיצה לסיומת של שם הכונן. לדוגמה, המחיצה הראשונה בכונן מהדוגמה הקודמת היא /dev/sda1
.
בעוד הקבצים בתיקיית /dev/sd*
ו-/dev/hd*
מייצגים את הדרך המסורתית להתייחס לתקליטים ולמחיצות, ישנה חסרון משמעותי בשימוש בערכים אלה בלבד. ללינוקס יש גורם החלטה המחליט איזה מכשיר מקבל איזו שם בכל הפעלה, לכן זה עשוי להוביל למצבים מבלבלים שבהם המכשירים שלך משנים קודים של מכשירים.
כדי להתמודד עם בעיה זו, התיקייה /dev/disk
מכילה תת-תיקיות המתאימות לדרכים שונות, יותר עמידות, לזיהוי תקליטים ומחיצות במערכת. אלה מכילים קישורים סמליים שנוצרים בעת האתחול חזרה אל הקבצים הנכונים /dev/[sh]da*
. הקישורים מקובעים לפי מאפייני הזיהוי של התיקייה (לדוגמה, לפי תווית המחיצה בתיקיית /dev/disk/by-partlabel
). קישורים אלה יצביעו תמיד למכשירים הנכונים, ולכן ניתן להשתמש בהם כזיהויים סטטיים למרחבי אחסון.
תת-תיקיות הבאות עשויות להיות קיימות תחת /dev/disk
:
by-label
: רוב המערכות קבצים יש להן מנגנון תיוג שמאפשר את שיוך שמות מותאמים אישית לתקליט או למחיצה. תיקייה זו מורכבת מקישורים בשמות המוגדרים על ידי המשתמשים.by-uuid
: UUIDs, או מזהים ייחודיים אוניברסליים, הם מחרוזת ארוכה וייחודית של אותיות ומספרים שניתן להשתמש בהם כמזהה למשאב אחסון. אלה לרוב לא קליטים מאוד לקריאה על ידי אדם, אך כמעט תמיד ייחודיים, גם במערכות שונות. לכן, ייתכן ויהיה רעיון טוב להשתמש ב-UUIDs להפניה לאחסון שעשוי להעביר בין מערכות, מאחר שהתנגשויות בשמות פחות יכולות לקרות.by-partlabel
ו־by-partuuid
: טבלאות GPT מציעות סט משלה של תוויות ו־UUIDs, שיכולים גם לשמש לצורך זיהוי. זה פועל בדיוק באותו אופן כמו שני הספריות הקודמות, אך משתמש בזהויות הספציפיות של GPT.by-id
: ספרייה זו מכילה קישורים שנוצרו על ידי מספרי סידור הסידור של החומרה והחומרה שהם מחוברים אליה. זה לא קבוע לגמרי, מכיוון שהדרך שבה המכשיר מחובר למערכת עשויה לשנות את שמוby-id
.by-path
: כמוby-id
, ספרייה זו תלויה בחיבור של כונן אחסון למערכת עצמה. הקישורים כאן מורכבים באמצעות ההפעלה של המערכת על החומרה המשמשת לגישה למכשיר. זה יש לו את אותם חסרונות כמוby-id
, מכיוון שחיבור מכשיר ליציאה שונה עשוי לשנות את הערך.
בדרך כלל, by-label
או by-uuid
הם האפשרויות הטובות ביותר לזיהוי קבוע של מכשירים ספציפיים.
הערה: נפחי אחסון בלוק של DigitalOcean שולטים על מספרי סידור הסידור שנדווחים למערכת ההפעלה. זה מאפשר לקטגוריה by-id
להיות קבועה באופן יציב בפלטפורמה זו. זו השיטה המועדפת להתייחס לנפחי אחסון של DigitalOcean מכיוון שהיא גם קבועה וצפויה בהפעלה הראשונה.
עקיבה אחרי יחידות בלוק
ב-Linux ובמערכות הפעלה דומות ל־Unix אחרות, כל המערכת, בלתי תלויה בכמה מכשירים פיזיים נמצאים, מיוצגת על ידי עץ קבצים אחד מאוחד. כאשר מערכת קבצים על כונן או מחיצה צריכה להשתמש, עליה להיות מחוברת לעץ הקיים. ה־Mounting הוא התהליך של חיבור מחיצה מעוצבת או כונן לתיקייה בתוך מערכת הקבצים של Linux. תוכן הכונן יכול להיגש מאותה תיקייה.
כמעט תמיד כוננים מותקנים על תיקיות ריקות מיועדות – התקנה על תיקייה שאינה ריקה אומרת שתוכן התיקייה הרגיל יהיה לא נגיש עד שהכונן יוסר). ישנם רבים מאוד אפשרויות הרכבת שניתן להגדיר כדי לשנות את התנהגותם של מכשירים מורכבים. לדוגמה, הכונן יכול להיות מורכב במצב קריאה בלבד כדי לוודא שתוכנו לא ישתנה.
ה־Filesystem Hierarchy Standard ממליץ על השימוש ב־/mnt
או בתת־תיקייה תחתיה לקבצי מערכת מותקנים באופן זמני. הוא לא נותן המלצות באיפה להרכיב אחסון קבצים קבוע יותר, כך שתוכל לבחור באיזו תכנית שתרצה. ברוב המקרים, תתי־התיקיות /mnt
או /mnt
משמשות גם לאחסון קבצים קבועים יותר.
הפיכת הרכבות לקבועות באמצעות /etc/fstab
מערכות Linux משתמשות בקובץ בשם /etc/fstab
(טבלת מערכת קבצים) כדי לקבוע אילו מערכות קבצים לטעון במהלך תהליך ההפעלה. מערכות קבצים שאין להן רשומה בקובץ זה לא יוטענו אוטומטית אלא אם נותבו על ידי תכנה אחרת.
כל שורה בקובץ /etc/fstab
מייצגת מערכת קבצים שונה שצריך לטעון. שורה זו מציינת את מכשיר הבלוק, נקודת הטיה שבה יש לקשור אותו, פורמט הדיסק, אפשרויות הטעינה, וגם מספר פרטים נוספים.
ניהול אחסון מורכב יותר
במובן רב ייתכנו מקרים שבהם תתאים את התכונות הבסיסיות הללו, אך ישנם פרדיגמות ניהול מורכבים יותר זמינים לשילוב יחד מספר דיסקים, בעיקר RAID.
מהו RAID?
RAID ראשי תיבות של redundant array of independent disks. RAID הוא טכנולוגיית ניהול אחסון ווירטואליזציה שמאפשרת לך לקבץ דיסקים יחד ולנהל אותם כיחידה אחת עם יכולות נוספות.
התכונות של מערך RAID תלויות ברמת ה-RAID שלו, שמגדירה איך הדיסקים במערך קשורים זה לזה. כמה מהרמות הנפוצות כוללות:
- RAID 0: רמה זו מציינת פיצול של המידע לדיסקים (נקרא גם "striping"). זה אומר שכשהמידע נכתב למערך, הוא מתפזר ומתוודע ליניארית בין הדיסקים בסט. זה מספק תוצאה מהירה מאוד, מכיוון שניתן לכתוב או לקרוא ממספר דיסקים בו זמנית. החסרון הוא שכשהדיסק נופל, ניתן לאבד את כל המידע במערך בשל כך שלא קיים דיסק אחד שמכיל מספיק מידע לבנייה מחדש. רגיל לא להשתמש ב-RAID 0 בפועל משום שיכול לשמש רק כפואנט להשוואה.
- RAID 1: RAID 1 מציין מערך של העתקת דיסקים (נקרא גם "mirroring"). כל מידע שנכתב למערך RAID 1 נכתב למספר דיסקים. היתרון העיקרי הוא באיכות העמידות: מידע יכול להישרד אובדן דיסק בכל צד של המראה. מכיוון שישנם דיסקים מרובים המכילים את אותו מידע בדיוק, נפח השטח הזמין יקטן לפחות במחצית.
- RAID 5: RAID 5 מפזר מידע על מספר דיסקים, דומה ל-RAID 0. אך רמה זו גם מיישם שמירה מבוזרת על הדיסקים. זה אומר שאם דיסק נכשל, הדיסקים הנותרים יכולים לבנות מחדש את המערך באמצעות המידע על השמירה המשותף לכולם. כללית, זה מספיק כדי לבנות מחדש דיסק אחד, שמשמעו שהמערך יכול לשרוד אובדן דיסק אחד. RAID 5 מפחית את השטח הזמין במערך בגודל הדיסק האחד.
- RAID 6: RAID 6 מציע את אותן מאפיינים כמו RAID 5, אך מספק פריטיות כפולה. זה אומר שמערכות RAID 6 יכולות לעמוד באובדן של שני דיסקים. קיבולת המערך נפגעת שוב מכמות הפריטיות, הכוונה שהקיבולת השימושית נקטעת במקום שני דיסקים.
- RAID 10: RAID 10 הוא שילוב של רמות 1 ו־0. לראשונה, נעשים שני סטים של מערכות מרובות. לאחר מכן, הנתונים מפולטים חוצה עליהם. זה יוצר מערך שיש לו תכונות של גמישות מול האובדן ומספק ביצועים טובים. עם זאת, זה דורש מספר דיסקים רב והקיבולת הכוללת עדיין פחותה מחצי מהמקום הכולל של הדיסקים המשולבים.
לאן ללכת למעבר?
אם יש לך מכשיר אחסון חדש שתרצה להשתמש בו במערכת ה־Linux שלך, מאמר זה ידריך אותך דרך התהליכים של חלוקת הדיסק, הפירמוט והזרמת הקובץ החדש שלך. זה יהיה מספיק לרוב המקרים בהם אתה רוצה להוסיף קיבולת נוספת בעיקר. כדי ללמוד איך לבצע משימות ניהול אחסון, תבדוק את איך לבצע משימות בסיסיות לניהול מכשירי אחסון ב־Linux.