当前位置 : 主页 > 操作系统 > centos >

Linux学习记录--Boot Loader

来源:互联网 收集:自由互联 发布时间:2022-06-20
Boot Loader Bootloader的作用是加载内核到内存,使内核开始执行,Grub是linux上面一个功能强大的bootloader,当我们登陆系统就会看到如下界面,它就是Grub的menu.lst,通过它我们可以选择不同的
Boot Loader


Bootloader的作用是加载内核到内存,使内核开始执行,Grub是linux上面一个功能强大的bootloader,当我们登陆系统就会看到如下界面,它就是Grub的menu.lst,通过它我们可以选择不同的系统(多操作系统时)

(这里介绍的是grub,ubantu使用的是grub2,两者存在很多差异)


Linux学习记录--Boot Loader_Linux


功能介绍

menu .list


menu.lst是Grub的开机菜单,里面的配置决定了我们去哪里读取内核与initrd

default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-371.el5) root (hd0,0) kernel /vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317 initrd /initrd-2.6.18-371.el5.img


default: 默认启动项这个与title对照,menu中配置了几个title,启动菜单就有几个选择,0代表使用第一个title内容

timeout:启动是的倒数读秒操作,-1代表不进行倒数读秒

splashp_w_picpath:menu.lst的背景图片

hiddenmenu:隐藏菜单

root:代表内核文件放置那个分区,不是根目录的意思

kernel:后面接内核文件名,在后面指定根目录挂载到那个分区

initrd:后面接虚拟文件系统文件名(其实就是指定它的位置)

(hd num1,num2): hd代表在grub中硬盘与分区的代号,num1代表硬盘代号(0开启)。Num2 代表分区号(0开始).比如:内核文件存储在第一块硬盘的D分区(第2个分区),可以表示为(hd 0,1)


举例:menu.lst配置说明

[root@localhost ~]# find / -name vmlinuz-2.6.1*;df /boot/vmlinuz-2.6.18-371.el5 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda1 101086 11727 84140 13% /boot

通过上面我们可以看到内核文件存在/boot/vmlinuz-2.6.18-371.el5下,同时/boot挂载到硬盘的第一分区,因此内核文件存储位置可以写成(hd 0,0)

root (hd0,0) kernel /vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317 initrd /initrd-2.6.18-371.el5.img

由于前面指定了root了因此后面的kernel,initrd只需写接下来的路径就可以了如:/vmlinuz-2.6.18-371.el5,接下来为根据LABEL挂载根目录到分区root=LABEL=/

同样上面配置也可以写成这样

kernel (hd0,0)/vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317 initrd (hd0,0)/initrd-2.6.18-371.el5.img


chain loader控制权转移


我们知道boot loader装在MBR或者分区的第1扇区中,chain loader功能就是将控制权交给指定分区的bootloader 让其进行加载相应的内核文件

title /dev/sda1 boot sector root (hd0,0) chainloader +1


比如我们的LINUX系统的bootloader装在了第1个硬盘第1个分区,那bootloader的位置就是第1块硬盘的第一个分区的第一扇区,因此

root (hd0,0)指定分区与磁盘,这里是第一个磁盘的第一个分区

chainloader +1 指定为第一扇区


同样假如我们LINUX系统的bootloader再在整个硬盘的MBR中,那可以这么指定

title MBR loader root (hd0) chainloader +1

由于MBR位置为硬盘的一个扇区,因此

root (hd0)指定第一个硬盘

chainloader +1指定为第一扇区


多系统并存环境


如果想让一台机器上存在多个操作系统可以通过控制权转移将控制权交给指定分区的loader进行加载相应的操作系统


假如,我的机器只有一个硬盘,我想在第1分区装WINXP,第2个分区装linux,那个就可以在menu.list中设置2个选项,第1个选项为winxp,第2个选项为linux,当选择第一个时控制权交给第1分区的bootloader,当选择第2分区时将控制权交给第2个分区的bootloader 即linux的loader


但是这里需要先安装WINXP在安装LINUX因为window不具有控制权转移功能



Grub安装


Grub安装分为3个步骤

1.      grup配置文件安装

2.      menu.list文件编辑

3.      grup 主程序安装到MBR或分区第一扇区


步骤1:grub配置文件安装


语法:grub-install[--root-directory=DIR] 设备代号

选项与参数

--root-directory:当指定DIR是,grub配置文件安装在DIR/boot/grub

如不指定此属性,此默认安装在/boot/grub

[root@localhost ~]# grub-install /dev/sda Installation finished. No error reported. This is the contents of the device map /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'. # this device map was generated by anaconda (hd0) /dev/sda [root@localhost lib]# ll /boot/grub/ -rw-r--r-- 1 root root 7584 03-31 10:52 e2fs_stage1_5 -rw-r--r-- 1 root root 7456 03-31 10:52 fat_stage1_5


步骤2:编写menu.list

[root@localhost lib]# vim /boot/grub/menu.lst default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-371.el5) root (hd0,0) kernel /vmlinuz-2.6.18-371.el5 ro roo initrd /initrd-2.6.18-371.el5.img

步骤3:grup 主程序安装到MBR或分区第一扇区


Grubshell的简单语法

root(hdx,x):选择含有grub目录的那个分区

find 文件路径,

find 路径/stage1 查找是否有安装信息

find 路径/vmlinuz….  查找内核文件

setup(hdx,x) 安装grub到分区的第1扇区

setup(hd 0) 安装grub到MBR中

[root@localhost /]# grub =>进入grub shell GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> find /vmlinuz-2.6.18-371.el5 (hd0,0) grub> setup (hd0) => 安装到MBR中 Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done. grub> setup (hd0,0) 安装到sector中 Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "install /grub/stage1 (hd0,0) /grub/stage2 p /grub/grub.conf "... succeeded Done. grub> quit

忘记root密码解决


Linux学习记录--Boot Loader_bootloader_02


开机后按下e进入menu.lst编辑模式


Linux学习记录--Boot Loader_grub_03


编辑Kernel信息。指定为单用户模式


Linux学习记录--Boot Loader_grub_04


按Esc返回刚才那个页面,按下b, 此时系统会给你个root 权限的shell.使用passwd命令修改密码即可


【本文转自:国外高防服务器 http://www.558idc.com/usa.html转载请说明出处】
上一篇:rsync+inotify 实现数据实时同步
下一篇:没有了
网友评论