天天看點

更新grub 第一分區遇到的問題

問題:目前系統盤第一分區隻有60M, 更新新系統後感覺第一分區有點小,是以在更新新系統的時候也必須修改第一分區的大小。

目前已經有制作好的鏡像檔案!這個檔案第一分區是120M 足夠了!

先看一下概念:MBR GRUB的概念

 MBR是硬碟上的一個扇區,包含三部分内容(引導程式、分區表及分隔辨別,MBR總計512位元組;其中引導程式最多占446個位元組);為什麼需要這個MBR,主要是因為BIOS太小,功能有限。當系統加電,bios自檢後,就會将MBR Load進記憶體。也就意味着引導程式被激活,分區表資訊已經加載到記憶體,同時也意味着對系統的控制權從bios過渡到GRUB.GRUB是GRand Unified Bootloader的縮寫,它是一個多重作業系統啟動管理器。用來引導不同系統。

 GRUB是一個系統引導程式,分為兩個階段,

  第一階段它儲存在MBR中.用彙編語言編寫,也就是MBR中的引導程式部分。①基本的硬體裝置初始化(屏蔽所有的中斷、關閉處理器内部指令/資料cache 等)。②為加載 Bootloader 的Stage2 準備空間。③如果是從某個固态存儲媒質中,則拷貝 Bootloader 的stage2 到RAM 空間中。④設定好堆棧。⑤跳轉到 stage2 的C 程式入口點。

  GRUB引導程式的第二階段,通常用C語言編寫,這個階段的任務有: ①初始化本階段要使用到的硬體裝置。②檢測系統記憶體映射。③将kernel 映像和根檔案系統映像從flash 上讀到RAM 空間中。④為核心設定啟動參數⑤調用核心。

它通常儲存在/boot/grub/中。 當我們啟動系統進入GRUB界面時,會看到有選擇資訊,如果我們自己編譯了系統核心的話,你可以選擇從某個核心啟動。同時要注意的是GRUB的配置檔案和核心在/boot分區。從前面分析我們可以看出,/BOOT和MBR不存在包含關系。

GRUB第一階段需要去MBR中去讀引導程式,GRUB第二階段需要到/boot分區讀系統核心和配置檔案。

  mbr中存放了啟動程式和該磁盤的分區表,分區表一共描述了4個分區,其中一個分區為可啟動分區,mbr中的啟動程式的任務就是在分區表中找到這個啟動分區,然後将執行權力交給啟動分區的引導程式

啟動第一步--加載BIOS

當你打開計算機電源,計算機會首先加載BIOS資訊,BIOS資訊是如此的重要,以至于計算機必須在最開始就找到它。這是因為BIOS中包含了CPU的相關資訊、裝置啟動順序資訊、硬碟資訊、記憶體資訊、時鐘資訊、PnP特性等等。在此之後,計算機心裡就有譜了,知道應該去讀取哪個硬體裝置了。

啟動第二步--讀取MBR

衆所周知,硬碟上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512位元組,别看地方不大,可裡面卻存放了預啟動資訊、分區表資訊。

系統找到BIOS所指定的硬碟的MBR後,就會将其複制到0×7c00位址所在的實體記憶體中。其實被複制到實體記憶體的内容就是Boot Loader,而具體到你的電腦,那就是lilo或者grub了。

啟動第三步--Boot Loader

Boot Loader 就是在作業系統核心運作之前運作的一段小程式。通過這段小程式,我們可以初始化硬體裝置、建立記憶體空間的映射圖,進而将系統的軟硬體環境帶到一個合适的狀态,以便為最終調用作業系統核心做好一切準備。

Boot Loader有若幹種,其中Grub、Lilo和spfdisk是常見的Loader。

我們以Grub為例來講解吧,畢竟用lilo和spfdisk的人并不多。

系統讀取記憶體中的grub配置資訊(一般為menu.lst或grub.lst),并依照此配置資訊來啟動不同的作業系統。

啟動第四步--加載核心

根據grub設定的核心映像所在路徑,系統讀取記憶體映像,并進行解壓縮操作。此時,螢幕一般會輸出“Uncompressing Linux”的提示。當解壓縮核心完成後,螢幕輸出“OK, booting the kernel”。

系統将解壓後的核心放置在記憶體之中,并調用start_kernel()函數來啟動一系列的初始化函數并初始化各種裝置,完成Linux核心環境的建立。至此,Linux核心已經建立起來了,基于Linux的程式應該可以正常運作了。

啟動第五步--使用者層init依據inittab檔案來設定運作等級

核心被加載後,第一個運作的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案,并依據此檔案來進行初始化工作。

其實/etc/inittab檔案最主要的作用就是設定Linux的運作等級,其設定形式是“:id:5:initdefault:”,這就表明Linux需要運作在等級5上。Linux的運作等級設定如下:

0:關機

1:單使用者模式

2:無網絡支援的多使用者模式

3:有網絡支援的多使用者模式

4:保留,未使用

5:有網絡支援有X-Window支援的多使用者模式

6:重新開機系統,即重新開機

是以目前:需要一個鏡像 這個鏡像檔案以及對磁盤第一分區進行了劃分,同時grub等已經設定好

  目前已經有現成的鏡像檔案,file了一下檢視了相關資訊

file xxxx13.img 
xxxxxx13.img: DOS/MBR boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200      

此時隻需要dd 到系統盤就行

dd if=/xx.img  of=/dev/sda  bs=50M      

為了檢測這個dd 過程是不是正常的,也就是檔案是否成功寫入磁盤

  将檔案mount後 進入發現檔案有問題!!

  同時使用 kpartx   挂載虛拟檔案,檢視檔案正常,對比檔案MD5值也是一樣的,此時就有點。。。。。

更新grub 第一分區遇到的問題

目前看是:之前核心加載的是老的磁盤分區資訊,現在新的img寫入了磁盤,分區都改變了,是以此時需要執行  partprobe 重讀分區表,将磁盤分區表變化資訊通知核心