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

本文介绍如何在重装Windows后恢复GRUB引导程序。通过制作启动U盘并利用grub命令行,实现对Linux系统的引导修复。

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系统怀了都可以用他来
    修复了.
    
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值