Boot Loader: Grub
grub 安裝 GRUB 開機管理程式。
- LILO 的問題
- 沒有提供互動介面,所以如果 partition 亂了,容易導致無法開機的問題;
### 維護模式的進入: linux –s linux single
- 每次安裝新核心,都需要重新安裝 lilo 一次。
- 沒有提供互動介面,所以如果 partition 亂了,容易導致無法開機的問題;
- grub 的優點:
- 只需要安裝一次:只要修改 /boot/grub/menu.lst 中的設定,下次開機就生效。
- 認識與支援較多的檔案系統。
- 可以使用 grub 的主程式直接在檔案系統中搜尋核心。
- 有互動介面:
- 開機時,可以進入『自行編輯與修改開機設定項目』模式
- 可進入維護模式
- grub 硬碟代號:(hd0,0)
- 硬碟代號以小括號 ( ) 包起來;
- 硬碟以 hd 表示,後面會接一組數字;
- 以『搜尋順序』做為硬碟的編號,而不是依照硬碟排線的排序。
- 第一個搜尋到的硬碟為 0 號,第二個為 1 號,以此類推;
- 每顆硬碟的第一個 partition 代號為 0,依序類推。
- 硬碟代號表
硬碟搜尋順序 在 Grub 當中的代號 第一顆 (hd0) (hd0,0) (hd0,1) (hd0,4) .... 第二顆 (hd1) (hd1,0) (hd1,1) (hd1,4) .... 第三顆 (hd2) (hd2,0) (hd2,1) (hd2,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 ....(底下省略).... # 檔案都安裝了,但並沒有設定檔,那要自己建立。
- 編輯 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。
- 編輯 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。
- grub:安裝 grub 開機管理程式。
- 使用 root [磁碟代號] 選擇開機根目錄 / 所在磁碟代號;
- 使用 setup [磁碟代號] 選擇 MBR 或 Super block 直接安裝;
- 使用 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系统怀了都可以用他来
修复了.