- GRUB לעיתים קרובות נשבר לאחר שינויי מחיצה, התקנות של מערכות אחרות או עדכונים, אך כמעט תמיד ניתן לשחזר אותו.
- קונסולת GRUB עצמה מאפשרת לך לאתר את /boot/grub, לטעון את הליבה באופן ידני ולאתחל מבלי להסתמך על LiveCD.
- לאחר שהמערכת הותחלה, חיוני להתקין מחדש ולעדכן את GRUB מ-Linux כדי למנוע הישנות של התקלה.
- במקרים חמורים יותר, שיטות המשתמשות ב-LiveUSB, chroot וכלים כמו Boot-Repair מציעות תיקון עמוק יותר.

אם אי פעם הפעלתם את המחשב שלכם ובמקום לראות את הלוגו של מערכת ההפעלה, נתקלתם במסך שחור והודעה כמו "שגיאה: אין התקן כזה" או "grub rescue ", אתם יודעים בדיוק כמה זה מרגיש פאניקה. פתאום, נראה כאילו איבדתם את כל המערכת, שתצטרכו לאתחל ושהנתונים שלכם בסיכון... אבל המציאות היא שברוב המקרים, ניתן לתקן זאת מבלי לנקוט באמצעים דרסטיים כאלה.
החדשות הטובות הן שלמרות שנראה שמדובר בבעיה רצינית, תיקון GRUB ללא LiveCD אפשרי לחלוטין באמצעות קונסולת GRUB עצמה, בתנאי שהנזק לדיסק אינו קטסטרופלי. עם קצת סבלנות, כמה פקודות כתובות היטב והבנה של מה שקורה מאחורי הקלעים, תוכלו להפעיל מחדש את מערכת הלינוקס שלכם, להתקין מחדש את מנהל האתחול ולהכין אותה לאתחול מחדש עתידי.

