Chinaunix首页 | 论坛 | 博客
  • 博客访问: 353518
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 333
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-27 14:44
个人简介

兴趣是最好的学习契机!

文章分类

全部博文(127)

文章存档

2017年(1)

2016年(3)

2015年(54)

2014年(58)

2013年(11)

我的朋友

分类: LINUX

2015-05-18 17:37:02

在使用grub前,最重要的事情之一就是理解这个程序是如何引用设备的,如系统硬盘驱动器、分区等。对于配置grub实现多操作系统的引导,这方面的信息是很重要的。

 

grub的设备命名

       系统的第一个硬盘驱动器被grub称为(hd0),在它上面的第一个分区被称为(hd0,0),第二个分区被称为(hd0,1),以此类推即可。第二个硬盘驱动器上的第一个分区则被称为(hd1,0)。无论是并口硬盘还是串口硬盘或是SCSI硬盘,在grub都是用hd来标识;而不像在Linux中使用mount挂载硬盘时,SCSI硬盘和串口硬盘要使用sd来标识。在Linux中,并口硬盘用hd标识,第一块并口硬盘则在hd后加a,以此类推到第n块硬盘为hdn;而第k块硬盘的第1个分区则被称为hdk1。若是串口硬盘将hd换成sd即可。注意grub中硬盘名称与硬盘分区名称与Linux中的差异,并要知道如何转换。

 

grubroot device

Linux 中,当谈到root device时,通常是指主Linux分区。但是,grub有它自己的root device定义。grubroot device分区是保存Linux内核的分区。这可能是Linux的主分区,也可能不是。实际上,人们可以将grubroot device分区看作是grub的当前工作路径。一旦使用grub就一定要使用grubroot命令指定一个root device分区。

 

grub的引导过程

       实际上grub在安装时是把一个小于512bytestage1文件装入了MBR(假设grub安装在MBR)。当磁盘引导时会运行MBR中引导程序,如果是stage1的话,则会按照指定的路径载入Linuxgrub文件夹下的stage2stage2再对grub文件夹下的grub.conf文件进行解析,从而显示启动界面、读入Linux kernel、加载硬件驱动,直至系统启动完成。

       grub对操作系统的引导可以分为两类:直接引导和间接引导。许多的Unix和类Unix系统,如Linux的各种版本都可以被直接引导,而Windows操作系统则不能被直接引导,只能够进行间接引导。

       这里只讨论GNU/Linux的直接引导,过程如下:

1.       使用root命令将root device设置为操作系统镜像(image)所在的分区,并挂载该分区;

2.       使用kernel命令载入该系统的kernel image并为该image提供参数;

3.       使用initrd命令将各个硬件的驱动载入内存中,以驱动这些硬件。initrd 就是initial ramdisk的缩写,是将内存作当作虚拟磁盘使用。initrd的作用主要是在系统核心还没有载入之前,先以Kernel modules的方式将系统的硬件设备(scsi卡,网卡,声卡等等的驱动程序)先载入内存中,以驱动这些装置。所以当你将自己的硬件配备的驱动程序编译成模块,而非编入系统核心时,就必须使用initial ramdisk

4.       使用boot命令启动。

接下来讨论间接引导。间接引导的实质就是通过grub载入其他操作系统自己的启动引导加载程序,是一种链式的引导方式。过程如下:

1.       使用rootnoverity命令将root device设置为操作系统镜像(image)所在的分区,但并不挂载,以防grub在挂载不能识别的文件系统时出错;

2.       使用makeactive命令激活grub当前的root device。首先,在现代的操作系统中,这一步是没有必要的;其次,这只能在grub当前的root device是磁盘的主分区的时候才有效;

3.       使用chainloader +1命令载入指定的操作系统的启动引导程序。+1表示读入grub当前的root device分区的512字节(该分区的第一个扇区)的启动区;

4.       使用boot命令启动。

 

grub的命令行

       前面已经谈到了许多命令行的命令了,如rootkernel等。这一部分主要是讨论如何在一个陌生的系统中通过grub的命令行来引导系统。

       Linux的引导为例。通过上面的讲解,可以知道首先要找到系统镜像所在的分区。有两个命令可以实现:catfind。在grub中,cat和在Linux中比较相似,可以显示指定文件的内容。但需要注意的是,若不指出分区,那么cat只会在目前的grubroot device分区里寻找。find则与Linux中的find命令有所不同:在grub中,find将在所有挂载的分区中搜寻指定的文件和文件夹。要命的是必须给出完整的文件路径和文件名,这直接导致它在grub中变成了鸡肋。所以常用catTab来寻找系统镜像和其他必须的文件。

在找到kernelinitrd命令所必需的文件后,还必须给出kernel载入的kernel image的必要参数。下面是一些常用的kernel参数:

ro    表示kernel是只读的

root=/dev/*     root指定的是Linuxroot分区,*Linux的分区表示法而非grub的,因为这是kernel而非grub的参数。

root=LABEL=              这里需要指明的是Linuxroot分区 / LABEL表示使用/etc/fstab中为根文件系统指定的标签(label)

quiet              不输出启动信息

rhgb        图形方式启动

single      单用户模式。在单用户模式下,用“passwd –d 账户名“命令更改口令。其他如更换显示器,而无法进入图形界面等其他原因需要进入其他运行级,都可以这么做了。进入linux单用户模式后vi /etc/shadow,然后将第一行,即以root开头的一行中root:后和下一个:前的内容删除,最后保存并reboot重启。

 

Windows XP引导Linux

dd if=/dev/(grub引导程序stage1所在分区)  of=路径/Linux.lnx bs=512 count=1

将生成的Linux.lnx弄到Windows XPC盘根目录下,在boot.ini新建一行,写入C:/Linux.lnx=" Linux "即可。

阅读(2614) | 评论(0) | 转发(0) |
0

上一篇:linux shell 零碎

下一篇:GRUB启动分析之stage1

给主人留下些什么吧!~~