תיקון מערכת הboot של Windows
שלום חברים! שוב בעיה במחשב.
שבוע שעבר, אחרי הבעיה שתיארתי בפוסט הקודם בנושא, בה היו שגיאות במערכת הקבצים ונאלצתי להתקין מחדש את Windows, החלטתי למחוק את המחיצה של XP ולא להתקין אותו שוב. התקנתי את Windows Server ודרכו רציתי להפטר מה XP. להפתעתי ה Server הגביל אותי. הוא לא נתן לי להסיר את המחיצה בה ישב ה XP. כמו כל צעיר מרדן אמרתי לעצמי "מי פה בעל הבית?", העליתי את הLinux ומחקתי את המחיצה משם. כאן התחילו הצרות.
כך זה היה נראה לפני השינוי:
התמונה לקוחה מהתוכנה GParted שרצה על Archlinux. שימו לב למחיצה השמאלית ביותר, היא המחיצה של הXP ואותה מחקתי. את מחיצת ה Data הגדלתי כך שתגיע עד תחילת הדיסק ותהפוך ל80GB.
כך זה היה נראה אחרי השינוי:
פעולות של הרחבת או כיווץ כונן לוקחות הרבה זמן. אחרי שלא היתה הפסקת חשמל באמצע (איזה פחד) וכל הפעולות בוצעו בהצלחה, הייתי בטוח שהכל בסדר עד סוף השבוע כשניסיתי להעלות את ההתקנה החדשה של ה Server. במקום מסך פתיחה קיבלתי הודעת שגיאה מה Boot loader שלי, GRUB, שהמחיצה ממנה אני מבקש להעלות את מערכת ההפעלה לא קיימת.
נצטרך להסביר כמה מושגים לפני שנמשיך.
כונן קשיח מחולק למחיצות משלושה סוגים.
Primary – מחיצה שיושבת לא בתוך מחיצה אחרת. מכילה מערכת קבצים, כלומר, מידע או מערכת הפעלה.
Extended – מחיצה שכמו Primary יושבת לא בתוך מחיצה אחרת. מכילה מחיצות אחרות מסוג Logical.
Logical – מחיצה שיושבת בתוך מחיצת Extended. מכילה מערכת קבצים, כמו Primary.
הסיבה שקיימות מחיצות Logical היא מכיוון שבמערכות מבוססות BIOS יש הגבלה על מספר מחיצות הPrimary. לכן המציאו סוג חדש, Extended, שיכיל מחיצות דמויות Primary שניתן ליצור ללא הגבלה בטווח סביר. כך ניתן ליצור לדוגמה 3 מחיצות Primary, ועוד אחת Extended, ובתוכה מחיצות Logical נוספות.
עכשיו כמה מושגים הקשורים לתהליך הBoot:
BIOS – ראשי תיבות של Basic Input Output System. התוכנה הראשונה שרצה כשהמחשב עולה, לפני מערכת ההפעלה.
MBR – ראשי תיבות של Master Boot Record, רשומת הBoot הראשית. נמצאת בתחילת הכונן הקשיח. מפנה למחיצה בה נמצאת מערכת ההפעלה.
Boot Sector – ה Sector הראשון במחיצה, מכיל הפניה לליבת מערכת ההפעלה היושבת במחיצה.
תהליך הBoot בקצרה:
ה BIOS מזהה את חומרת המחשב. מעביר את השליטה לBoot manager היושב בMBR. הBoot Manager מפעיל את מערכת ההפעלה מאחת המחיצות, או מעביר את השליטה לBoot manager נוסף היושב בBoot sector של אחת המחיצות. מערכת ההפעלה מתחילה לרוץ.
עכשיו אתאר את מבנה מערכת הBoot במחשב שלי.
בMBR יושב הGRUB. הוא יכול לטעון את הkernel של Linux מכל מקום בכונן הקשיח ולהריץ אותו. לחילופין הוא יכול להעביר את השליטה לBoot manager של Windows היושב בBoot sector של אחת המחיצות כדי שיפעיל את Windows.
כאשר הGRUB עולה, הוא מציג תפריט עם אפשרויות ההפעלה. אחת מהן היא Windows והקוד העומד מאחוריה הוא:
set root=(hd0,1) chainloader +1
הפירוש הוא, המחיצה הרלוונטית לגבינו היא (hd0,1) כלומר, כונן קשיח ראשון, מחיצה ראשונה. אח"כ מעביר את השליטה לBoot manager היושב בBoot sector של המחיצה בעזרת chainloader +1.
כאשר מחקתי את המחיצה של XP, מחקתי את המחיצה (hd0,1), לכן אין פלא שהוא מתלונן שהמחיצה לא קיימת. הוא צודק.
הדבר הראשון שניסיתי הוא לשנות את ההפניה מהכונן של XP לכונן של הServer. הServer יושב במחיצה מסוג Logical שסימונה הוא (hd0,7). הפכתי את השורה
set root=(hd0,1)
לשורה
set root=(hd0,7)
זה לא עזר. הפעם כאשר בחרתי באפשרות הזו הוא פשוט לא התקדם. אז התחלתי להבין מה קרה. התקנתי קודם כל את XP. הוא שם לעצמו Boot loader בשני מקומות, בMBR וBoot sector של המחיצה מס' 1 בה הוא ישב. אח"כ התקנתי את Server. הוא השאיר את הMBR על כנו (כנראה), והשתלט על הBoot sector של XP. הוא שתל שם תפריט המאפשר בזמן עליית מערכת ההפעלה, לבחור איזו מהמערכות להעלות, XP או Server. אח"כ דרסתי את הMBR עם GRUB כדי לאפשר להעלות את Linux, ושמתי כאפשרות בGRUB הפניה לBoot sector של המחיצה הראשונה, בה יושב עכשיו התפריט שמאפשר לבחור איזה Windows להעלות.
כאשר מחקתי את המחיצה הראשונה הGRUB המשיך לעבוד, כי הוא נמצא בMBR, אבל התפריט שמאפשר לבחור Windows נמחק. לא רק מערכת הBoot של XP ישבה במחיצה הראשונה אלא גם של הServer. צריך לבנות מערכת Boot בשביל הServer במקום אחר.
לרשותי עמד דיסק התקנה של הServer. עשיתי ממנו Boot, ובחרתי באפשרות Repair your computer. אין כלים עם ממשק גרפי כמו בWindows 7, כך שאין לנו ברירה אלה לבחור Use recovery tools ואח"כ Command prompt.
נקבל ממשק טקסט בתיקיה x:\sources. ניסיתי להריץ bootrec /ScanOs כדי לבדוק האם הוא מזהה שיש התקנה של Windows בכונן. הוא זיהה, וכתב
[1] D:\Windows
כשהרצתי bootrec /FixBoot הוא כתב
The operation completed successfully
אבל זה לא אומר כלום. הוא לא תיקן שום דבר. כדי לתת לWindows הרגשה שהוא נמצא לבד ואין Linux בתמונה הרצתי גם bootrec /FixMbr, כך שהGRUB לא יעלה בכלל. אח"כ אני אחזיר אותו.
ניסיתי לתת לו לבנות את התפריט של בחירת Windows (להלן BCD) בעזרת bootrec /RebuildBcd. כאן סוף סוף אינדיקציה לבעיה
Element not found
אחרי שהגישוש באפלה לא הניב תוצאות, חיפשתי אולי יש איזה כלי אוטומטי לפתרון בעיות ומסתבר שהכלי של Windows 7 נמצא גם פה, גם אם לא בתפריטים, הוא קיים. הוא נמצא ב
x:\source\recovery\startrep.exe
זהו הממשק הגרפי המוכר לתיקון שגיאות Boot. אחרי שהרצתי אותו כמה פעמים הואלתי בטובי לשים לב מה הוא כותב לי והנה רמז.
no system partition
חיפשתי בGoogle וגיליתי עובדה מעניינת. בניגוד לLinux, מערכת הBoot של Windows לא יכולה לעלות מתוך מחיצה מסוג Logical ובגלל זה אני לא יכול לבנות את מערכת הBoot במחיצה של הServer. חייבים ליצור מחיצה Primary ולסמן אותה כactive או כboot (אלה flags שניתן להגדיר דרך התוכנה לשינוי מחיצות).
יצרתי מחיצה Primary חדשה בגודל 1.5GB בתחילת הכונן הקשיח (מספיק בערך 100MB אבל אני עוד רוצה לשחק עם המחיצה הזאת) ופירמטתי אותה לNTFS כדי להתקין שם את הBoot. כך זה נראה בסוף:
עשיתי שוב boot מדיסק ההתקנה של הServer והעתקתי קובץ חשוב לתיקייה הראשית של הכונן החדש:
x:\Windows\Boot\PCAT> copy bootmgr c:\
כונן x זה דיסק ההתקנה עצמו. הקובץ שהעתקנו הוא הBoot manager של Windows. עכשיו הרצתי שוב את התיקון האוטומטי StartRep, והוא אמר שהוא תיקן את השגיאה
boot manager is corrupt
אח"כ הרצתי את bootrec /RebuildBcd כדי להוסיף את הServer לBCD (תפריט העליה של Windows). הוא מצא אותו, שאל אותי אם להוסיף, וכשעניתי שכן, בניגוד לקודם זה הצליח.
עכשיו נחזיר את הGRUB למקום. נעלה את הLinux שלנו מכל GRUB שנמצא על דיסק או USB ונריץ
sudo grub-install /dev/sda
/dev/sda חייב להיות שם הכונן אליו אתם רוצים לכתוב את GRUB. הוא ייכתב לMBR.
בסופו של התהליך הכל בא על מקומו בשלום.
מקווה שהיה ברור, ואם לא, אשמח לענות.
בהצלחה
2 תגובות
וואו נשמת הסוליה, זה היה מעולה. בתור חובבן כמוני שנתקע כבר מספר פעמים, כידוע לך, בלי סקטור אתחול, זה ממש הוסיף לי רבות לתמונה.
עכשיו אני מבין יותר על מה שעשיתי עד עכשיו בלי יותר מדי להבין… תודה.