לפני שנתחיל לכתוב כמו משוגעים, חשוב להבין את התפקיד שממלא GRUB באתחול המחשב. GRUB 2 הוא מנהל האתחול בו משתמשים רוב הפצות GNU/Linux המודרניות: הוא מותקן בדרך כלל ב-MBR או בחלק העליון של המחיצה ואחראי על הצגת התפריט עם מערכות ההפעלה הזמינות וטעינת ליבת לינוקס עם הפרמטרים המתאימים לה.
מנהל האתחול הזה מסתמך על קבצים שבדרך כלל נמצאים בספרייה /boot/grub של ההתקנה שלך: מודולים, קבצי תצורה, תמונות ליבה, initrd וכו'. אם ספרייה זו הופכת לבלתי נגישה, מועברת, פגומה או משנה דיסקים מבלי ש-GRUB ישים לב, תתחיל לראות שגיאות כמו "אין התקן כזה", "מערכת קבצים לא ידועה" או את הפקודה המפחידה grub rescue>.
הסיבות האופייניות לקריסת המנהל ידועות למדי: התקנת Windows לאחר Linux ודריסת ה-MBR , התעסקות עם מחיצות (שינוי גודל, העברה, מחיקה, יצירת חדשות) בעזרת כלים כמו GParted או דומים, או אפילו עדכון ליבה או מערכת שמשאיר, מסיבה כלשהי, הפניות לא עקביות בתצורת GRUB.
בנוסף לכל זה, חלק מהמשתמשים מעדיפים להתקין את /boot במחיצה נפרדת , נוהג נפוץ בתצורות מתקדמות או בסביבות בהן שאר הדיסק אמור להיות מוצפן. במקרים אלה, כל שינוי במחיצה זו או במספר הדיסק שלה עלול לגרום ל-GRUB לא להיות מסוגל לאתר את המודולים והתצורה שלו.
סוגי שגיאות GRUB ומצבי קונסולה
כאשר GRUB נכשל, הוא בדרך כלל לא פשוט נעלם: הוא בדרך כלל משאיר אותך במעין קונסולה או תפריט הצלה שבאמצעותו תוכל להשתמש כדי לאתחל את המערכת באופן ידני. ההתנהגות משתנה מעט בהתאם לחומרת הבעיה ולגרסת GRUB שהתקנת.
בהפצות רבות תראו שהמערכת מנסה לטעון את GRUB ובסופו של דבר קורסת. הנחיה עם הטקסט grub rescue>מצב זה מוגבל למדי, אך הוא מאפשר לך להפעיל כמה פקודות מפתח כגון ls, set o insmod, מספיק כדי לאתר את המחיצה הנכונה ולאלץ את טעינת מודול לינוקס.
במקרים אחרים, תראו את תפריט GRUB הרגיל (רשימת מערכות ההפעלה), אך ניסיון האתחול ייכשל, או שהתפריט ייראה פגום. משם, תוכלו ללחוץ על מקש 'c' כדי להיכנס לשורת הפקודה המלאה של GRUB, שהיא הרבה יותר חזקה ממצב הצלה, עם מגוון רחב יותר של פקודות זמינות.
בהתקנות ישנות יותר, חלק מהמערכות עדיין משתמשות ב- GRUB Legacy (לא GRUB 2), כגון גרסאות מסוימות של CentOS 5/6 או הפצות ישנות יותר. במקרים אלה, תחביר הפקודה משתנה מעט, אך הרעיון הכללי זהה: אתר את הספרייה /boot, אמור ל-GRUB היכן נמצאת ספריית השורש שלה, וטען ידנית את הליבה ואת initrd.
כיצד לתקן GRUB ללא LiveCD באמצעות מצב הצלה
כאשר המחשב אינו מוצא את מנהל האתחול שתצורתו מוגדרת כהלכה, די נפוץ לראות הודעה כמו "שגיאה: אין התקן כזה" ואחריה "grub rescue>" . משמעות הדבר היא ש-GRUB הצליח לפעול, אך הוא אינו יודע היכן נמצאים קבצי התצורה שלו או המודולים הדרושים לו.
בתרחיש זה, יש לך מיני-מפרש פקודות המאפשר לך לגלות את המחיצות, לאתר את /boot/grub ולטעון את הליבה באופן ידני . התהליך אולי נשמע ארוך, אך הוא די שיטתי.
רשימת דיסקים ומחיצות זמינים
הצעד הראשון הוא לברר אילו דיסקים ומחיצות GRUB רואה במחשב שלך. לשם כך, בשורת grub rescue> , הקלד:
ls
הפקודה תציג משהו דומה ל (hd0) (hd0,1) (hd0,2) (hd0,3) (hd1) (hd1,1) (hd1,2). כֹּל hdX מייצג כונן קשיח אחר: hd0 יהיה הדיסק הפיזי הראשון, hd1 השניוכן הלאה. גרסאות עם פסיק, כגון (hd0,1), מציינות את המחיצות הממוספרות של דיסק זה.
בהתאם למחשב שלך, ייתכן שתראה דיסק בודד כמו (hd0) עם שתיים או שלוש מחיצות, או מספר דיסקים: (hd0,1) (hd1,1) (hd1,5) (hd2,1) (hd3,1) . בכל מקרה, המטרה כעת פשוטה: פתח כל מחיצה עד שתמצא את זו המכילה את הספרייה /boot/grub.
אתר את המחיצה באמצעות /boot/grub
כדי לבדוק את תוכן המחיצה, נשתמש שוב ב- ls אלא להוסיף את שם המחיצה וקו נטוי בסוף. לדוגמה: בדוק את התוכן זה יעזור לך לזהות אם זה הנכון.
ls (hd0,1)/
אם למחיצה זו יש מערכת קבצים ש-GRUB מזהה, היא תציג רשימת ספריות: תראו שמות כמו bin וכו', home, boot, root וכו'. במקרה כזה, מחיצה זו יכולה להיות הבסיס (/) או מחיצה נפרדת מ-/boot, בהתאם למבנה שהיה לכם בעת התקנת המערכת. אם הרישום מציין מערכת קבצים ש-GRUB מזהה , אתם בדרך הנכונה.
אם, בעת הפעלת הפקודה הקודמת, אתם רואים ספריות בשם boot , תוכלו להתעמק ולבדוק אם הן מכילות את תיקיית grub:
ls (hd0,1)/boot/grub
כאשר תמצאו רשימה של קבצים הכוללת מודולים כמו linux.mod או קבצי GRUB אופייניים אחרים, איתרתם את המחיצה שאתם מחפשים . אם לא מופיע דבר או שאתם מקבלים שגיאה, המשיכו לנסות את המחיצות האחרות: ls (hd0,2)/ , ls (hd1,1)/ , וכו', עד שתמצאו את המתאימה.
ספר ל-GRUB היכן נמצאים הקבצים שלך.
לאחר שזוהתה המחיצה הנכונה, יש להודיע ל-GRUB היכן ממוקמים המודולים והתצורה שלה . נניח שגילינו ש-/boot מופעל (hd0,1). השלב הבא הוא להגדיר את הקידומת:
set prefix=(hd0,1)/boot/grub
בעזרת הוראה זו, מנהל המערכת ידע שקבצי התמיכה שלו ממוקמים בנתיב זה. עלינו גם לציין לו באיזו מחיצת שורש להשתמש כדי למצוא את הליבה ואת שאר נתוני המערכת:
set root=(hd0,1)
חשוב לכתוב את הזוג בצורה נכונה. (דיסק, מחיצה) ותמיד להשתמש בקו נטוי אחרון / כאשר אנו מפרטים תוכן עם lsכמו כן, קחו בחשבון שפריסת המקלדת של קונסולת GRUB היא בדרך כלל אמריקאית, כך שהסוגריים ומקשי הלוכסן עשויים שלא להתאים למה שאתם רואים מודפס עליהם. נוהג טוב הוא לוודא הגדר את הקידומת בצורה נכונה לפני שתנסה לטעון מודולים.
טען את מודולי GRUB ואת ליבת לינוקס
לאחר הגדרת הקידומת, השלב הבא הוא לאלץ את טעינת מודול GRUB Linux . במדריכים רבים תראו משהו כמו:
insmod (hd0,1)/boot/grub/linux.mod
במערכות מודרניות רבות, המודול המתאים עשוי להיות רגיל.mod או אחרים, אבל הרעיון זהה: אם אינך בטוח בשמות המדויקים, השתמש בפקודה ls (hd0,1)/boot/grub כדי לרשום את הקבצים, בחר את המודול המתאים בהתבסס על גרסת ה-GRUB שלך. הפונקציה של insmod זה כרוך בטעינת המודול הדרוש כדי להמשיך בתהליך האתחול. שימו לב ש insmod זוהי ההוראה שבאמת משלבת את המודול לתוך המטען.
הבא תצטרך טען את תמונת ליבת לינוקס המציין את הנתיב שלו בתוך מערכת הקבצים. דוגמה להפעלה: linux /boot/vmlinuz-4.13.3-generic root=/dev/sda1
שם הליבה המדויק ישתנה במחשב שלך (ייתכן vmlinuz-2.6.32-23-גנרי, vmlinuz-6.1.0-10-amd64 או כל גרסה אחרת). ניתן להשתמש, שוב, ls /boot כדי לראות אילו תמונות זמינות לך ולבחור את העדכנית ביותר. חשוב לא לשכוח את הפרמטר. root=/dev/sdXn עם מחיצת השורש הנכונה.
כדי למנוע בלבול בנוגע לשקילות בין מוסכמות מתן שמות של GRUB ו-Linux, זכרו ש- hd0 מתאים ל-/dev/sda, hd1 ל-/dev/sdb, hd2 ל-/dev/sdc , וכן הלאה. גם פורמט מספר המחיצה משתנה: (hd0,1) הופך ל-/dev/sda1, (hd1,2) הופך ל-/dev/sdb2, וכו'.
במקרים מסוימים, לאחר טעינת תמונת הליבה, מומלץ לטעון את תמונת initrd (דיסק ה-RAM הראשוני) אם ההפצה שלך דורשת זאת. הפקודה הטיפוסית תהיה:
initrd /initrd.img
כמו עם הליבה, ניתן לבדוק אילו קבצי initrd זמינים עם ls / o ls /boot ולהשתמש ב מקש טאב כדי להשלים שמות באופן אוטומטי ולמנוע שגיאות כתיב.
אתחל את המערכת והתקן מחדש את GRUB מ-Linux
לאחר טעינת הליבה וכל קובץ initrd, כל שעליך לעשות הוא להורות ל-GRUB להתחיל את תהליך האתחול . לשם כך, פשוט הקלד:
לִקְפּוֹץ: boot
אם הכל ילך כשורה, הליבה תשתלט, מערכת ההפעלה תאתחל כרגיל, ותוכלו להתחבר למערכת הלינוקס שלכם. בשלב זה, הצלחתם להציל את המצב מבלי להזדקק ל-LiveCD, אך עדיין יש שלב חשוב אחד: התקנה מחדש של GRUB כדי למנוע ממנו להיכשל שוב באתחול מחדש הבא.
לאחר כניסת המערכת, פתח מסוף עם הרשאות משתמש-על (root או באמצעות sudo) והריצו: grub-install /dev/sdX
כאשר /dev/sdX הוא הדיסק (לא המחיצה) שבו ברצונך למקם את מנהל האתחול, לדוגמה /dev/sda או /dev/sdb אם אתה נמצא על דיסק אחר. זכור שאסור לציין כאן את מספר המחיצה: הפקודה כותבת את מנהל האתחול ל-MBR או לאזור האתחול של כל הדיסק.
בהפצות רבות מבוססות דביאן או אובונטו, מומלץ מאוד גם ליצור מחדש את קובץ התצורה של GRUB כדי להבטיח שהוא יזהה נכון את כל המערכות המותקנות. ניתן לעשות זאת באמצעות:
לָרוּץ: update-grub o update-grub2
ואם ברצונך גם לעדכן את תמונת האתחול הראשונית, עדכן את initramfs עם:
פקודה: update-initramfs -u
במקרים אחרים, הבעיה עם GRUB אינה כה קיצונית ואתם אכן רואים את תפריט האתחול , אך חלק מהמערכות אינן מאתחלות, מופיעה שגיאה בעת בחירת ערך ספציפי, או שאתם פשוט חושדים שהתפריט מוגדר בצורה שגויה.
במקרים אלה, כאשר תראו את תפריט GRUB בעת הפעלת המחשב, תוכלו ללחוץ על חצי הכיוון (למעלה או למטה) כדי לעצור את ספירת האתחול האוטומטית, ולאחר מכן ללחוץ על מקש c כדי לגשת לשורת הפקודה המלאה.
מאותה קונסולה מתקדמת, ה- הפקודות הן בעצם אותן הפקודות מאשר במצב הצלה, אך יהיו לך יותר כלים לבדיקת המערכת. לדוגמה, תוכל להשתמש ls כדי לרשום דיסקים ומחיצות, set כדי להציג ולשנות משתני סביבה של GRUB, insmod כדי לטעון מודולים נוספים או אפילו פקודות כמו cat כדי לקרוא את תוכן קבצי הטקסט.
בהתאם לאותה תוכנית, תחילה תקבעו אילו דיסקים ומחיצות יש לכם עם:
ls
ותראה פלט מהסוג (hd0) (hd0,msdos1) (hd0,msdos5) או (hd0,1) (hd1,1) (hd1,5) (hd2,1) , בהתאם לסוג טבלת המחיצות שלך, MBR (msdos) או GPT, ולמספר הדיסקים הקיימים במחשב.
לאחר מכן תבדוק כל מחיצה באמצעות פקודות כמו:
ls (hd0,msdos1)/
עד שתמצא את ספריית האתחול ובתוכה את תיקיית grub . לאחר הזיהוי, תחזור על תהליך הגדרת הקידומת וה-root באמצעות:
set prefix=(hd0,msdos1)/boot/grub
set root=(hd0,msdos1)
משם, תחפשו גרעינים זמינים על ידי רישום התוכן של /boot:
רשימת אתחול: ls /boot
ותבחרו אחד מהם לטעון איתו:
linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1
התאמת גרסת הליבה ומחיצת השורש למקרה הספציפי שלך. זכור את מיפויי הדיסק: hd0 → /dev/sda, hd1 → /dev/sdb, hd2 → /dev/sdc וכו'. ניתן להשתמש במקש TAB כדי להשלים אוטומטית נתיבים ושמות קבצים.
לבסוף, תטען את initrd במידת הצורך ותבצע את הפקודה אתחול כדי להפעיל את המערכת. לאחר הכניסה, הפעולה שיש לבצע זהה לזו בתרחיש הקודם: התקן מחדש את GRUB על הדיסק ועדכן את התצורה שלו באמצעות grub-install /dev/sda y update-grub.
תיקון GRUB במערכות עם GRUB Legacy
למרות שרוב ההפצות אימצו כיום את GRUB 2, עדיין ניתן למצוא מכונות ישנות יותר או מערכות ספציפיות המשתמשות ב-GRUB Legacy . הממשק במקרים אלה שונה במקצת, אך הרעיון הבסיסי נותר זהה: ניתן להשתמש במעטפת bootloader אינטראקטיבית כדי להפעיל מחדש את המערכת.
עם ההפעלה, GRUB קלאסי זה בדרך כלל מאפשר גישה לשורת הפקודה שלך על ידי לחיצה על מקש ספציפי (לעתים קרובות המקש c או המפתח e (לעריכת ערכים). לאחר שתגיעו לפקודה, יש לכם פקודות כגון find אשר שימושיים במיוחד.
לדוגמה, אם ברצונך לאתר את ספריית /boot המכילה את תמונות הליבה ואת קובץ initrds, תוכל להשתמש ב:
פקודה למצוא: find /boot/grub/stage1 או מסלול דומה
תלוי האם /boot היא מחיצה נפרדת או שזה בתוך השורש, הנתיב יהיה /boot o simplemente / עם תיקיות משנה אחרות. כאשר אתה מוצא את המחיצה הנכונה, GRUB Legacy בדרך כלל מציג משהו כמו (hd0,0) או זוג דיסק/מחיצה אחר שתוכלו לעשות בו שימוש חוזר.
בשלב הבא, תצטרכו להגדיר את שורש GRUB באמצעות פקודה כזו:
דוגמה לשורש: root (hd0,0)
ותציין היכן ממוקמים הליבה וה-initrd. שוב, בדרך כלל אינך צריך להקליד את שמות הקבצים המלאים, מכיוון שמקש TAB משלים אוטומטית ועוזר לך להימנע משגיאות כתיב בנתיבים ארוכים.
כדי לבצע כוונון עדין עוד יותר, ניתן להשתמש בפקודה cat כדי לקרוא את קובץ התצורה של GRUB (לדוגמה, /boot/grub/menu.lstולבדוק איזה התקן רכוב על ספריית השורש, אילו פרמטרים של הליבה מועברים וכו'. זוהי דרך מעשית מאוד ל העתק את אותה תצורה בה השתמשה המערכת כשהיא פעלה כראוי..
לבסוף, כשיש לך את השורות שורש, גרעין e ראשית עבור רשימות, פשוט הפעילו את הפקודה boot כדי לאתחל את המערכת. לאחר ההתקנה, השלב האחרון יהיה להתקין מחדש את GRUB מתוך לינוקס עצמה עם grub-install בדיסק המתאים, כדי להבטיח שלא תצטרך לחזור על התהליך הידני בהפעלות מחדש הבאות.
שיטות נפוצות אחרות (באמצעות LiveCD, chroot ו-Boot-Reparation)
עד כה, ראינו כיצד לפתור את המצב באמצעות קונסולת GRUB בלבד , מבלי להזדקק לאמצעים חיצוניים. עם זאת, כדאי גם להכיר את השיטות הקלאסיות עם LiveCD/LiveUSB וכלים גרפיים, מכיוון שבמקרים מסוימים הנזק כה נרחב עד שאתחול ממערכת ניתנת לאתחול היא האפשרות היחידה.
טכניקה נפוצה בהפצות מבוססות דביאן ואובונטו היא לאתחל מ-LiveCD או LiveUSB (לדוגמה, תמונת Ubuntu, Linux Mint, Debian Live וכו'), להרכיב את מחיצת השורש של המערכת הפגומה, להרכיב גם את /boot אם זו מחיצה נפרדת, ולאחר מכן לבצע chroot על מערכת קבצים זו כדי להתקין מחדש את GRUB כאילו היינו פועלים מההתקנה עצמה.
התהליך, באופן כללי, מורכב מזיהוי המחיצות עם fdisk -l, לקבוע מהו השורש (לדוגמה, / dev / sda2) ומהי מחיצת האתחול אם היא קיימת (לדוגמה, / dev / sda7לאחר מכן הם מורכבים עם:
התקנת מחיצות (למשל):sudo mount /dev/sda2 /mntsudo mount /dev/sda7 /mnt/boot (אם יש לך קובץ /boot נפרד)
והקישור לקבצים /dev, /dev/pts, /proc ו- /sys מתבצע בתוך /mnt:
תושבות כריכה:sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
מכאן, ניתן לגשת למערכת המותקנת באמצעות:
התחבר עם: sudo chroot /mnt
ומתוך המערכת, ניתן להריץ את grub-install תוך כדי הצבעה לדיסק:
התקנה מ-chroot: grub-install --boot-directory=/boot/ --recheck /dev/sda
כדי לטעון מחדש את מנהל האתחול לתוך ה-MBR או אזור מקביל, ולאחר מכן:
צור את התצורה: grub-mkconfig -o /boot/grub/grub.cfg
כדי ליצור מחדש את קובץ התצורה. לאחר יציאה מ-chroot באמצעות exit ולהפעיל מחדש את המחשב (sudo reboot), בדרך כלל תפריט GRUB מופיע שוב כרגיל..
אפשרות נוחה נוספת למשתמשים שמעדיפים להימנע מהטרמינל היא כלי Boot-Repair , שניתן להתקין בסביבת אובונטו חיה ומציע ממשק גרפי המסוגל לזהות התקנות של מערכת הפעלה ולתקן GRUB כמעט באופן אוטומטי . פשוט הפעילו את הכלי, בחרו באפשרות "תיקון מומלץ" ותנו לו לנתח ולכתוב מחדש את טוען האתחול.
בעוד שפתרונות אלה המבוססים על LiveCDs או תוכנות עזר חיצוניות הם פרקטיים מאוד, היתרון של שליטה בטכניקות שראינו בהתחלה הוא שאינכם תלויים בכונן USB או דיסק בהישג יד . ניתן להסתדר עם קונסולת GRUB עצמה במצבים רבים, במיוחד כאשר הבעיה היא "רק" שמנהל האתחול איבד את ההפניה הנכונה למחיצה שבה נמצא /boot.
עם כל האמור, ברור ש- GRUB שבור לא בהכרח אומר מערכת אבודה : יש כלים במנהל האתחול עצמו, בשורת הפקודה ובסביבת ה-Live כדי לאתר את המחיצה הנכונה, לטעון את הליבה באופן ידני, לאתחל את ה-GNU/Linux ולהתקין מחדש את מנהל האתחול כדי שיעבוד שוב כמו חדש.