丢失grub的安装和修复 mbr 以及制作U盘安装grub

Boot Loader: Grub

		grub		安裝 GRUB 開機管理程式。
  1. LILO 的問題
    1. 沒有提供互動介面,所以如果 partition 亂了,容易導致無法開機的問題; 

      ### 維護模式的進入:
      linux –s
      linux single
      

    2. 每次安裝新核心,都需要重新安裝 lilo 一次。
  2. grub 的優點:
    1. 只需要安裝一次:只要修改 /boot/grub/menu.lst 中的設定,下次開機就生效。
    2. 認識與支援較多的檔案系統。
    3. 可以使用 grub 的主程式直接在檔案系統中搜尋核心。
    4. 有互動介面:
      1. 開機時,可以進入『自行編輯與修改開機設定項目』模式
      2. 可進入維護模式
  3. grub 硬碟代號:(hd0,0)
    1. 硬碟代號以小括號 ( ) 包起來;
    2. 硬碟以 hd 表示,後面會接一組數字;
    3. 以『搜尋順序』做為硬碟的編號,而不是依照硬碟排線的排序。
    4. 第一個搜尋到的硬碟為 0 號,第二個為 1 號,以此類推;
    5. 每顆硬碟的第一個 partition 代號為 0,依序類推。
    6. 硬碟代號表 
      硬碟搜尋順序 在 Grub 當中的代號
      第一顆 (hd0) (hd0,0) (hd0,1) (hd0,4) ....
      第二顆 (hd1) (hd1,0) (hd1,1) (hd1,4) ....
      第三顆 (hd2) (hd2,0) (hd2,1) (hd2,4) ....
  4. 如果 Linux 原來使用 lilo,現在要改用 grub,必須使用 grub-install 將一些必要的檔案複製到 /boot/grub。 

    [root@www ~]# grub-install [--root-directory=DIR] INSTALL_DEVICE
    選項與參數:
    --root-directory=DIR 預設 /,grub-install 將檔案複製到 /boot/grub/,
      若要複製到其他目錄與裝置去,就要用這個參數。
    INSTALL_DEVICE 安裝的裝置代號。
    
    範例一:將 grub 安裝在目前系統的 MBR 底下,系統為 /dev/hda:
    [root@www ~]# grub-install /dev/hda
    # 因為原本 /dev/hda 就是使用 grub ,所以似乎不會出現什麼特別的訊息。
    # 如果去查閱一下 /boot/grub 的內容,會發現所有的檔案都更新了,因為重裝了!
    
    範例二:我的 /home 為獨立的 /dev/hda3 ,如何安裝 grub 到 /dev/hda3 (boot sector)
    [root@www ~]# grub-install --root-directory=/home /dev/hda3
    Probing devices to guess BIOS drives. This may take a long time.
    Installation finished. No error reported.
    This is the contents of the device map /home/boot/grub/device.map.
    Check if this is correct or not. If any of the lines is incorrect,
    fix it and re-run the script `grub-install'.
    
    (fd0)   /dev/fd0
    (hd0)   /dev/hda   <==會給予裝置代號的對應表!
    
    [root@www ~]# ll /home/boot/grub/
    -rw-r--r-- 1 root root     30 Apr 30 11:12 device.map
    -rw-r--r-- 1 root root   7584 Apr 30 11:12 e2fs_stage1_5
    ....(底下省略)....
    # 檔案都安裝了,但並沒有設定檔,那要自己建立。
    

  5. 編輯 menu.lst 

    [root @test root]# vi /boot/grub/menu.lst 
    timeout 100                      <==延遲時間,單位0.1秒 
    Color black/cyan yellow/cyan     <==設定顏色的參數 
    i18n (hd0,0)/boot/grub/messages  <==設定 i18n 多國語系的訊息提示 
    keytable (hd0,0)/boot/us.klt     <==設定鍵盤形式,通常使用美規的鍵盤即可 
    Default 0                   <==預設的開機選項,依照底下的排序,第一個為 0 
    title linux                      <==第一個開機設定檔,亦即排序為 0 號 
         kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=mount 
         initrd (hd0,0)/boot/initrd.img 
                                <==上面兩個則是開機設定檔的基本內容,分別是 
                                   核心檔案所在地與 Ramdisk 的設定內容 
    title failsafe              <==第二個開機設定檔,亦即排序為 1 號 
         kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe 
         initrd (hd0,0)/boot/initrd.img 
    title windows 
      rootnoverify (hd0,0)  
      chainloader +1
    ## 設定 Windows OS 的方式跟 Linux 不同。
    ## rootnoverify 指示 GRUB 不需掛載 hda1 的分割區,只需知道是要啟動此分割區上的作業系統即可。 
    ## chainloader 指定 hda1 的第一個磁區做啟動磁區 (boot sector)。
    ## 兩行亦可合併成 chainloader (hd0,0) +1。
    

  6. 編輯 menu.lst 

    [root @test root]# vi /boot/grub/menu.lst 
    timeout 100                      <==延遲時間,單位0.1秒 
    Color black/cyan yellow/cyan     <==設定顏色的參數 
    i18n (hd0,0)/boot/grub/messages  <==設定 i18n 多國語系的訊息提示 
    keytable (hd0,0)/boot/us.klt     <==設定鍵盤形式,通常使用美規的鍵盤即可 
    Default 0                   <==預設的開機選項,依照底下的排序,第一個為 0 
    title linux                      <==第一個開機設定檔,亦即排序為 0 號 
         kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=mount 
         initrd (hd0,0)/boot/initrd.img 
                                <==上面兩個則是開機設定檔的基本內容,分別是 
                                   核心檔案所在地與 Ramdisk 的設定內容 
    title failsafe              <==第二個開機設定檔,亦即排序為 1 號 
         kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe 
         initrd (hd0,0)/boot/initrd.img 
    title windows 
      rootnoverify (hd0,0)  
      chainloader +1
    ## 設定 Windows OS 的方式跟 Linux 不同。
    ## rootnoverify 指示 GRUB 不需掛載 hda1 的分割區,只需知道是要啟動此分割區上的作業系統即可。 
    ## chainloader 指定 hda1 的第一個磁區做啟動磁區 (boot sector)。
    ## 兩行亦可合併成 chainloader (hd0,0) +1。
    

  7. grub:安裝 grub 開機管理程式。
    1. 使用 root [磁碟代號] 選擇開機根目錄 / 所在磁碟代號;
    2. 使用 setup [磁碟代號] 選擇 MBR 或 Super block 直接安裝;
    3. 使用 quit 離開 grub 。

    [root @test root]# grub 
    # 安裝在 Super Block : 
    grub> root (hd0,0)      <==這裡輸入我要的 root 硬碟磁區! 
     Filesystem type is ext2fs, partition type 0x83 
    grub> setup (hd0,0)     <==實際安裝上來!使用 setup 指令! 
     Checking if "/boot/grub/stage1" exists... yes 
     Checking if "/boot/grub/stage2" exists... yes 
     Checking if "/boot/grub/e2fs_stage1_5" exists... yes 
     Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) 
     Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) 
     Running "install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 p /boot/grub/menu 
    .lst "... succeeded 
    Done. 
    
    # 安裝在 MBR : 
    grub> root (hd0,0) 
     Filesystem type is ext2fs, partition type 0x83 
    grub> setup (hd0) 
     Checking if "/boot/grub/stage1" exists... yes 
     Checking if "/boot/grub/stage2" exists... yes 
     Checking if "/boot/grub/e2fs_stage1_5" exists... yes 
     Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded. 
    succeeded 
     Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 
    /boot/grub/menu.lst"... succeeded 
    Done. 
    grub> quit             <==離開 grub
     
     
    不知道你是否有这样的经历,在重装完windows之后呢,发现grub消失了。
    这时候很多人都会上baidu搜索什么“grub恢复”阿之类的关键词,然后
    一看,这么麻烦,还不如重装系统来得简单呢。其实恢复grub并没有那么
    复杂恐怖,如果你是个打算成为linux中手的话(说高手的话,估计你得吓
    跑了),学会处理这些问题是很必要的。下面我结合自己的实践经验来讲一
    下如果恢复grub,顺便说一下如果利用U盘作为启动盘来引导linux安装程序。
    步骤有2:
    1.制作启动光盘/U盘(如果你拥有一张安装光盘可以绕过此步骤)
    2.进入安装程序恢复grub
    下面先讲步骤1,制作启动光盘就不说了,用一张安装镜像然后刻录之即可.
    重点讲如何制作启动U盘.
    首先先下载一个工具叫USBoot1.7,注意1.7的版本与之前的版本多了一个功能
    就是增加了对大容量U盘的支持.下面是他的软件界面图.
    此次操作会格式化U盘,所以请先备份好你U盘里面的重要文件.选择好U盘盘符之后点击下面选择
    工作方式为USB-ZIP模式,这种方式在作启动盘是比较成功(至于原因大家
    有兴趣自己探索)接下来按照提示走.完毕之后呢,我们就拥有一个可以引导的
    U盘了.接下来呢,我们要让这个U盘能够能够启动我们的grub程序.下载一个
    grub for dos的程序,放到u盘中,然后编辑u盘中的autoexec.bat文件,在里面
    写上
    grub --config-file=(sdc0)/menu.lst
    这样就可以利用grub来引导了,但在此之前我们要添加一个menu.lst的文件,
    这个文件作为grub的引导菜单,具体制作方法可以baidu一下,不过我们暂时
    不需要里面有什么内容,我们只需要运行一个grub命令行就可以了.
    然后我们就可以来引导我们的安装程序了.

    步骤2:引导安装程序修复系统
    为了引导linux系统,我们需要两个文件,一个是vmlinuz,另外一个是initrd.img
    这两个文件可以在我们的linux系统镜像中查找,是用来初始化内核和一些环境的
    将这两个文件拷贝到U盘上,然后到grub命令行下,输入
    kernel (hd0,0)/vmlinuz         (注意这里的(hd0,0)应该是用U盘启动之后
                                    他自动将U盘作为第一快硬盘的第一快分区
                                    了,如果提示找不到该文件的话时下其他的)
    initrd (hd0,0)/initrd.img       (初始化镜像)
    boot 镜像文件名.iso             (引导镜像文件,即我们下载的安装镜像)
    然后我们就可以看到熟悉的安装界面出现了,此时我们再按下Alt+F2进入命令
    行界面,首先挂载我们原先的linux系统到安装临时系统上,
    mkdir /mnt/linux        (建立挂载文件夹)
    mount /dev/hda4 /mnt/linux      (挂载,这里的sdc是我的设备号,具体大家
                                    可以用fdisk -l命令查看一下自己原先的
                                    linux是哪个设备,不行的话可以试着挂载
                                    一下)
    root /mnt/linux                 (将当前命令行切换到原来linux系统的
                                    这样之后的操作都是针对原先系统的了)
    grub                            (进入grub)
    root (hd0,5)                    (设置grub引导根分区所在地)
    setup (hd0,0)                   (将grub安装在第一块硬盘的mbr上面,这样
                                    windows分区也可以用grub来引导了)
    退出,重启,引导第一快硬盘即可看到熟悉的grub又出来了.
    grub是一个比较优秀的引导程序,我们也可以利用这种思想来制作一个grub
    界面的超级启动U盘,这样以后不管windows还是linux系统怀了都可以用他来
    修复了.
     

你可能感兴趣的:(linux,windows,ext,dos,OS,工具)