從sarge開始,grub成為debian的默認boot loader,說明grub有比lilo更高明的地方。但是,像我這樣用慣了lilo的人,轉到grub來還是有點不習慣。這兩天看了grub的一些文檔,終于把一些本來不清楚的地方琢磨的有點明白了。現在把自己的一些心得寫在這里,希望對那些和我有同樣問題的朋友能起到一點幫助。
1、grub是什么?
按照官方文檔的說法,grub是一個boot loader,它主要負責pc機自檢(POST)以后到操作系統內核獲得控制權之間一些工作。如果只是引導本地系統,能正常工作的grub應該包括一下文件:stage1、stage2、*stage1_5、menu.lst。
其中stage1的大小一定是512字節,它要被安裝(也就是寫入)某個硬盤的主引導記錄,或者某個活動分區(這個分區要用fdisk標記成可啟動的)的啟動扇區。stage1的主要的也是唯一的作用就是找到你存放在硬盤上某個地方的stage2文件,來完成后續的工作。
stage2文件可以存在在某個特定的文件系統中,比如你分了一個linux分區,在上面創建一個ext2文件系統,然后把這個文件拷貝到這個分區的某個目錄下。也可以把stage2直接存放在硬盤的某個位置,也就是未分區的某個地方。不過,好像沒有多少人會這么做吧。
因為stage1的容量有限(主引導記錄MBR和啟動扇區的大小只能夠是512字節),所以它對文件系統是無法識別的,那如果你把stage2存放在ext2或者fat格式的文件系統上,它如何來找到這個文件呢?這就要用到上面提到的那些stage1_5的文件了,它們負責解釋文件系統。你的stage2放在什么格式的文件系統上,就要調用對應的那個stage1_5文件。比如,你把stage2存放在ext2格式的文件系統上,就需要e2fs_stage1_5;stage2存放在fat格式的文件系統上,就需要fat_stage1_5了。
總的來說,從你按下計算機電源,到debian啟動,大概的過程如下:
?、侔聪码娫春?,計算機自檢(POST),如果硬件設備(CPU、內存、硬盤、光驅、各種卡)都沒有問題,BIOS會檢查各個硬盤的MBR,看有沒有可以執行的代碼,如果你把grub安裝到第一個硬盤的MBR上,那BIOS就會找到它,然后把控制權交個這段代碼(其實就是512字節大小的stage1)。
?、趕tage1根據安裝時提供的信息,如stage2在什么地方,需不需要加載文件系統的對應的stage1_5文件等,找到stage2文件,并把控制權交給stage2。
?、踫tage2會需要特定位置的menu.lst文件,如果找到,就分析其中的內容,形成操作系統選擇菜單(Grub管它叫Menu Interface),如果沒有找到menu.lst或者這個文件的格式、內容有錯誤,那就顯示grub的命令行提示符。
④當你選擇了菜單中相應的條目,或者輸入了相關的命令,就可以看是引導系統了。比如引導linux的話,stage2會負責將vmlinuz和initrd(如果有的話)裝載到內存,并把控制全交給vmlinuz。
新聞熱點
疑難解答